Losowanie bez powtórzeń (zadanie z 21 rozdziału).
Ostatnio zmodyfikowano 2015-02-02 12:27
Lucas535 Temat założony przez niniejszego użytkownika |
Losowanie bez powtórzeń (zadanie z 21 rozdziału). » 2015-02-01 19:18:04 Wiem, że jest pełno takich tematów, ale ja napisałem ten program po swojemu. Program ma wczytać 10 liczb i wylosować 8 z nich bez powtórzeń, a jednak powtórzenia są. #include <iostream> #include <ctime> #include <cstdlib> using namespace std; bool porownywanie( int los[], int losnr, int lib[], int nr ) { do { if( los[ losnr ] == lib[ nr ] ) { return true; } nr++; } while( nr < 10 ); return false; } bool powtorka( int los[], int losnr ) { if( losnr <= 0 ) { return true; } int i = 0; if( losnr > 0 ) { do { if( los[ losnr ] == los[ i ] ) { return false; } i++; } while( i < losnr ); } return true; } int main() { srand( time( NULL ) ); int liczba[ 10 ]; int ilosc = 0; do { cout << "Podaj liczbe: "; cin >> liczba[ ilosc ]; ilosc++; } while( ilosc < 10 ); int wylosowana[ 8 ]; int wylosowane = 0; ilosc = 0; do { do { wylosowana[ wylosowane ] = rand(); porownywanie( wylosowana, wylosowane, liczba, ilosc ); if( porownywanie( wylosowana, wylosowane, liczba, ilosc ) == true ) { ( powtorka( wylosowana, wylosowane ) ); if( powtorka( wylosowana, wylosowane ) == true ); { wylosowane++; } } } while( porownywanie( wylosowana, wylosowane, liczba, ilosc ) == false ); } while( wylosowane < 8 ); wylosowane = 0; do { cout << "Wylosowano liczbe: " << wylosowana[ wylosowane ] << endl; wylosowane++; } while( wylosowane < 8 ); cout << "Koniec." << endl; return 0; } |
|
darko202 |
» 2015-02-02 11:33:05 1. dziwny jest ten Twój kod * powtarzanie tego samego wywołania wielokrotnie np. porownywanie do { ... porownywanie( wylosowana, wylosowane, liczba, ilosc ); cout << " " << licznik++ << "\n"; if( porownywanie( wylosowana, wylosowane, liczba, ilosc ) == true ) ( powtorka( wylosowana, wylosowane ) ); cout << " " << licznik2++ << "\n"; if( powtorka( wylosowana, wylosowane ) == true ); ..... while( porownywanie( wylosowana, wylosowane, liczba, ilosc ) == false );
błędem jest to, że nie jest to niczym uzasadnione powtarzanie. robisz raz i zapamiętujesz wynik, który później wykorzystujesz 2. dodaj sobie licznik w miejscach które zaznaczyłem Ci wyżej i zobacz ile razy wykonują się Twoje funkcje we wskazanych pętlach niezależnie od p1. to również jest błędem - nie dążysz do uzyskanie wynik w najkrótszym czasie 3. masz pomyłkę w powtorka( wylosowana, wylosowane ) bo ewidentnie po wylosowaniu tej samej liczby funkcja nie zauważa tego faktu i zmienia wylosowane++ stąd opisywany problem. |
|
Lucas535 Temat założony przez niniejszego użytkownika |
» 2015-02-02 12:27:54 Już wiem o co chodziło, dałem średnik po if i dlatego nie działało, usunąłem średnik i jest wsio haraszo :) |
|
« 1 » |