GMKai Geschrieben 16. Oktober 2003 Geschrieben 16. Oktober 2003 Hab mal folgendes zusammengetragen: #include <stdio.h> long double summe(long double *f, int n); int main() { char buffer[255]; int i,n=5; long double f[n]; for (i=0;i<=n;i++) { f=i; } printf("Summe= %ld\n",summe(f,n)); gets(buffer); return 0; } long double summe(long double *f, int n) { int zahl=0; long double erg; for (zahl=0;zahl<=n;zahl++) { erg=f[zahl]+erg; } return erg; } als ergebnis kommt leider 0 raus, woran liegt das nun wieder? Zitieren
Orffi Geschrieben 16. Oktober 2003 Geschrieben 16. Oktober 2003 Das sind ein paar Fehler drin: 1. int i,n=5; long double f[n]; long double f[n]; Das n sollte ein const-Ausdruck sein, was es nicht ist. Mag sein, daß Dein Compiler dies akzeptiert, ist aber so kein Standard von C/C++... Selbst wenn f[n] mit n= 5 standardkonform sein sollte: f[5] hat die Felder 0,1,2,3,4. Du schreibst aber in die Felder 0,1,2,3,4,5. 2. long double erg; erg ist nur deklariert, aber nicht definiert. In diesem Fall würde long double erg = 0.0; Sinn machen. HTH Jan [edit] Statt %ld kannst Du ja auch mal %e oder %f in printf nehmen. [/edit] Zitieren
nic_power Geschrieben 19. Oktober 2003 Geschrieben 19. Oktober 2003 Hallo, Original geschrieben von Orffi Statt %ld kannst Du ja auch mal %e oder %f in printf nehmen. %ld ist an dieser Stelle aus zwei Gründen schlicht und ergreifend falsch. Zum einen darf %l nur mit Integers verwendet werden und zum anderen ist %d keine Format für eine Fliesskommavariable! Für Fliesskomma-Arithmetik wird %L verwendet. Korrekt wäre also printf("Summe= %Lf\n",summe(f,n)); [/php] Nic Zitieren
Orffi Geschrieben 19. Oktober 2003 Geschrieben 19. Oktober 2003 Hallo nic_power, habe mich ein wenig zu flapsig ausgedrückt, als ich meinte: "Statt %ld kannst Du ja auch mal %e oder %f in printf nehmen." Ich meinte schon damit, daß %ld nicht richtig ist. Ich hatte diesen Fehler nur total übersehen, deswegen hatte ich den Hinweis in einem Edit untergebracht. Mein Tip hätte wohl deutlicher ausfallen müssen. Bis denn dann Jan Zitieren
GMKai Geschrieben 21. Oktober 2003 Autor Geschrieben 21. Oktober 2003 >Das sind ein paar Fehler drin: ja, das weiss ich auch :-) >erg ist nur deklariert, aber nicht definiert. In diesem Fall würde long double erg = >0.0; Sinn machen. was heisst das? >Statt %ld kannst Du ja auch mal %e oder %f in printf nehmen. auch dann funktioniert es leider noch nicht. Zitieren
nic_power Geschrieben 21. Oktober 2003 Geschrieben 21. Oktober 2003 Hallo, da Du mit long double arbeitest, solltest Du bei der Ausgabe mit "%Lf" bzw. "%Le" arbeiten. Ein cast bei der Zuweisung in das Array kann auch nicht schaden: #include <stdio.h> long double summe(long double *f, int n); int main() { int i,n=5; long double f[n]; for (i=0;i<n;i++) { f[i]=(long double)i; } printf("Summe= %Le\n",summe(f,n)); } long double summe(long double *f, int n) { int zahl=0; long double erg=0.0; for (zahl=0;zahl<n;zahl++) { erg=f[zahl]+erg; } return erg; } [/php] Nic 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.