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 ProblemeHier 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 0Nun 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!