casper089 Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 Hallo, versuche den sin und tan zu berechnen, das mit hilfe einer funktion und wertrückgabe über zeiger... der haken an der sache ist das ich eben einen bestimmten wertebereich den w annehmen kann ausschließen muß. nur leider bringt er mir einen syntaxfehler `=` in der for-zeile... das zweite was ich nicht verstehe ist ich habe am anfahnd die math.h includet, doch wenn ich dann M_PI reinschreib sagt er mir das sie nicht initialisiert ist... Würd mich freuen wenn ihr mir weiter helfen könntet!!! Danke gruß #define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> #define PI = 3.14193 void sin_tan(double w, double *ws, double *wt); int main(void) { double w, ws, wt; printf("Winkel im Bogenmass zw.0 und 3.14 eingeben:\n"); scanf("%lf",&w); sin_tan(w, &ws, &wt); printf("Winkel im Bogenmass zw.0 und 3.14\n%f\nSinus= %f\nTangens= %f", w, ws, wt); return 0; } void sin_tan(double w, double *ws, double *wt) { for ((w <= PI/2 -1e-6) && (w >= PI/2 +1e-6)) *ws = sin(w); *wt = tan(w); } Zitieren
flashpixx Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 Ich verstehe Dein Konstrukt überhaupt nicht. Du willst für _einen_ eingegeben Wert eine entsprechende Berechnung durchführen, wofür brauchst Du dann eine For-Schleife, die auch so, wie sie zu sehen ist, falsch ist? Ob Du nun Deine Daten als Call-by-Reference oder by-Value übergibst und die Daten zurück liefert, naja darüber kann man diskutieren Zitieren
casper089 Geschrieben 27. Januar 2010 Autor Geschrieben 27. Januar 2010 Hi, das problem ist das der tangens bei pi/2 nicht definiert ist, darum soll die berechnung nur ausgeführt werden wenn der übergebene winkel um weniger als 1e-6 von pi/2 entfernt ist... Zitieren
flashpixx Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 das problem ist das der tangens bei pi/2 nicht definiert ist, darum soll die berechnung nur ausgeführt werden wenn der übergebene winkel um weniger als 1e-6 von pi/2 entfernt ist... Das ist schon klar, da tan = sin/cos und der Cos eben periodisch bei pi/2 null wird. Das erklärt aber _nicht_ Deine For-Schleife. Außerdem was ist bei 3*pi/2? Dieser Wert ist dann auch ungültig, du musst jedes Vielfache entsprechend ausschließen. Um erst einmal für pi/2 zu prüfen würde man If nehmen Zitieren
chooter696 Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 deine for schleife ist trotzdem falsch. was du realisieren möchtest würde ich mit einer do while oder while schleife realisieren. eine for schleife wird anders aufgebaut als du sie hast. for ( Wert ; Wann dies gemacht werden soll ; Erhöhung des Wertes ) { } Zitieren
casper089 Geschrieben 27. Januar 2010 Autor Geschrieben 27. Januar 2010 ja sorry folks, ist klar das die for schleiße ein absoluter schwachsinn ist... habs jetzt mal mit do-while gemacht... aber immernoch der syntaxfehler ´=´ @flashpixx: das problem mit 3xpi/2 ist erledigt da der benutzer nur von 0-3.14 eingeben darf... fehleingaben werden nicht beachtet.... #define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> #define PI = 3.14193 void sin_tan(double w, double *ws, double *wt); int main(void) { double w, ws, wt; printf("Winkel im Bogenmass zw.0 und 3.14 eingeben:\n"); scanf("%lf",&w); sin_tan(w, &ws, &wt); printf("Winkel im Bogenmass zw.0 und 3.14\n%f\nSinus= %f\nTangens= %f", w, ws, wt); return 0; } void sin_tan(double w, double *ws, double *wt) { do { *ws = sin(w); *wt = tan(w); } while ((w <= PI/2 -1e-6) && (w >= PI/2 +1e-6)); } Zitieren
flashpixx Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 ja sorry folks, ist klar das die for schleiße ein absoluter schwachsinn ist... habs jetzt mal mit do-while gemacht... aber immernoch der syntaxfehler ´=´ Erklär mal bitte warum eine Schleife wenn Du in der Referenz nur einen Wert zurücklieferst !? Zitieren
casper089 Geschrieben 27. Januar 2010 Autor Geschrieben 27. Januar 2010 ja stimmt auch wieder... was hältst du davon? #define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> #define PI = 3.14193 void sin_tan(double w, double *ws, double *wt); int main(void) { double w, ws, wt; printf("Winkel im Bogenmass zw.0 und 3.14 eingeben:\n"); scanf("%lf",&w); sin_tan(w, &ws, &wt); printf("Winkel im Bogenmass zw.0 und 3.14\n%f\nSinus= %f\nTangens= %f", w, ws, wt); return 0; } void sin_tan(double w, double *ws, double *wt) { if((w <= PI/2 -1e-6) && (w >= PI/2 +1e-6)) { *ws = sin(w); *wt = tan(w); } else printf("Winkel im Bogenmass zw.0 und 3.14\n%f\nFehler", w); } Zitieren
flashpixx Geschrieben 27. Januar 2010 Geschrieben 27. Januar 2010 Ich würde den Vergleich ungefähr so realisieren: #include <float.h> bool doubleequal(double a, double { return fabs(a - < DBL_EPSILON; }[/code] Aber so sieht das schon besser aus Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.