Liczby losowe bez powtórzeń
Ostatnio zmodyfikowano 2015-06-30 14:19
tabupl Temat założony przez niniejszego użytkownika |
Liczby losowe bez powtórzeń » 2015-06-30 01:46:43 Zadanie polegało na stworzeniu programu, który wylosuje 5 liczb z przedziału 1 do 10 bez powtórzeń. Mój program zacina się na pętli, ponieważ po włączeniu go otwiera się pusta konsola. KIedy jednak zmienię warunek pętli tak aby funkcja check() miała zwracać wartość prawdziwą, liczby są wypisywane, jednak wszystkie są takie same, mimo srand(time(0)). Co może być nie tak? (nie wiem gdzie mógłby być błąd, dlatego wstawiam kod całego programu) #include <iostream> #include <cstdlib> #include <ctime>
bool check( int a[], int z ) { int x = 0; if( z <= 0 ) return 1; do { if( a[ z ] = a[ x ] ) return 0; x++; } while( z == x ); return 1; }
int losowe() { return(( rand() % 10 ) + 1 ); } int main() { srand( time( 0 ) ); int a[ 5 ]; int z = 0; do { do { a[ z ] = losowe(); } while( !check( a, z ) ); z++; } while( z < 5 ); z = 0; int suma = 0; do { std::cout << "Liczba " << z << " = " << a[ z ]; suma += a[ z ]; z++; } while( z < 5 ); std::cout << "Suma wynosi: " << suma; return 0; }
|
|
Lora |
» 2015-06-30 03:18:31 W funkcji check(): do { if( a[ z ] == a[ x ] ) return 0; x++; } while( x < z );
|
|
tabupl Temat założony przez niniejszego użytkownika |
» 2015-06-30 11:05:19 NIestety to nie pomogło |
|
carlosmay |
» 2015-06-30 12:53:57 Nie zwiększa się indeks. Z++ masz poza pętla w której przypisujesz Wartości losowane do tablicy. Zapis jest wciąż do jednego elementu.
|
|
carlosmay |
» 2015-06-30 14:19:26 bool check( int a[], int z ) { int x = 0; if( z <= 0 ) return true; do { if( a[ z ] == a[ x ] ) return false; else ++x; } while( z < x ); return true; }
do { a[ z ] = losowe(); if( check( a, z ) ) z++; } while( z < 5 );
std::cout << "Liczba " << z << " = " << a[ z ] << std::endl;
Pamiętaj: == - aby porównać, = - aby przypisać zamiast 0 i 1, zwracaj false i true, łatwiej ogarnąć kod. |
|
« 1 » |