Bildschirmausgabe eines Programmes



  • Hi zusammen,

    ich mache momentan ein paar Altklausuren durch und nun bin ich auf einen C-Code gestoßen, von welchem ich die Bildschrimausgabe angeben soll.
    Eigentlich nicht wirklich schwer nur machen mir die Schleifen in diesem Programm momentan gewaltig Probleme 😞

    Hier das Programm:

    #include <stdio.h>
    
    int main (){
        int i,j;
           for (i=1;i<=6; i++) {
              j=i;
              do {
                 j--;
                 printf("%d %d/n", i,j);
              } while (j != i&& j);
           }
           return 0;
    }
    

    Die Bildschirmausgabe sieht folgendermaßen aus:
    1 0
    2 1
    2 0
    3 2
    3 1
    3 0
    4 3
    4 2
    4 1
    4 0
    5 4
    5 3
    5 2
    5 1
    5 0
    6 5
    6 4
    6 3
    6 2
    6 1
    6 0

    Nun meine Frage, wie ergibt sich diese Bildschrimausgabe? Ich komme irgendwie absolut nicht drauf -.- Und was passiert hier "while (j != i&& j);" genau?

    Danke schon einmal...

    MfG
    Kaula



  • do {
      j--;
      printf("%d %d/n", i,j);
    } while (j != i&& j);
    

    ist einfach komplizierter geschrieben als unbedingt notwendig: der Teil "j!=i" ist in dieser Konstellation immer wahr, der Teil "j" ist äquivalent zu "j!=0" - und das bleibt nach der Kombination der Bedingungen per && (und) als Endbedingung der Schleife übrig.



  • Danke dir für die schnelle Antwort! Habe es allerdings immernoch nicht ganz verstanden 🙄

    Könntest du das vllt mal kurz für die ersten 2 Ausgaben am Code zeigen? Also was genau passiert?

    Wäre klasse 👍



  • Ich werd's versuchen:
    Im ersten Schleifendurchlauf der for()-Schleife ist i==1 und j wird auf 1 gesetzt. Dann kommt die do-while()-Schleife, j wird dekrementiert (-> j==0) und beides ausgegeben, anschließend wird die Schleife beendet, weil die Bedingung nicht mehr erfüllt ist*.
    Im zweiten Durchlauf der for()-Schleife ist i==2 und j wird auf 2 gesetzt. Am Anfang der do-while()-Schleife wird j wieder dekrementiert (-> j==1) und beide Werte ausgegeben. Jetzt ist die Schleifenbedingung aber noch erfüllt und die innere Schleife geht in eine weitere Runde: j dekrementieren auf 0, Werte ausgeben, Schleifenende (wie oben).

    *genau genommen müsstest du beide Teilbedingungen prüfen und per UND miteinander verknüpfen - j!=i ist durch durch den Programmablauf immer erfüllt, j wird implzit als Wahrheitswert (0=false, alles andere=true) interpretiert, ist also dann erfüllt, wenn j nicht 0 ist. Die Schleife wird fortgesetzt, solange beide Teile der Bedingung erfüllt sind.



  • Ahhhhhhh jetzt *Lampe über m Kopf geht auf* 😃 😃

    Danke dir vielmals, für die ausführliche Erklärung. Jetzt ist mir das klar geworden...Mein Problem lag daran, dass ich die Bedingung(en) falsch bzw. gar nicht verstanden habe 🙄

    Merci! 👍


Anmelden zum Antworten