Losowanie bez powtórzeń
Ostatnio zmodyfikowano 2015-12-01 11:20
omagic Temat założony przez niniejszego użytkownika |
Losowanie bez powtórzeń » 2015-12-01 09:30:20 Witam wszystkich! Rozpocząłem kurs C++ i szło całkiem sprawnie aż do pracy domowej związanej z losowaniem bez powtórzeń. Próbowałem kilka razy pisać kod i dotarłem do momentu w którym program działa poprawnie bardzo rzadko, najczęściej się "zwiesza" gdy ma sprawdzać czy liczby się powtarzają.(kilka razy program przeszedł prawidłowo) Ktoś może podpowiedzieć dlaczego tak się dzieje? #include <iostream> #include <cstdlib> #include <ctime>
bool unikat( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < ile ); return false; }
int losowanie() { return(( rand() % 10 ) + 0 ); }
int wpisz() { int liczba = 0; std::cin >> liczba; return liczba; }
int main() { srand( time( 0 ) ); int tablica[ 10 ]; int a, b; a = 0; b = 0; do { std::cout << "podaj liczbe nr : " << a + 1 << std::endl; tablica[ a ] = wpisz(); a++; } while( a < 10 ); std::cout << "test losowania : " << losowanie() << std::endl; do { int c = tablica[ losowanie() ]; if( unikat( c, tablica, b ) == false ) { tablica[ b ] = c; b++; } } while( b < 8 ); b = 0; do { std::cout << "wylosowano : " << tablica[ b ] << std::endl; b++; } while( b < 8 ); return 0; } |
|
carlosmay |
» 2015-12-01 10:50:20 Do przechowywania liczb wylosowanych utwórz drugą tablicę, bo teraz nadpisujesz tą, z której losujesz. Program działa niewłaściwe. |
|
omagic Temat założony przez niniejszego użytkownika |
» 2015-12-01 11:20:09 Działa jak należy :D Dziękuję bardzo za pomoc. Zamykamy :) |
|
« 1 » |