Was macht die FOR-Schleife ?

DerTrojaner

Mitglied
Hallo Community,

ich habe eine Aufgabe zu bewältigen die ich nicht ganz verstehe, und zwar habe ich eine FOR-Schleife vom Lehrer bekommen und nun soll ich erklären welche Bildschirmausgabe ich erhalte wenn ich die Zahl 672 eingebe.

Ich soll das halt Schriftlich vorrechnen nur leider weiß ich nicht wie ich das mit dem modulo machen soll ich hoffe mir kann einer helfen.

C++:
#include<iostream>
using namespace std;

main()
{
  int zahl, erg;
 
  cout<<"Geben sie die Zahl ein"<<endl;
  cin>> zahl;
 
  for(erg=0;zahl>0;zahl=zahl/10)
   {
      erg=erg+zahl%10;
   }
   cout<<erg<<endl;
system("pause");
}
 

cwriter

Erfahrenes Mitglied
erhalte wenn ich die Zahl 672 eingebe.
Ich soll das halt Schriftlich vorrechnen nur leider weiß ich nicht wie ich das mit dem modulo machen soll ich hoffe mir kann einer helfen.
Weisst du nicht, wie modulo funktioniert?

Loops lassen sich recht leicht durchgehen:
Sagen wir, wir haben die Zahl schon. Ich nehme mal als Beispiel die Zahl 123.
Dann gehen wir jeden Loopschritt durch.
Anfangsbedingung: erg = 0
zahl ist 123, also grösser als 0.
-> erg ist 0, zahl % 10 ist 3. Also ist das neue erg 3.
zahl = zahl / 10 -> zahl ist 12.

2. Iteration:
zahl ist 12, also grösser als 0.
-> erg ist 3, zahl % 10 ist 2. Also ist das neue erg 3+2=5.
zahl = zahl / 10 -> zahl ist 1.

3. Iteration:
zahl ist 1, also grösser als 0.
-> erg ist 5, zahl % 10 ist 1. Also ist das neue erg 6.
zahl = zahl / 10 -> zahl ist 0.

4. Iteration: zahl ist 0 -> abbruch.

Ausgabe ist erg (==6).

Es folgt: Das Programm berechnet die Quersumme der Eingabe "zahl".

Ist noch etwas unklar?

Gruss
cwriter
 

DerTrojaner

Mitglied
zahl = zahl / 10 -> zahl ist 12.

wie kommt man den auf die neue zahl ?

du hast ja 123%10 = 3 gerechnet und warum dann 12 ? ansonsten verstehe ich alles Danke dir
 

cwriter

Erfahrenes Mitglied
Aber negative zahlen kann man doch nicht einsetzen oder ? Weil die ja kleiner als +0 sind, oder täusche ich mich da ?
Nein, du täuschst dich nicht. Bei negativen Zahlen wird immer 0 ausgegeben.

zahl = zahl / 10 -> zahl ist 12.

wie kommt man den auf die neue zahl ?
Division durch 10 ist Integerdivision, der Rest wird verworfen (die letzte Stelle wird gelöscht).
du hast ja 123%10 = 3 gerechnet und warum dann 12 ?
Weil das Resultat der Modulooperation in erg gespeichert wird und zahl nicht in dieser Operation verändert wird.
Vergleiche mit
C:
int a = 1;
int b = a+1;
//a ist 1, b ist 2. Die Addition a+1 verändert a nicht.
//(wie auch, denn 1+2 ist auch eine gültige Addition und der erste Operand (1) kann nicht verändert werden)

Gruss
cwriter