Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 17 - ostatnie zadanie

Ostatnio zmodyfikowano 2016-12-18 11:02
Autor Wiadomość
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.

C/C++
#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
C/C++
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.
P-155018
mateczek
» 2016-12-15 22:22:14
fukncja wylosuj
C/C++
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   
P-155019
bobby.hl
Temat założony przez niniejszego użytkownika
» 2016-12-15 22:36:26
Wykorzystałem funkcje
C/C++
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.
P-155020
carlosmay
» 2016-12-15 23:51:24
Dwa razy wypisujesz wynik losowania. Pierwszy raz w funkcji i drugi raz po powrocie do main.
P-155027
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!
P-155122
« 1 »
  Strona 1 z 1