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ć?? 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.. |
|
Mrovqa |
» 2013-01-11 22:03:00 Return: 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). |
|
kejkun |
» 2013-01-11 23:20:35 #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 |
|
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++ ?? |
|
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. |
|
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: if( foo( 3 ) == 4 );
int x = 68; if( foo( x ) == 69 );
if( x == 68 );
Rozumiesz już? |
|
rooker Temat założony przez niniejszego użytkownika |
» 2013-01-12 14:38:13 hmm, chyba rozumiem, dzieki za wytlumaczenie ;) |
|
« 1 » |