Summe von 0 bis n mithilfe einer while schleife in C berechnen?
Hallo zusammen,
ich muss ein Programm in C schreiben welches die Summe von 0 bis n mithilfe von while schleifen berechnet. Das programm muss auch für negative Zahlen funktionieren. Leider steh ich etwas auf dem schlauch und komme nicht so wirklich weiter. Vielleicht kann einer helfen.
Vielen Dank im vorraus.
1 Antwort
Was soll das Programm für negative Zahlen tun? Denn streng genommen ist
wenn n negativ ist. Wie dem auch sei...
Kannst du das Problem mit einer for-Schleife lösen? Wenn ja, tu dies. Danach kannst du die for-Schleife durch eine while-Schleife simulieren.
Das sieht doch ganz gut aus!
Nun beachte, dass folgende Programme exakt dasselbe tun:
Programm 1 (FOR):
for(i = 1; i<=a; i++)
{
// mach irgendwas mit i
}
Programm 2 (WHILE):
int i = 1;
while(i <= a)
{
// mach irgendwas mit i
i++;
}
Wenn du das zum Laufen kriegst, können wir uns um die negativen Zahlen kümmern ;)
Du bist mir eine riesen hilfe! Mit positiven Zahlen klappt es jetzt!
int main()
{
int i=1, a, summe=0;
printf("Zahl eingeben: \n");
scanf("%d", &a);
while(i<=a)
{
summe += i;
i++;
}
printf("summe = %d", summe);
return 0;
}
Sehr gut, jetzt zu den negativen Zahlen.
Wenn wir am Anfang wüssten, dass eine negative Zahl eingegeben wird, hätten wir die for-Schleife ja anders schreiben können:
for(i = -1; i >= a; i--)
{
// mach irgendwas mit i
}
Das heißt, nachdem die Zahl eingelesen wurde, müssen wir prüfen, ob sie positiv oder negativ ist und je nach Ergebnis die richtige Schleife benutzen.
PS: Es geht tatsächlich ein wenig eleganter, aber ich hab mich für einen Weg entschieden, der möglichst wenig Mathematik verwendet ;)
Vielen Dank! Habe es jetzt so gelöst:
int main()
{
int i =1, a, summe=0;
printf("Zahl eingeben: \n");
scanf("%d", &a);
while( i<=a)
{
summe += i;
i++;
}
i= -1;
while( i >= a)
{
summe += i ;
i--;
}
printf("summe = %d", summe);
return 0;
}
Vielen Dank für die Hilfe!
Kein Problem. Deine Lösung durchläuft aber jetzt immer zwei Schleifen (zeitaufwendig). Falls das nicht gewünscht ist, solltest du wie gesagt die Fallunterscheidung machen:
int i,a, summe = 0;
// a einlesen
if(a >= 0)
{
i = 1;
// Schleife für positive Eingabe benutzen;
// Ergebnis zurückliefern;
}
else
{
i = -1;
// Schleife für negative Eingabe benutzen;
// Ergebnis zurückliefern;
}
Im Nachhinein betrachtet ist es doch nicht so zeitaufwendig, weil die eine Schleife ja sofort abgebrochen wird; du kannst meinen obigen Kommentar also ignorieren :D
Habe es viellecht etwas doof ausgedrückt. n soll von mir angegeben werden. Wenn ich zB -5 angebe soll -5+(-4)+(-3)+(-2)+(-1)+0 berechnet werden.
Bis jetzt sieht mein programm so aus mit for schleife:
int main()
{
int i ,a, summe=0;
printf("Zahl eingeben: \n");
scanf("%d", &a);
for(i=1; i<=a; i++)
{
summe = summe + i;
printf("summe = %d", summe);
}
return 0;
}