Losowanie bez powtórzeń - Program rozwiązujący zadanie
Ostatnio zmodyfikowano 2015-10-29 19:25
Lich555 Temat założony przez niniejszego użytkownika |
Losowanie bez powtórzeń - Program rozwiązujący zadanie » 2015-10-27 22:57:06 Witam. Mam pytanie odnośnie programu rozwiązującego zadanie w temacie "Losowanie bez powtórzeń". Otóż nie rozumiem działania jednej rzeczy, która wg mnie jest zbędna. Mianowicie: #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
bool czyBylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( iLiczba == tab[ i ] ) return true; i++; } while( i < ile ); return false; }
int wylosuj() { return( rand() % 10 ) + 1; }
int main() { srand( time( 0 ) ); int wylosowane[ 5 ]; int wylosowanych = 0; do { int liczba = wylosuj(); if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false ) { wylosowane[ wylosowanych ] = liczba; wylosowanych++; } } while( wylosowanych < 5 ); wylosowanych = 0; do { cout << wylosowane[ wylosowanych ] << endl; wylosowanych++; } while( wylosowanych < 5 ); return 0; }
|
|
carlosmay |
» 2015-10-27 23:13:37 if( ile <= 0 ) return false;
|
Dalsza część funkcji ma się nie wykonywać, bo dane są błędne (rozmiar aktualny wypełnianej tablicy jest ujemny). Nic więcej. Kod jest prosty i nie wykracza poza aktualny zakres wiedzy. |
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2015-10-28 16:24:05 "ile" na początku ma wartość 0, a określone jest to przez zmienną "wylosowanych" w main, tak? Czyli, jeśli dobrze zrozumiałem, to po pierwszym losowaniu "ile" jest równy 0, więc nie sprawdza, czy dana liczba została wylosowana, tak? |
|
carlosmay |
» 2015-10-28 17:59:53 Tak. |
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2015-10-28 18:19:00 Jeszcze jedno pytanie mam. Czemu w main w if dajemy na końcu false? |
|
carlosmay |
» 2015-10-28 18:38:00 Żeby było czytelnie. Jeśli wróci false wykonaj instrukcję. Gdybyś tego nie dał warunek byłby fałszem, a tak jest prawdziwy. Jeśli dobrze ogarniasz ten temat możesz zapisać to tak: if( !czyBylaWylosowana( liczba, wylosowane, wylosowanych ) )
|
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2015-10-28 19:35:08 A return true jest konieczne? |
|
carlosmay |
» 2015-10-28 20:26:57 Od True lub false zależy czy instrukcja się wykona. Na to pytanie sam możesz znaleźć odpowiedź. Przeanalizuj funkcje. Co po kolei jest wykonywane. |
|
« 1 » 2 |