Strukturen-Übungs-Bsp

Das ist interessant. Sollte nicht passieren, schon gar nicht in der ersten main-Zeile.

Du sagst, mit anderem Code passiert das nicht. Wie schaut er denn jetzt aus?
 
Code sieht so aus:

C++:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>

#define MAX_LEN 100

struct punkt_struct
{
  float x;
  float y;
};

typedef struct punkt_struct punkte;


float find_nullpunkt(punkte the_array[], int len);
void print_punkte(punkte the_array[], int len);
void gen_punkte(punkte the_array[], int len);

void gen_punkte(punkte the_array[], int len)
{
  int t=0;

  for(t=0; t<len; t++)
  {
    the_array[t].x=(float)t*0.1;
	the_array[t].y=sin((float)t*0.1);
  }
}

void print_punkte(punkte the_array[], int len)
{
  int t=0;

  for(t=0; t<len; t++)
  {
    printf("(%f/%f)\n",the_array[t].x,the_array[t].y);
  }
}

float find_nullpunkt(punkte the_array[], int len)
{
  int t;

  float anz=0;

  for(t=0; t<len; t++)
  {
    if(the_array[t].y == 0)
	{
	  anz++;
	}
  }

  return(anz);
}

int main()
{
  float anz=0.0;

  punkte the_array[MAX_LEN];

  gen_punkte(the_array,MAX_LEN);

  print_punkte(the_array,MAX_LEN);

  anz=find_nullpunkt(the_array,MAX_LEN);

  printf("Die Anzahl der Nulldurchgaenge im punkt Array betraegt: %f",anz);

  return(0);
}
 
Das Einzige, was im main anders ist, ist das "0.0" statt 0 ;-]
Solche Fehler sollten dadurch ja eigentlich nicht auftreten, aber was solls...
jetzt funktioniert es ja.

Gruß
 
Zeile 50 in dem obigen Programm, wo man double-zahlen vergleicht. Da hat der Professor gesagt, das man das nicht so vergleichen soll mit "==", da es abweichungen geben könnte oder so (?).

Lieber irgendwie mit < oder >.

Ich hab das gefunden:
C++:
if(!(the_array[t].y > 0) - (the_array[t].y < 0))
{
  anz++;
}

Wenn das wirklich klappt, dass der immer anz++ macht wenn the_array[t].y eine 0 ist, dann passt es :D.

Aber ich verstehe die Sinnhaftigkeit noch nicht wirklich - Wo ist hier der Vergleich mit 0?

Danke :)
 
Zuletzt bearbeitet:
Hi

Der Grund für das Ganze ist prinzipiell mal, dass:
wenn man irgendwas mit floats/doubles ausrechnet,
wo 0 herauskommen sollte, kann es passieren, dass zB.
0.0000001 oder -0.0000002 etc. herauskommt.
Ziemlich genau 0, aber für == ist es eben nicht ganz genau gleich 0.
Dann würde anz nicht erhöht werden.

Deshalb eine andere Vergleichsart...deine im Code ist aber etwas seltsam.
Ich würd das so machen:
C++:
if(the_array[t].y > -0.001 && the_array[t].y < 0.001)
{
    anz++;
}

Gruß
 
Zurück