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

Zagnieżdżona pętla.

Ostatnio zmodyfikowano 2013-11-10 21:31
Autor Wiadomość
Soon
Temat założony przez niniejszego użytkownika
Zagnieżdżona pętla.
» 2013-11-10 20:34:55
Witam! Napotkałem na swojej drodze nauki C++ kolejny płot do przeskoczenia - zagnieżdżone pętle. Nie wiem jak one działają, nie wiem w jakiej kolejności są wykonywane. Nie mogę zrozumieć nawet prostych przykładów takich jak ten:

C/C++
#include <iostream>
using namespace std;

int main()
{
    for( int j = 0; j < 20; ++j )
    {
        for( int i = 0; i <= j; ++i )
             cout << "X";
       
        cout << endl;
       
    }
   
}

W każdej kolejnej linii jest dodawany 1 X. Dlaczego? Od czego to zależy? Czy odpowiada za to iteracja ++i? Z góry dziękuję
P-95959
pekfos
» 2013-11-10 20:47:01
A jakby to zapisać tak?
C/C++
#include <iostream>
using namespace std;

void wypisz_n_plus_jeden_iksow( int n )
{
    for( int i = 0; i <= n; ++i )
         cout << "X";
   
}

int main()
{
    for( int j = 0; j < 20; ++j )
    {
        wypisz_n_plus_jeden_iksow( j );
        cout << endl;
    }
}
P-95961
Soon
Temat założony przez niniejszego użytkownika
» 2013-11-10 20:59:52
Hmm... Ok, ale chciałbym się dowiedzieć, jak to działa dokładnie w zagnieżdżonych pętlach. Czy to jest dobra kolejność?
1. Przypisanie zmiennej j wartości 0;
2. Sprawdzany warunek j < 20;
3. Przypisanie i wartości 0;
4. Sprawdzany warunek i <= j (i = 0 oraz j = 0, więc warunek jest prawdziwy);
5. Wypisanie jednego X-a;
6. ++i;
7. ++j;
8. Teraz wartość obu zmiennych jest równa 1;
9. Wypisanie dwóch X-ów (i właśnie nie wiem dlaczego dwóch, później trzech... itd.);
P-95964
pekfos
» 2013-11-10 21:09:52
To tak nie działa. Popatrz na kod, który podałem. Pętla w main() 20 razy wywołuje funkcję, podając coraz większe j. Funkcja wypisuje j+1 iksów.
Jeszcze prostszy przykład:
C/C++
for( int a = 0; a < 10; ++a )
{ //Kod w tym bloku wykona się 10 razy
    for( int b = 0; b < 10; ++b )
    { // Kod w tym bloku wykona się 10 razy w ciągu jednego obiegu zewnętrznej pętli. Łącznie 100 razy
        std::cout << a << " " << b << std::endl;
    }
}
Uruchom ten program i przeanalizuj wypisywane wartości.
P-95967
Soon
Temat założony przez niniejszego użytkownika
» 2013-11-10 21:31:49
Ahaaa... WIELKIE dzięki za pomoc. Wszystko jest tak proste, a człowiek sam nie może dojść. Naprawdę dziękuję. :)
P-95968
« 1 »
  Strona 1 z 1