Losowanie bez powtórzeń
Ostatnio zmodyfikowano 2014-08-28 10:59
mlOOdy Temat założony przez niniejszego użytkownika |
Losowanie bez powtórzeń » 2014-08-27 21:36:14 Cześć, mam pytanie dotyczące rozdziału Losowanie bez powtórzeń z kursu, dlaczego w funkcji czyBylaWzlosowana jest podany warunek if( ile <= 0 ) chodzi mi o to że dlaczego nie ma tam tylko znaku równości przecież chyba zmienna ile nie przyjmuje nigdy wartości mniejszej niż zero tylko startuje od wartości zero. #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; } |
|
Jacob99 |
» 2014-08-27 21:46:53 ile jest argumentem przekazanym do funkcji, więc może mieć wartość mniejszą niż 0; Nie można więc zastosować zapisu ile == 0; EDIT:/ Tzn. można, ale resultat może być opłakany :) |
|
mlOOdy Temat założony przez niniejszego użytkownika |
» 2014-08-28 09:36:22 Dzięki za odpowiedź ale dalej tego nie rozumiem "ile jest argumentem przekazanym do funkcji, więc może mieć wartość mniejszą niż 0" nie wydaje mi się żeby było coś takiego w poprzednich rozdziałach wiem że tak powinno być ale przecież jak w funkcji main ile = 0 to w funkcji CzyBylaWylosowana po przekazaniu zmiennej ile jako argument też powinno chyba przecież równać się 0. |
|
Jacob99 |
» 2014-08-28 09:54:08 Tak, bo przekazujesz tu do funkcji dokładną kopię jakiejś zmiennej i jeśli w funkcji main() utworzysz zmienną ile o wartości 0, to w tej funkcji ta zmienna także ma wartość 0. Ale chodziło mi o to, że można jako argument podać zmienną, która ma wartość np. -5 i jest mniejsza od 0. Ten warunek w funkcji pozwala zabezpieczyć się przed złymi danymi. |
|
Mateus. |
» 2014-08-28 09:56:26 Ale w tym programie raczej nie ma takiej możliwości. Musiałby zrobić to celowo lub przez przypadek. |
|
mlOOdy Temat założony przez niniejszego użytkownika |
» 2014-08-28 10:09:21 dobra, pomyliłem się i dałem samo = zamiast == i teraz wychodzi dobrze. Jak ile ma wartość 0 to chyba tak też może być zamiast <= prawda ? |
|
alixir |
» 2014-08-28 10:59:11 Funkcje powinny być zabezpieczone przed różnymi ewentualnościami, stąd taki warunek. Jeśli go zmienisz to w pewnych przypadkach (innych niż twój program) funkcja będzie zwracała nieprawidłowe wartości. |
|
« 1 » |