Rozdział 17 - ostatnie zadanie
Ostatnio zmodyfikowano 2016-12-18 11:02
bobby.hl Temat założony przez niniejszego użytkownika |
Rozdział 17 - ostatnie zadanie » 2016-12-15 22:04:28 Witam, przeglądam forum, jest trochę tematów na temat tego zadania, ale żadne rozwiązanie nie pomaga. Funkcja losująca liczby z przedziału podanego w jej argumentach. Jeśli podam jako argumenty liczby 4 i 6 losuje liczby 44, 45, 54, 55. Dlaczego??? Poniżej kod. #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
int wylosuj( int a, int b ) { int liczba =( rand() %( b - a ) ) + a; cout << "Wylosowana liczba to " << liczba; return( rand() %( b - a ) ) + a; }
int main() { srand( time( NULL ) ); int a; std::cin >> a; int b; std::cin >> b; int ile = 20; do { std::cout << wylosuj( a, b ) << std::endl; ile--; } while( ile > 0 ); return 0; }
i drugie pytanie: dlaczego zapis int liczba =( rand() %( b - a ) ) + a;
return( rand() %( b - a ) ) + a;
Wykorzystałem go, bo tak ktoś podał w innym poscie na ten temat ale nie rozumiem tego zapisu w ogole. Z góry dzięki za pomoc. |
|
mateczek |
» 2016-12-15 22:22:14 fukncja wylosuj int wylosuj( int a, int b ) { int liczba =( rand() %( b - a + 1 ) ) + a; return liczba; } rand()%5 jest to reszta z dzielenia losowej liczby przez pięć. A co za tym idzie są to liczby od "0"(dzielenie bez reszty) do "4" w przedziale od <5 do 9> są 9-5+1=5 liczb, Więc najpierw losujesz liczby od 0 do 4(reszta z dzielenia przez 5). A potem dodajesz 5(dolna granica przedziału) i po sprawie |
|
bobby.hl Temat założony przez niniejszego użytkownika |
» 2016-12-15 22:36:26 Wykorzystałem funkcje int wylosuj( int a, int b ) { int liczba =( rand() %( b - a + 1 ) ) + a; cout << "Wylosowana liczba to " << liczba; return liczba; a oto efekt 1 5 Wylosowana liczba to 55 Wylosowana liczba to 44 Wylosowana liczba to 22 Wylosowana liczba to 11 Wylosowana liczba to 22 Wylosowana liczba to 55 Wylosowana liczba to 22 Wylosowana liczba to 11 Wylosowana liczba to 11 Wylosowana liczba to 44 Wylosowana liczba to 55 Wylosowana liczba to 11 Wylosowana liczba to 44 Wylosowana liczba to 22 Wylosowana liczba to 11 Wylosowana liczba to 44 Wylosowana liczba to 22 Wylosowana liczba to 22 Wylosowana liczba to 33 Wylosowana liczba to 11
Process returned 0 (0x0) execution time : 3.022 s Press any key to continue.
Nadal wywala podwójne liczby, przy wpisaniu większych liczb nawet poczwórne itp. |
|
carlosmay |
» 2016-12-15 23:51:24 Dwa razy wypisujesz wynik losowania. Pierwszy raz w funkcji i drugi raz po powrocie do main. |
|
bobby.hl Temat założony przez niniejszego użytkownika |
» 2016-12-18 11:02:50 Taki prosty błąd, a tak trudno mi go było wychwycić.. :)
@carlosmay dzięki wielkie za podpowiedź
@mateczek dzięki za wytłumaczenie rand() :)
Zamykam.
Pzdr! |
|
« 1 » |