Zagnieżdżone pętle - prośba o wyjaśnienie.
Ostatnio zmodyfikowano 2012-12-07 20:22
Darek254 Temat założony przez niniejszego użytkownika |
Zagnieżdżone pętle - prośba o wyjaśnienie. » 2012-12-07 14:22:02 Mam problem polegający na tym że mimo to że analizuje i patrzę w kod nie rozumiem jak on działa, nie rozumiem zagnieżdżonych pętli. Przerobiłem program z lekcji 30 tak aby pokazywał zamiast gwiazdek liczby sądziłem że pomoże mi to w zrozumieniu sposobu w jakim to działa. #include <iostream>
int main() { for( int pierwszaZmienna = 1; pierwszaZmienna <= 10; ++pierwszaZmienna ) { for( int x = 1; x <= pierwszaZmienna; ++x ) std::cout << x; std::cout << std::endl; } return 0; } I dało to taki wynik: 1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 Jeśli dodam kolejną pętle dostaje wynik taki jak wyżej z pewnymi zmianami np. w rzędzie poziomym 1 raz występuje liczba "1" 2 razy liczba "2" ... 7 razy liczba "7" itd.Chodzi mi o to że nie rozumiem sposobu działania zagnieżdżonych pętli(w jakiej kolejności wykonują się instrukcje) oraz dlaczego wystąpiło takie coś jak napisałem wcześniej. Proszę o wyjaśnienie jak działa zagnieżdżona pętla w zrozumiały jak dla osoby uczącej się sposób, najlepiej na tym lub innym przykładzie. Z góry dzięki. |
|
jsc |
» 2012-12-07 14:28:36 Jeśli dodam kolejną pętle |
A gdzie dokładnie ją dodasz? |
|
Darek254 Temat założony przez niniejszego użytkownika |
» 2012-12-07 14:38:21 #include <iostream>
int main() { for( int pierwszaZmienna = 1; pierwszaZmienna <= 10; ++pierwszaZmienna ) { for( int x = 1; x <= pierwszaZmienna; ++x ) { for( int y = 1; y <= x; ++y ) { std::cout << x; } } std::cout << std::endl; } return 0; } i dostaje taki wynik: 1 122 122333 1223334444 122333444455555 122333444455555666666 1223334444555556666667777777 122333444455555666666777777788888888 122333444455555666666777777788888888999999999 12233344445555566666677777778888888899999999910101010101010101010 A jeśli w ostatniej pętli zmienię x na y to dostane przedziwny wynik jest za długi aby go przepisać ale jeśli nie chce się komuś zmieniać tej jednej litery a chce mi pomóc to tu ma kod: #include <iostream>
int main() { for( int pierwszaZmienna = 1; pierwszaZmienna <= 10; ++pierwszaZmienna ) { for( int x = 1; x <= pierwszaZmienna; ++x ) { for( int y = 1; y <= x; ++y ) { std::cout << y; } } std::cout << std::endl; } return 0; } |
|
SeaMonster131 |
» 2012-12-07 14:47:47 Zobacz co wypisze ten program: #include <iostream> using namespace std;
int main() { for( int a = 0; a < 5; a++ ) { cout << "\nA = " << a; for( int b = 0; b < 3; b++ ) { cout << "\n B = " << b; for( int c = 0; c < 2; c++ ) { cout << "\n C = " << c; } } } return 0; }
Wynik: A = 0 B = 0 C = 0 C = 1 B = 1 C = 0 C = 1 B = 2 C = 0 C = 1 A = 1 B = 0 C = 0 C = 1 B = 1 C = 0 C = 1 B = 2 C = 0 C = 1 A = 2 B = 0 C = 0 C = 1 B = 1 C = 0 C = 1 B = 2 C = 0 C = 1 A = 3 B = 0 C = 0 C = 1 B = 1 C = 0 C = 1 B = 2 C = 0 C = 1 A = 4 B = 0 C = 0 C = 1 B = 1 C = 0 C = 1 B = 2 C = 0 C = 1
|
|
jsc |
» 2012-12-07 14:57:39 W pierwszej pętli program ma napisać liczbę x razy x, a w drugiej ma wypisywać liczby od 1 do x razy 10, czyli wyjdzie ci: 1 112 112123 1121231234 112123123412345 112123123412345123456 1121231234123451234561234567 112123123412345123456123456712345678 112123123412345123456123456712345678123456789 11212312341234512345612345671234567812345678912345678910 |
|
CodeMeister |
» 2012-12-07 18:53:12 Pętla wewnętrzna sama wykona się 10 razy for( int x = 1; x <= pierwszaZmienna; ++x ) std::cout << x;
Jeśli umieścimy ją w kolejnej pętli (zewnętrznej): for( int pierwszaZmienna = 1; pierwszaZmienna <= 10; ++pierwszaZmienna ) { for( int x = 1; x <= pierwszaZmienna; ++x ) std::cout << x; std::cout << std::endl; }
Będzie wykonywała się 10 razy (tyle razy ile pętla zewnętrzna) i sama będzie tyle razy wyświetlała liczbę ile będzie wynosiła wartość zmiennej 'pierwszaZmienna'. czyli dla 'pierwszaZmienna' o wartości 3: -pętla wewnętrzna w pierwszym "obiegu" wypisze 1, w drugim 12 a w trzecim 123 ponieważ for( int x = 1; x <= pierwszaZmienna; ++x ) póki 'x' (1) jest mniejsze od 'pierwszaZmienna'(3) będzie wyświetlana wartośc x -następuje powrót do pętli zewnętrznej -inkrementacja (dodanie 1 do) 'PierwszaZmienna' i znowu pętla wewnętrzna wykona się 4 razy, powrót, inkrementacja, itd. dopóki 'pierwszaZmienna' nie osiągnie wartości 10 |
|
Mrovqa |
» 2012-12-07 18:54:21 @Darek254 jako podpowiedź wiedz, iż nie trzeba do tego aż trzech pętli zagnieżdżonych w sobie. Wystarczą dwie. |
|
Darek254 Temat założony przez niniejszego użytkownika |
» 2012-12-07 20:22:35 Dzięki wielkie za pomoc wszystkim ale najlepiej doszło do mnie tłumaczenie CodeMeister'a. Mam nadzieje że ten problem poruszony przeze mnie pomoże innym którzy uczą się programować a właśnie na zagnieżdżonych pętlach napotkali "barierę".
Temat do zamknięcia :P |
|
« 1 » |