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

Lekcja 30 zagnieżdżanie pętli

Ostatnio zmodyfikowano 2014-11-15 20:31
Autor Wiadomość
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:
C/C++
#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.
P-120313
Rashmistrz
» 2014-11-12 20:45:07
W drugim obiegu pierwszej pętli ustawi się flaga:
C/C++
if( b <= a )
{
    flaga = 1;
}


A potem nie wykona się to:
C/C++
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:
» Kurs C++ » Poziom 1Pojęcie zmiennej i podstawowe typy danych lekcja
P-120469
Piastlis
» 2014-11-12 22:42:07
Moim zdaniem troszeczkę komplikujesz sprawy proste:
C/C++
#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;
}
P-120493
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. ;_;
P-120496
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.
P-120501
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...
P-120502
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ł.
P-120503
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
P-120534
« 1 » 2
  Strona 1 z 2 Następna strona