Zahlen erstellen lassen?



  • Hm, da hab ich wohl wirklich dumme Sachen geschrieben mit,

    1*100+1*10+1*1=1 gleich 1*1*1+1*1*1+1*1*1=1

    Aber warum lässt dann die Schleife wirklich 1 zu?



  • 0*100 + 0*10 + 1*1
    

    rechne es aber lieber nochmal nach 😃



  • Wenn ich mir nun nochmal die Schleife ansehe, dann läuft doch folgendes ab. Im ersten Moment ist i=j=k=0. Das heißt alle Schleifen werden übersprungen bis man in der innersten ist. Dort wir dann a = 0*100 + 0*10 + 0*1 gerechnet. Jetzt wird k = k + 1, j = j + 1 und i = i + 1 gerechnet. Und dann hab ich ja gleich als nächste Rechnung für a das stehen: a = 1*100 + 1*10 + 1*1, oder?

    Oder ist es so, dass wenn die if-Schleife nach dem ersten Durchgang erfüllt war als letzter Teil des ersten Durchgangs k = k + 1 gerechnet und dann wieder ganz nach vorne zum ersten while gesprungen wird? Ich denke so ist's, stimmts?



  • Nach deinem Muster würde aber

    000
    111
    222
    333
    444
    555
    666
    777
    888
    999
    

    Wie erklärst du dir dann also die 153 🙄

    Deine innerste Schleife hat die Bedingung k<10.
    Somit kommt nach 000 erstmal 001

    Mach nen Schreibtischtest 😉



  • Was ist ein Schreibtischtest?



  • bandchef schrieb:

    Was ist ein Schreibtischtest?

    Auf Papier die Variablen aufschreiben und das Programm Befehl für Befehl im Kopf durcgehen und die Variablen immer aktualisieren.



  • Wenn ich jetzt die Schreibtischtest mache, komm ich in der Tat auf

    000
    111
    222
    333
    444
    555
    666
    777
    888
    999
    

    Ich weiß aber nicht wie meine "Denke" falsch ist...



  • Auf die Ergebnisse komme ich aber, wenn ich jedesmal nach dem i=0 und j=0 waren und k<10 j = j + 1 und i = i + 1 überspringe, und nur j = j + 1 rechne, wenn k<10 nicht mehr erfüllt ist. So stimmts doch jetzt...



  • Entschuldige bitte 🤡 ... mein Fehler.
    Ein PAP oder Structogramm könnte dir weiterhelfen, aber dazu bietet die Eingabenmaske hier keine Buttons. Ich versuch es mal bildhaft zu argumentieren:

    int i=0;
    
    // fuehre die Schleife solange aus, wie i kleiner 10
    while(i < 10)
    {
        int j=0;
    
        // fuehre die Schleife solange aus, wie j kleiner 10 
      -> while(j < 10)
     |  {
     |      // j um 1 erhoehen
     |      cout << i << "-" << j << endl;
     |      j++;
      --}
        // i um 1 erhoehen, wenn Schleife davor j >= 10 erreicht hat
        i++;
    }
    

    Ausgabe:

    i  j
    ----
    0  0
    0  1
    0  2
    usw
    1  0
    1  1
    1  2
    usw
    9  0
    9  1
    


  • Danke für deine ausführliche Erklärung. Ich hab's mir jetzt zusätzlich in Visual Studio 2010 mit dem Debugger angesehen. Da sieht man es sehr schön, dass die innerste while-Schleife so lange ausgeführt ist, bis k=10 ist und erst dann zum ersten mal die zweite while-Schleife (von "außen" gesehen; du weißt schon was ich meine... :-)) ausgeführt wird und j = j + 1 gerechnet wird...


Anmelden zum Antworten