Rozdział 21 Zadanie domowe - losowanie bez powtórzeń
Ostatnio zmodyfikowano 2017-06-08 19:21
deni Temat założony przez niniejszego użytkownika |
Rozdział 21 Zadanie domowe - losowanie bez powtórzeń » 2017-06-08 13:43:35 Witam. Mam problem z uzyskaniem dwóch różnych liczb podczas losowania. Zawsze wypisywane są dwie takie same liczby i niestety nie jestem w stanie znaleźć błędu :( #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void wpisywanie( int wpisane[] ) { int i = 0; do { cout << "Podaj liczbe" << endl; cin >> wpisane[ i ]; if( cin.fail() ) do { cout << "Sprobuj ponownie" << endl; cin.clear(); cin.sync(); } while( !( cin >> wpisane[ i ] ) ); i++; } while( i < 3 ); } bool powtorzenie( int wylosowane[], int a ) { int i = 0; if( a > 0 ) do { wylosowane[ a ] = wylosowane[ i ]; if( wylosowane[ a ] = wylosowane[ i ] ) return true; else i++; } while( i < a ); else return false; } void losowanie( int wpisane[] ) { int i = 0; int wylosowane[ 2 ]; int a = 0; do { wylosowane[ a ] =( rand() % 3 ); if( powtorzenie( wylosowane, a ) == true ) do { wylosowane[ a ] =( rand() % 3 ); } while( powtorzenie( wylosowane, a ) == false ); cout << "WYLOSOWANO " << wpisane[ wylosowane[ a ] ] << endl; a++; } while( a < 2 ); }
int main() { srand( time( NULL ) ); int wpisane[ 3 ]; wpisywanie( wpisane ); losowanie( wpisane ); return 0; }
/edit @DieG poprawiłem jednak nic to nie zmieniło |
|
DieG |
» 2017-06-08 14:44:43 Z tego co widzę, to tablica wylosowane zawiera tylko jedną zmienną, a w kodzie odwołujesz się do dwóch: 0 i 1 (to tylko uwaga po pierwszym wglądzie). |
|
Kinexity |
» 2017-06-08 15:41:43 Teraz będzie działać: #include <iostream> #include <stdlib.h> #include <time.h> using namespace std;
void wpisywanie( int wpisane[] ) { int i = 0; do { cout << "Podaj liczbe: "; cin >> wpisane[ i ]; if( cin.fail() ) { do { cout << "Sprobuj ponownie!" << endl; cin.clear(); cin.sync(); } while( !( cin >> wpisane[ i ] ) ); } i++; } while( i < 3 ); }
void losowanie( int wpisane[] ) { int wylosowane[ 2 ]; wylosowane[ 0 ] = rand() % 3; do { wylosowane[ 1 ] = rand() % 3; } while( wylosowane[ 0 ] == wylosowane[ 1 ] ); cout << "Wylosowano " << wpisane[ wylosowane[ 0 ] ] << " oraz " << wpisane[ wylosowane[ 1 ] ] << endl; }
int main() { srand( time( NULL ) ); int wpisane[ 3 ]; wpisywanie( wpisane ); losowanie( wpisane ); return 0; }
|
|
deni Temat założony przez niniejszego użytkownika |
» 2017-06-08 19:07:43 Działa, a co jeżeli mam więcej liczb? W 2 zadaniu "Zmodyfikuj program z pierwszego zadania tak, aby użytkownik musiał podać 10 liczb, a 8 z nich będzie losowanych bez powtórzeń. Sprawdź czy wyniki są poprawne.". #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
void wpisywanie( int wpisane[] ) { int i = 0; do { cout << "Podaj liczbe" << endl; cin >> wpisane[ i ]; if( cin.fail() ) do { cout << "Sprobuj ponownie" << endl; cin.clear(); cin.sync(); } while( !( cin >> wpisane[ i ] ) ); i++; } while( i < 10 ); }
bool sprawdzenie( int wylosowane[], int a ) { int i = 0; if( a = 0 ) return false; if( a > 0 ) do { if( wylosowane[ a ] == wylosowane[ i ] ) return true; if( a > i ) i++; } while( a > i ); return false; }
void losowanie( int wpisane[] ) { int wylosowane[ 8 ]; int i = 0; int a = 0; do { wylosowane[ a ] =( rand() % 10 ); do { if( sprawdzenie( wylosowane, a ) == true ) wylosowane[ a ] =( rand() % 10 ); } while(( sprawdzenie( wylosowane, a ) == true ) ); cout << "WYLOSOWANO " << wpisane[ wylosowane[ a ] ] << endl; a++; } while( a < 8 ); }
int main() { srand( time( NULL ) ); int wpisane[ 10 ]; wpisywanie( wpisane ); losowanie( wpisane ); return 0; }
Nie jestem w stanie doprowadzić tego do działania :/ Zdarzają się powtórzenia. |
|
Kinexity |
» 2017-06-08 19:21:59 Musiałem wziąć pętlę for z kolejnego rozdziału, ponieważ inaczej to by trudniej było. Powinno działać. #include <iostream> #include <stdlib.h> #include <time.h> using namespace std;
void wpisywanie( int wpisane[] ) { int i = 0; do { cout << "Podaj liczbe: "; cin >> wpisane[ i ]; if( cin.fail() ) { do { cout << "Sprobuj ponownie!" << endl; cin.clear(); cin.sync(); } while( !( cin >> wpisane[ i ] ) ); } i++; } while( i < 10 ); }
void losowanie( int wpisane[] ) { int wylosowane[ 8 ]; bool powtarza; for( int i = 0; i < 8; ) { powtarza = false; wylosowane[ i ] = rand() % 10; for( int j = 0; j < i; j++ ) { if( wylosowane[ i ] == wylosowane[ j ] ) { powtarza = true; break; } } if( powtarza ) { continue; } i++; } cout << "Wylosowano: " << wylosowane[ 0 ]; for( int i = 1; i < 8; i++ ) { cout << " , " << wylosowane[ i ]; } }
int main() { srand( time( NULL ) ); int wpisane[ 10 ]; wpisywanie( wpisane ); losowanie( wpisane ); return 0; }
|
|
« 1 » |