Warum funktioniert diese for-Schleife nicht?
-
Hi Leute!
Ich soll ein Programm schreiben, dass die Summe für ein vom Benutzerabhängiges n über diesen Ausdruck berechnet: 2*i+3
Ich hab so angesetzt mit dieser for-Schleife:
for(i=0; i <= n; i=i+1) { x = 2*i+3; }Leider liefert mir die for-Schleife nur immer das letzte Einzelergebnis z.B. für n=5 ist x=13. Wenn ich aber n=5 engebe solles mir aber 45 berechnen, was dem richtigen Wert der Summe entspricht. Mir ist der Fehler klar warum es nicht funktioniert, da immer der zuletzt berechnete Wert verloren geht. Mir ist aber leider nicht klar wie ich das Problem beheben könnte!
Könnt ihr mir helfen?
-
Ich soll ein Programm schreiben, dass die Summe für ein vom Benutzerabhängiges n über diesen Ausdruck berechnet: 2*i+3
Hervorhebung durch mich.
Ich will dich bestimmt damit auf etwas aufmerksam machen.
zum Beispiel auf etwas, was bei dir fehlt.

-
Ich müsste ja da quasi jetzt noch eine for schleife reinbauen die mir die summen mit zählt, oder? aber irgendwie blick ichs nicht
-
bandchef schrieb:
Ich müsste ja da quasi jetzt noch eine for schleife reinbauen die mir die summen mit zählt, oder? aber irgendwie blick ichs nicht
Nein, ich meine etwas anderes. Was soll x bei dir sein? Doch die Summe, oder? Aber du addierst nichts zu x, du weist immer nur den nächsten Wert zu.
-
Fall1: i=1 -> x=5
Fall2: i=2 -> x=7
usw...Aber wie realisiere ich jetzt die aufsummation?
-
Lass dich mal davon inspirieren wie du zu i bei jedem Schleifendurchgang 1 hinzuaddierst.
-
So, mein Code sieht so aus:
#include<iostream> using namespace std; int main(){ int n, i, j, f, x; cout << "n eingeben: n="; cin >> n; f=0; for(i=0; i <= n; i=i+1) { x = 2*i+3; f = (x + x)/2; } cout << "Ergebnis der Summe fuer " << n << " Addition(en): f=" << f << endl; system("pause"); return 0; }Ich muss aber gestehen, ich bin irgendwie nur durch Zufall draufgekommen. Hast du das so gedacht?
-
Du brauchst keine neue Variable dafür.
Füri=i+1benötigst du ja auch keine zweite.
-
Btw.:
Deklariere nicht alle Variablen am Anfang, sondern erst dann, wenn du sie braucht und initialisiere die dann direkt. Mit uninitialisierten Variablen können einem ganz schön miese Sachen passieren.
Und das desgin eine for-Schleife sieht so nicht nur besser aus:for (int i = 0; i < x; ++i) { //..... }
-
1. Das Programm tut noch nicht das, was es tun soll (Summe der 2i+3, i ≤ n).
2. (x + x) / 2 = 2 * x / 2 = x.
-
for(i=0; i <= n; i=i+1) { x += 2*i+3; }
-
Ich muss aber gestehen, ich bin irgendwie nur durch Zufall draufgekommen. Hast du das so gedacht?
Worauf bist du gekommen? Das Programm macht immer noch das Selbe, nur noch etwas umständlicher.
f=(x+x/2) ist äquivalent zu f=x, enthält also immer noch nur das lezte Ergebnis.Ich hoffe die Hausaufgabenmoderation findet nicht, dass ich zu viel verrate:
Statt 'x=...' schreib doch einfach 'x+=...', nicht zu vergessen, dass du dann zu Begnn x auf 0 setzen musst.EDIT: Oha, 2. Seite übersehen, da stehts ja schon

-
Also noch mal komplett:
#include <iostream> using namespace std; int main() { int x = 0; for(int i = 1; i <= 5 /* oder eben n */; i++) { x += ((2 * i) + 3); } cout << x << "\n"; return 0; }
-
Incocnito schrieb:
Also noch mal komplett:
Wobei du eine Sache geändert hast ("++i" in "i++"). Grundsätzlich würde ich mir die Variante angewöhnen, die im Zweifel die Vorteilhaftere ist (Der Mensch ist ein Gewohnheitstier).
Hier mag es keinen Unterschied machen, aber falls i mal kein int-Wert, sondern ein komplexeres Objekt (z.B. eine Klasse ist), wäre ++i im Zweifel immer die bessere Wahl (eine temporäre Variable weniger).
-
Oh stimmt, du hast recht. Hmm noch ist es ja nicht zu spät sich umzugewöhnen, werd ich mal also merken, danke.
-
Wenn ich nun die Summe von 2*i+3 berechnen möchte für n=5 komme ich auf 45. Wenn ich es aber dem Programm berechnen lasse komme ich auf 48

Dieses x += ((2*i)+3) entspricht ja eigentlich ja dem hier: x = x + ((2*i)+3) Oder?
Mein Code:
#include<iostream> using namespace std; int main(){ int n, x=0; cout << "n eingeben: n="; cin >> n; for(int i=0; i <= n; ++i) { x += ((2*i)+3); } cout << "Ergebnis der Summe fuer " << n << " Addition(en): f=" << x << endl; system("pause"); return 0; }Warum kommt da 48 raus?
-
Fehler selbst gefunde: i=0 war falsch...