Zum Inhalt springen

Arrayelemente summieren


GMKai

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

>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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...