Zagnieżdżanie pętli for - problem
Ostatnio zmodyfikowano 2014-08-13 01:37
Daedra Temat założony przez niniejszego użytkownika |
Zagnieżdżanie pętli for - problem » 2014-08-11 15:26:59 Czy ktoś jest w stanie wytłumaczyć mi ładnie jak przebiega(jak właściwie komputer myśli) przy wykonywaniu takiego kodu: #include <iostream> using namespace std; int main() { for( int a = 1; a <= 3; a++ ) { for( int b = 1; b <= 3; b++ ) { cout << a; cout << b; cout << endl; } } }
Kod wyjściowy: 11 12 13 21 22 23 31 32 33
Process returned 0 (0x0) execution time : 0.036 s Press any key to continue.
Sam przebieg pętli for rozumiem, ale zagnieżdżenia sprawiają mi trochę większy problem. Nie rozumiem czemu po '13', gdy pojawia się '21' jest właśnie to 1. Czemu i jak pętla sprawia że z '3' w '13'(zmienna b=3) robi się 1(zmienna b=1(?)), to samo dzieje się po '23' i prawdopodobnie gdybym zwiększył zakres stałoby się to po '33'. Mam nadzieję że dobrze zobrazowałem swój problem. |
|
Glazus |
» 2014-08-11 15:51:31 Z każdym kolejnym obiegiem pętli zawarte w niej instrukcje są wykonywane od nowa. #include <iostream> using namespace std; int main() { for( int a = 1; a <= 3; a++ ) { for( int b = 1; b <= 3; b++ ) { cout << a; cout << b; cout << endl; } } } |
|
Mizzrym |
» 2014-08-11 15:52:28 Nie wiem czy potrafię to logicznie wytłumaczyć ale działa to tak że: Wchodzisz do pętli a, Pętla a wchodzi do pętli b która wykonuje się 3 razy wypisując na ekranie liczby i się kończy więc wracamy do pętli a, Ponieważ pętla a wykonała się dopiero raz to ponownie uruchamia Ona pętle b która znów wykonuje się 3 razy wypisując tekst i kończąc się program wraca do pętli a i tak w kółko aż pętla a wykona się 3 razy 3 razy od uruchamiając od pętlę b. |
|
xDELCO |
Odpowiedź » 2014-08-11 16:16:36 Nazywam: Pętlę zewnętrzną "for( int a = 1; a <= 3; a++ )" nazwę pętlą A, a pętlę wewnętrzną "for( int b = 1; b <= 3; b++ )" nazywam pętlą B. Pętla B, jest instrukcją pętli A. Instrukcjami pętli B, są "cout << a; cout << b; cout << endl;".
Krok pierwszy. Start: wchodzimy do pętli A. Deklarujemy zmienną a = 1. Sprawdzamy warunek pętli A. a=1 jest <= od 3. - PRAWDA.
Wykonujemy instrukcje pętli A, którymi jest Pętla B.
wchodzimy do pętli B. Deklarujemy zmienną b=1. Sprawdzamy warunek pętli B. b=1 jest <= od 3. - PRAWDA. Zatem Wykonujemy instrukcje pętli B, którymi są:"cout << a; cout << b; cout << endl;"; wypisujemy a=1 i b=1 po czym dajemy "enter". Wykonujemy warunek wyjścia - b = b+1. Mamy: a=1, b=2.
Jesteśmy wciąż na pierwszym "obrocie" pętli a=1, wykonujemy: Sprawdzamy warunek pętli B. b=2 jest <= od 3. - PRAWDA. Zatem Wykonujemy instrukcje pętli B, którymi są:"cout << a; cout << b; cout << endl;"; wypisujemy a=1 i b=2 po czym dajemy "enter". Wykonujemy warunek wyjścia - b++. Mamy: a=1, b=3.
Jesteśmy wciąż na pierwszym "obrocie" pętli a=1, wykonujemy: Sprawdzamy warunek pętli B. b=3 jest <= od 3. - PRAWDA. Zatem Wykonujemy instrukcje pętli B, którymi są:"cout << a; cout << b; cout << endl;"; wypisujemy a=1 i b=3 po czym dajemy "enter". Wykonujemy warunek wyjścia - b++. Mamy: a=1, b=4.
Jesteśmy wciąż na pierwszym "obrocie" pętli a=1, wykonujemy: Sprawdzamy warunek pętli B. b=4 jest <= od 3. - FAŁSZ.
W tym momencie zostały spełnione wszystkie instrukcje pętli A, dla a=1. Wykonujemy warunek wyjścia pętli A, a = a+1 Mamy: a=2 (teraz znów wykonujemy pętlę B, dla a=2, i zmiennego b, które będzie przyjmowało wartości od b=1 do b=3, dla b=4 pętla się kończy, wykonujemy a++, mamy a=3 i znów pętla B wykonuje się 3 razy wypisując a=3, i zmienne b, które będzie przyjmowało wartości od b=1 do b=3, dla b=4 pętla się kończy, Wykonujemy warunek wyjścia pętli A, a++, Mamy: a=4. Pętla A nie wykona się czwarty raz, bo a=4 nie jest <=3. PAUZA.
|
|
Daedra Temat założony przez niniejszego użytkownika |
» 2014-08-13 01:37:55 Dziękuję wszystkim za wyczerpujące odpowiedzi. Problem został wyjaśniony. Dzięki jeszcze raz, temat zamykam ;) |
|
« 1 » |