Geometrische Summe

erom

Grünschnabel
Hallo,


ich soll die Geometrische Summe mit C++ berechnen

Geometrische Summe.PNG




mein Ansatz ist:

Code:
# include <iostream >
 using namespace std ;

 int main () {
 unsigned int m = 5;
 double sum = 0;
 long n ;

 // *************************************
for (n = 1 ; sum >= m ; n++)

	sum += 1/n;
	
	
 // *************************************

 cout << "Man muss " << n <<" Zahlen aufsummieren ." << endl ;
 cout << "Die Summe ist " << sum << endl ;

 getchar();
 return 0;
 }


Dies schein jedoch nicht zu funktionieren , ich habe auch schon die Rechnung oder das Veränderungskriterium geändert und er gibt mir keine sinnvollen Ergebnisse.
Bitte um Hilfe

Erik
 
Hi

bitte keine Fragen in die Tutorial-Inbox posten.

Ist die Variable m das n aus der Formel?
Weil die Variable n hat ja keinen Wert am Anfang, bis wohin aufsummiert werden sollte.
 
Das n soll durch das sum >= m gestoppt werden , denn n ist ja von sum abhängig

also wenn sum den Wert 5 (m) oder größer erreicht hat soll sie stoppen und mir "n" und "sum" ausgeben
 
Zuletzt bearbeitet von einem Moderator:
Das ist alles etwas verwirrt.
Mathematisch gesehen ist n nicht von sum abhängig, sondern wenn schon umgekehrt.
Und es geht nicht drum, wann die Summe einen bestimmten Wert übersteigt,
sondern wie viel solche 1/n-Glieder du brauchst.

a) Vergiss m
b) n muss vom Benutzer gegeben werden (Eingabe)
c) Dann eine Schleife von n bis >=1 runter. Da drin dann 1/n aufsummieren

Außerdem könnte es noch sein, dass bei 1/n die Kommastellen weggelassen werden,
weil n ja ein int ist. Für das Ergebnis wäre das nicht gut, deshalb explizit angeben,
dass es eine Kommazahl werden soll:
1.0/(double)n

(Und bitte keine Doppelposts).
 
Also das Ergebnis soll sein das er Summen bildet bis diese einen bestimmten Wert "m"(der voher festgelegt wird) erreicht.
Wenn also hier die Schleife so oft durchgelaufen ist das "sum >= m" ist soll sie abgebrochen werden.
Danach soll gezählt werden wieviel Summanden , also wieviele "n" nötig waren. Dies wird zusammen mit der exakten Summe "sum" (weil diese warscheinlich nicht genau 5 sein wird) ausgegeben.
Wie übersetze ich das in Code?
 
Also das Ergebnis soll sein das er Summen bildet bis diese einen bestimmten Wert "m"(der voher festgelegt wird) erreicht.
Wenn also hier die Schleife so oft durchgelaufen ist das "sum >= m" ist soll sie abgebrochen werden.
Danach soll gezählt werden wieviel Summanden , also wieviele "n" nötig waren. Dies wird zusammen mit der exakten Summe "sum" (weil diese warscheinlich nicht genau 5 sein wird) ausgegeben.
Wie übersetze ich das in Code?

Wenn überhaupt muss es sum <= n heißen. Da es die Bedingung ist unter der die Schleife ausgeführt wird und nicht die Abbruchbedingung.
 
Mit der Angabe schauts ja gleich besser aus :rolleyes:

Die Bedingung der for-Schleife ist falsch.
"Solange sum >= m"
sum ist am Anfang sicher nicht größer als m, also wird die for-Schleife nie ausgeführt.
Umdrehen: sum < m
 
Merkwürdigerweise musste ich "n" als double initialisieren dann gings. Danke aber trotzdem.

Das ist nicht merkwürdig. Das ist so gewollt.
Beispiel: 3/2 = 1
weil bei Integer-Division die Nachkommastellen abgeschnitten werden.

Daher auch sheel's Hinweis das du double(n) schreiben musst, damit die Double-Division angewendet wird.
Auf der ganz sicheren Seite bist du bei

C++:
sum += 1.0 / double(n);
 
Ich würde das ganze mit einer while Schleife lösen, da ja die Anzahl der Schleifendurchläufe nicht bekannt ist
C++:
int main () {
  double m = 5; 
  double sum = 0;
  unsigned long n=0 ; 

  while(sum<=m){  //sum und m haben gleichen Datentyp
    n++; 
    sum += 1.0 / double(n);
  }
}
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück