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

[Lekcja 21] 8 Liczb z 10

Ostatnio zmodyfikowano 2013-07-31 23:34
Autor Wiadomość
ciekawski
Temat założony przez niniejszego użytkownika
[Lekcja 21] 8 Liczb z 10
» 2013-07-31 17:25:46
Witam,
zmagam się z pracą domową z lekcji 21. Napisałem kod przerabiając program "lotto" i z początku myślałem, że wszystko jest ok. Po wstawieniu pętli w celu porównania większej liczby wyników okazało się jednak, że co jakiś czas zdarza się wylosowanie 2 takich samych liczb.

Lotto działało bez zastrzeżeń i dziwi mnie fakt powtórek po przerobieniu.

Analizowałem kod kilka razy jednak nie potrafię wyłapać błędu.

Dlatego prosiłbym o zerknięcie w moje wypociny i ewentualne wskazanie błędu.

C/C++
#include <ctime>
#include <conio.h>
#include <iostream>

using namespace std;

int main()
{
    int a, b, c, d, e, f, g, h, i, j;
    cin >> a >> b >> c >> d >> e >> f >> g >> h >> i >> j;
    int q = 1;
   
    srand( static_cast < int >( time( NULL ) ) );
    do
    {
        int Liczby[ 8 ];
        for( int i = 0; i < 8; )
        {
            Liczby[ i ] =( rand() % 10 + 1 );
           
            bool PowtarzaSie = false;
           
            for( int j = 0; j < i; j++ )
            {
                if( Liczby[ j ] == Liczby[ i ] )
                {
                    PowtarzaSie = true;
                    break;
                }
            }
            if( !PowtarzaSie )
                 i++;
           
        }
        for( int i = 0; i < 8; i++ )
        {
            switch( Liczby[ i ] )
            {
            case 1:
                cout << a << " "; break;
            case 2:
                cout << b << " "; break;
            case 3:
                cout << c << " "; break;
            case 4:
                cout << d << " "; break;
            case 5:
                cout << e << " "; break;
            case 6:
                cout << f << " "; break;
            case 7:
                cout << g << " "; break;
            case 8:
                cout << h << " "; break;
            case 9:
                cout << i << " "; break;
            case 10:
                cout << j << " "; break;
            }
        }
        cout << endl;
    } while( q == 1 );
   
    getch();
    return 0;
}

Z góry dzięki

Pozdro
P-89116
jsc
» 2013-07-31 17:32:49
Zastanów się nad sposobem działania pętli for.
P-89117
ciekawski
Temat założony przez niniejszego użytkownika
» 2013-07-31 18:49:23
Wydaje mi się, że wiem w jaki sposób ona działa.

Analizuje wciąż ów kod i dalej nie wiem co jest nie tak.


Wykonałem pewne doświadczenie:
Porównując ze sobą kolejne wyniki możemy zauważyć, że powtórki są bardzo częste.

Zmieniłem zakres losowanych liczb z 1-10  na 1-8. Powinno to zwiększyć prawdopodobieństwo powtórzenia się liczb a co dziwne nie zauważyłem ani jednej powtórki.

Ale wiadomo że oko nie wszystko potrafi zobaczyć. Tak więc zmieniłem znowu zakres do 1-7. W tym przypadku program powinien wyświetlać wynik zawszę z co najmniej 2 powtarzającymi się liczbami, jednak po uruchomieniu nie wyświetla nic co oznacza, że wciąż stara się spełnić warunek aby liczby się nie powtarzały.


Podsumowując:
zgłupiałem
P-89128
docentpp
» 2013-07-31 22:21:16
Czy pierwsza pętla for jest dobrze skonstruowana ?  :-)
P-89151
Monika90
» 2013-07-31 22:33:38
Czy pierwsza pętla for jest dobrze skonstruowana
Oczywiście, że jest. Z tym że do takich celów lepiej używać pętli
while
.

EDIT:
Błąd jest w pętli drukujacej wynik. Zmienna i jest użyta do dwóch różnych celów.
P-89154
ciekawski
Temat założony przez niniejszego użytkownika
» 2013-07-31 23:34:17
o kurde, rzeczywiście nabroiłem z tymi zmiennymi.

Tak czy siak dzięki za pomoc.


Pozdrawiam
P-89155
« 1 »
  Strona 1 z 1