Lekcja 30 zagnieżdżanie pętli
Ostatnio zmodyfikowano 2014-11-15 20:31
gero1913 Temat założony przez niniejszego użytkownika |
Lekcja 30 zagnieżdżanie pętli » 2014-11-10 17:53:40 Cześć. Mam problem z zadaniem nr 2 z lekcji 30. Polecenie : Wyobraź sobie, że masz pięć piłek i chcesz wylosować trzy z nich. Napisz program, który wypisze na ekranie wszystkie możliwe kombinacje piłek jakie można wylosować. Dane jakie powinny zostać wypisywane na ekranie: Program powinien wypisać : 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 Co wypisuje mój program : 1 2 3 1 2 4 1 2 5 Mój kod: #include <iostream>
using namespace std;
int main() { int flaga = 0; for( int a = 1; a <= 3; a++ ) { flaga = 0; for( int b = 2; b <= 4; b++ ) { if( b <= a ) { flaga = 1; } if( flaga == 0 ) { for( int c = 3; c <= 5; c++ ) { if( c <= b ) { flaga = 1; } if( flaga == 0 ) { cout << a << " " << b << " " << c << endl; } } } } } return 0; }
Problem jest taki że nie mam pojęcia dlaczego po tym jak wartość c osiągnie 5 program nie wyskakuje z najbardziej wewnętrznej pętli i nie inkrementuje b żeby już po zwiększeniu zmiennej b znowu wskoczyć do najbardziej wewnętrznej pętli. Zmiennej flaga użyłem bo nie chce używać breaków, ale to nie ona (chyba) powoduje blad bo ja wypisalem i ma wartosc 0 na koncu programu. Proszę o wskazówki. |
|
Rashmistrz |
» 2014-11-12 20:45:07 W drugim obiegu pierwszej pętli ustawi się flaga: if( b <= a ) { flaga = 1; } A potem nie wykona się to: if( flaga == 0 ) { for( int c = 3; c <= 5; c++ ) if( c <= b ) flaga = 1; if( flaga == 0 ) cout << a << " " << b << " " << c << endl; } Przyczepię się do jeszcze paru rzeczy: 1.Jak masz jedną instrukcję w if to nie musisz używać klamer. 2.Używasz typu całkowitego zamiast logicznego. Zerknij na tabelkę w tym rozdziale: Pojęcie zmiennej i podstawowe typy danych |
|
Piastlis |
» 2014-11-12 22:42:07 Moim zdaniem troszeczkę komplikujesz sprawy proste: #include <iostream>
using namespace std;
int main() { for( int a = 1; a <= 3; a++ ) for( int b = a + 1; b <= 4; b++ ) for( int c = b + 1; c <= 5; c++ ) cout << a << " " << b << " " << c << endl; return 0; } |
|
Rashmistrz |
» 2014-11-12 23:17:47 Moim zdaniem troszeczkę komplikujesz sprawy proste |
Ja chcę żeby było dobrze... Chcę żeby on się nauczył i zrozumiał. [...] Naszemu forum przyświeca idea nauczania [...] |
A ty podrzucasz gotowy kod... Więc ile w tym zrozumienia? Nie pozwalasz mu w ten sposób na samodzielne myślenie. ;_; |
|
Piastlis |
» 2014-11-13 00:05:59 Wykorzystanie 3 pętli to elementarz.To jak wymyślanie literek.Dobre nawyki powinno się nabywać od początku nauki.Program powinien być elegancki. |
|
Rashmistrz |
» 2014-11-13 00:36:00 Gdyby ten kod miał do niego trafić, z pewnością byłby zawarty w kursie jako pomoc naukowa. :/ Wykorzystanie 3 pętli to elementarz. |
Ta lekcja ma uczyć zagnieżdża pętli, a nie tylko używania 3 pętli. To tak jak chciałbyś tworzyć trójargumentowe funktory zdaniotwórcze. To jak wymyślanie literek. |
Prędzej sylab. Dobre nawyki powinno się nabywać od początku nauki. |
Zgadzam się, chociaż nie wiem czy rozumiem przez "dobre nawyki" to samo co ty. Program powinien być elegancki. |
To prawda. Kod programu powinien mieć konkretną stylistykę kodu, taką aby zachował czytelność i jasność działania, a nie jakieś spaghetti_________________________________________ To jest dość "życiowa" lekcja, bo uczy dużo więcej niż tylko zagnieżdżania... |
|
Piastlis |
» 2014-11-13 00:54:12 Czasami programista i każdy inny człowiek potrafi "zakałapućkać" się w swoim pomyśle.I wtedy nie zauważa się rzeczy oczywistych.Osoba która pomoże ci w takiej sytuacji to nauczyciel albo przyjaciel.A elegancja to nie edycja.Elegancja w programowaniu to dobry pomysł.
|
|
Memento96 |
» 2014-11-13 19:11:12 Ta lekcja ma uczyć zagnieżdża pętli, a nie tylko używania 3 pętli. To tak jak chciałbyś tworzyć trójargumentowe funktory zdaniotwórcze. |
Przecież masz pętle w pętli... Rozwiązanie jest jak najbardziej poprawne i myślę, że autor kursu właśnie takiego kodu by oczekiwał ;P |
|
« 1 » 2 |