Błąd w losowaniu liczb.
Ostatnio zmodyfikowano 2013-12-23 16:43
Malakian Temat założony przez niniejszego użytkownika |
Błąd w losowaniu liczb. » 2013-12-23 16:01:05 Witam. Kod kompiluje sie prawidłowo jednak po wykonaniu programowi zdarza się wylosować liczbę nie z przedziału. Przykładowe wyjście: 5, 8, 0, 2686916, 4, Kod programu: #include <iostream> #include <cstdlib> #include <ctime>
int wylosuj( int poczatek, int koniec ) { return(( rand() %( koniec - poczatek ) ) + poczatek ); }
bool randomCheck( int liczba, int t_name[], int t_lenght ) { if( t_lenght <= 0 ) return true; for( int i = 0; i < t_lenght; i++ ) { if( t_name[ i ] == liczba ) return false; } return true; }
int main() { srand( time( 0 ) ); int tablicaLiczb[ 5 ]; int liczba = 0; for( int i = 0; i < 5; i++ ) { liczba = wylosuj( 0, 10 ); if( randomCheck( liczba, tablicaLiczb, i ) ) tablicaLiczb[ i ] = liczba; }; for( int i = 0; i < 5; i++ ) { std::cout << tablicaLiczb[ i ] << ", " << std::endl; } return 0; } ###### ROZWIĄZANIE ###### By naprawić błąd musiałem poprawić główną pętlę oraz nieznacznie zmodyfikować funkcję randomCheck() bool randomCheck( int liczba, int t_name[], int t_lenght ) { if( t_lenght <= 0 ) return false; for( int i = 0; i < t_lenght; i++ ) { if( t_name[ i ] == liczba ) return true; } return false; }
for( int i = 0; i < 5; i++ ) { do { liczba = wylosuj( 0, 10 ); } while( randomCheck( liczba, tablicaLiczb, i ) ); tablicaLiczb[ i ] = liczba; };
|
|
pekfos |
» 2013-12-23 16:09:42 Jeśli wylosowana liczba się powtarza, idziesz dalej i zostawiasz niezdefiniowaną wartość w tablicy. |
|
Malakian Temat założony przez niniejszego użytkownika |
» 2013-12-23 16:17:25 Dzięki mistrzu, już poprawiam. |
|
pekfos |
» 2013-12-23 16:43:18 W zasadzie wystarczyło dopisać else --i; za warunkiem sprawdzającym. Najprostsze rozwiązania zwykle są najlepsze ;) W Twoim rozwiązaniu przerabianie randomCheck() nie jest potrzebne. Wystarczy zanegować wartość otrzymaną z funkcji, albo porównać ją z false. |
|
« 1 » |