Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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]

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

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

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.