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

Problem z losowaniem liczb i returnem

Ostatnio zmodyfikowano 2013-01-12 14:38
Autor Wiadomość
rooker
Temat założony przez niniejszego użytkownika
Problem z losowaniem liczb i returnem
» 2013-01-11 21:56:49
To jeszcze jedno pytanie. Chce aby funkcja losowala mi liczby z przedzialu <a,b>, a losuje <a,b) jak to rozwiązać??
C/C++
void funkcja( int a, int b )
{
    int x = 0;
    x =( rand() %( b - a ) + a - 2 );
    cout << x;
}

Bardzo proszę jeszcze o wytłumaczenie jak działać z funkcja return bo tez nie zabardzo rozumiem..
P-73630
Mrovqa
» 2013-01-11 22:03:00
Return:
C/C++
int foo( int input )
{
    return input + 1;
}

int main()
{
    cout << foo( 3 );
    int x;
    x = foo( 1 );
    cout << " " << x << "\n";
   
    return 0;
}
Przeanalizuj sobie powyższy kod :)

Chce aby funkcja losowala mi liczby z przedzialu <a,b>, a losuje <a,b)
Hmm, po twoim kodzie wynika, że <a-2,b-2)... Pomyśl jeszcze raz jak działa % (modulo - reszta z dzielenia), i jak dodawaniem przesuwa się wygenerowany zakres (albo naucz się uważnie czytać/szukać materiałów).

P-73632
kejkun
» 2013-01-11 23:20:35
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()

{
    int a, b, c;
    cin >> a;
    cin >> b;
    b = b - a;
   
    srand( time( NULL ) );
    std::cout << "Wylosowanie pierwsze: " <<(( rand() %( b ) ) + a ) << std::endl;
    int liczba =( rand() % b ) + a;
    std::cout << "Wylosowanie drugie: " << liczba << std::endl;
    liczba =( rand() % b ) + a;
    std::cout << "Wylosowanie trzecie: " << liczba << std::endl;
    return 0;
}

http://ideone.com/iSWKTO
P-73637
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-12 11:00:23
Ok z funkcją rand już sobie poradziłem, ale nadal mam problemy z returnem. W tym co napisałeś to ten return input+1 zastępuje tak jakby input++ ??
P-73648
DejaVu
» 2013-01-12 12:26:52
W tym co napisałeś to ten return input+1 zastępuje tak jakby input++ ??
@up: nieprawda. To stwierdzenie jest podwójnie nieprawdziwe. Po pierwsze dlatego, że drugi zapis zmienia wartość zmiennej input, a po drugie, wynik nie będzie równoważny, ponieważ jest to postinkrementacja.
P-73655
Mrovqa
» 2013-01-12 14:17:38
@rooker funkcja przyjmuje wartość input i zwraca o jeden zwiększoną. Zasada jest jednak taka, że oryginalnej zmiennej nie modyfikuje - bo po 1. tam jest zwykłe dodawanie bez zapisu wartości zmiennej, a po 2. zmienna jest wysyłana przez wartość, a nie referencję. W skrócie:
C/C++
if( foo( 3 ) == 4 ); // prawda

int x = 68;
if( foo( x ) == 69 ); // prawda

if( x == 68 ); // tez prawda

Rozumiesz już?
P-73675
rooker
Temat założony przez niniejszego użytkownika
» 2013-01-12 14:38:13
hmm, chyba rozumiem, dzieki za wytlumaczenie ;)
P-73681
« 1 »
  Strona 1 z 1