Summe von 0 bis n mithilfe einer while schleife in C berechnen?

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.

MrFlyd1234 
Fragesteller
 26.11.2019, 13:50

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;

}

0
MagicalGrill  26.11.2019, 13:53
@MrFlyd1234

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 ;)

1
MrFlyd1234 
Fragesteller
 26.11.2019, 13:57
@MagicalGrill

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;

}

0
MagicalGrill  26.11.2019, 14:01
@MrFlyd1234

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 ;)

0
MrFlyd1234 
Fragesteller
 26.11.2019, 14:10
@MagicalGrill

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!

1
MagicalGrill  26.11.2019, 14:14
@MrFlyd1234

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;
}
0
MagicalGrill  26.11.2019, 14:17
@MagicalGrill

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

1