Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zagnieżdżanie pętli for - problem

Ostatnio zmodyfikowano 2014-08-13 01:37
Autor Wiadomość
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:
C/C++
#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.
P-115307
Glazus
» 2014-08-11 15:51:31
Z każdym kolejnym obiegiem pętli zawarte w niej instrukcje są wykonywane od nowa.
C/C++
#include <iostream>
using namespace std;
int main()
{
    for( int a = 1; a <= 3; a++ )
    { // <--- początek przebiegu pierwszej pętli
        for( int b = 1; b <= 3; b++ ) // ta linijka jest wykonywana za każdym
        { //                              obiegiem wcześniejszej pętli od nowa
            cout << a;
            cout << b;
            cout << endl;
        } // <--- koniec przebiegu drugiej pętli, po tej klamrze program nie zna
        //       już takiej zmiennej jak 'b'
    } // <--- koniec przebiegu pierwszej pętli
}
P-115309
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.
P-115310
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.
P-115315
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 ;)
P-115401
« 1 »
  Strona 1 z 1