praca domowa z rozdziału 21 losowanie bez powtórzeń
Ostatnio zmodyfikowano 2013-05-29 14:28
ToNieJa Temat założony przez niniejszego użytkownika |
praca domowa z rozdziału 21 losowanie bez powtórzeń » 2013-05-29 12:31:40 Witam. Przejdę od razu do rzeczy. Otóż zabrałem się za zadanie domowe z rozdziału 21 i napisałem taki kod: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool czyBylaWylosowana( int wylosowane[], int wylosowanych, int wylosowany ) { if( wylosowanych <= 0 ) return false; int i; do { if( wylosowane[ i ] == wylosowany ) return true; i++; } while( i < wylosowanych ); return false; }
int main() { srand( time( 0 ) ); int tablica[ 3 ]; cout << "Podaj pierwszy element "; cin >> tablica[ 0 ]; cin.clear(); cin.sync(); cout << "Podaj drugi element "; cin >> tablica[ 1 ]; cin.clear(); cin.sync(); cout << "Podaj trzeci element "; cin >> tablica[ 2 ]; cin.clear(); cin.sync(); int wylosowane[ 2 ]; int wylosowanych = 0; int wylosowany; do { wylosowany = tablica[(( rand() & 3 ) + 0 ) ]; if( czyBylaWylosowana( wylosowane, wylosowanych, wylosowany ) == false ) { wylosowane[ wylosowanych ] = wylosowany; wylosowanych++; } } while( wylosowanych < 2 ); cout << wylosowane[ 0 ] << ", " << wylosowane[ 1 ] << ", " << wylosowane[ 2 ] << endl; cout << tablica[ 0 ] << ", " << tablica[ 1 ] << ", " << tablica[ 2 ]; return 0; } Uruchomiłem program pierwszy raz i podałem liczby: 15, 21, 77. Program wylosował 77 i 21. Niby wszystko poszło jak należy ale po ponownym uruchomieniu program wylosował liczby: 15 i 1. Skąd się wzięła ta jedynka? Przecież nie podałem jej do tablicy. Uruchomiłem program jeszcze kilka razy i znowu raz było dobrze a drugi raz źle. Zamiennie z tą nieszczęsną jedynką występowało jeszcze 0 i chyba 2. Ktoś wie w czym problem? |
|
Monika90 |
» 2013-05-29 14:15:03 W funkcji czyBylaWylosowana masz niezainicjalizowaną zmienną int i; Ta linijka jest błędna cout << wylosowane[ 0 ] << ", " << wylosowane[ 1 ] << ", " << wylosowane[ 2 ] << endl;
Tablica wylosowane ma tylko dwa elementy a ty odwołujesz się do trzech. To też jest źle: int wylosowany = tablica[(( rand() & 3 ) + 0 ) ];
pewnie chodziło ci o % , a nie o & |
|
ToNieJa Temat założony przez niniejszego użytkownika |
» 2013-05-29 14:28:14 No nieźle, pomyliłem & z %. Chyba muszę zacząć chodzić do okulisty :P. Pozostałe dwa błędy sam wykryłem w międzyczasie, ale tego pierwszego pewnie prędko bym nie zauważył. Dziwne, że kompilator nie protestował. |
|
« 1 » |