Veröffentlicht 16. Oktober 200321 j 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?
16. Oktober 200321 j 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]
19. Oktober 200321 j 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
19. Oktober 200321 j 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
21. Oktober 200321 j >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.
21. Oktober 200321 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.