Lekcja 21 Losowanie bez powtórzeń
Ostatnio zmodyfikowano 2017-09-04 16:44
Jarek50000 Temat założony przez niniejszego użytkownika |
Lekcja 21 Losowanie bez powtórzeń » 2017-09-04 10:59:29 WITAJCIE!! Mam mały problem ze zrozumieniem programu przedstawionego w kursie . Nie rozumiem celu warunku if (ile<=0) w funkcji czyBylaWylosowana().Proszę o kilka słów komentatrza dlaczego właśnie tak to zostało napisane. #include <iostream> #include <cstdlib> #include <ctime>
bool czyBylaWylosowana( int iLiczba, int tab[], int ile ) { if( ile <= 0 ) return false; int i = 0; do { if( tab[ i ] == iLiczba ) 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 { std::cout << wylosowane[ wylosowanych ] << std::endl; wylosowanych++; } while( wylosowanych < 5 ); return 0; }
|
|
maly7 |
» 2017-09-04 15:53:54 Warunek jest tam po to, że jeśli nie została jeszcze wylosowana żadna liczba (ile == 0) to od razu zwróci false. Jeśli zastosowałbyś pętlę while albo for gdzie na początku sprawdzany jest warunek ( i < ile ) nie musiałbyś wstawiać tamtego warunka bo pętla by się nie wykonała. Natomiast pętla do...while wykonuje się zawsze przynajmniej raz, więc nie można porównać tab[0] bo nic tam jeszcze nie wstawiono. |
|
Jarek50000 Temat założony przez niniejszego użytkownika |
» 2017-09-04 16:41:33 Dzięki za jasne wytlumaczenie. Właśnie ttego mi zabrakło.Pzdr |
|
matix04 |
» 2017-09-04 16:44:41 |
|
« 1 » |