Informatică, întrebare adresată de Utilizator anonim, 9 ani în urmă

Problema: \\ Consultati~sistemul~HELP~al~ mediului~programare~pentru ~a~afla~ \\ ~care~sunt~functiile~care~permit~generarea~numerelor~aleatoare. \\ Aceste~functii~sunt~declarate~in~fisierul~antet~stdlib.h. \\ Scrieti~un~program~care~sa~citeasca~doua~numere~naturale~\\~nenule~a~si~b~si~care~sa~genereze~si~sa~afiseze:\\~1)un~numar~natural~aleator~mai~Mic~decat~a;\\2)un~numar~natural~intreg~aleator~in~intervalul~{[-a,b]};\\3)un~numar~natural~aleator~din~intervalul~{[a,b]};\\
Ajutor!Am nevoie si de instructiuni (gen despre sistemul Help etc)
deci as dori o rezolvare a problemei cu tot cu explicatii .
Multumesc~!

Răspunsuri la întrebare

Răspuns de artur99
2
Ok, deci pentru generarea unui număr aleatoriu în C++ se folosește funcția rand() din librăria <cstdlib> sau <stdlib.h>. Această funcție pur și simplu returnează un număr între 0 și câteva zeci de mii, sau chiar mai mare în unele cazuri. (În caz de nevoie, valoarea maximă se poate afla din constanta RAND_MAX.)

Ok, acum vine partea să scoatem doar dintr-un anumit interval acele numere. Ca să nu fie prea greu, să zicem că trebuie un număr aleatoriu între 0 și x.

Dacă ne gândim, am putea deduce că o metodă ar fi să transformăm acel rand generat într-un număr procentual (între 0 și 1), să înmulțim cu x, și să luăm întregul.
Ceva de genul:

float proc = (float) rand() / RAND_MAX;
int nr = proc * x;

Și am avea în nr un număr între 0 și x.

Dar există o metodă și mai simplă, cu modulo:

int nr = rand() % x; (eventual (x+1), dacă vrem să includem și x)

Ok, acum, ca să generăm un număr între a și b:
e exact același lucru, doar că o să calculăm un x (care ar fi diferența dintre cele 2), apoi îi adunăm a, ca să poziționăm intervalul între a și b.
Deci:

x = b-a;
nr = a + ( rand() % (x+1) );

Același raționament se aplică și de la -a la b. Se calculează „distanța” de la unul la celălalt și se generează un număr între 0 și această „distanță”. Apoi se poziționează la începutul intervalului (la -a [sau la a, la cerința cu a, b]).
Alte întrebări interesante