![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]};\\ 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]};\\](https://tex.z-dn.net/?f=Problema%3A+%5C%5C+Consultati%7Esistemul%7EHELP%7Eal%7E+mediului%7Eprogramare%7Epentru+%7Ea%7Eafla%7E+%5C%5C+%7Ecare%7Esunt%7Efunctiile%7Ecare%7Epermit%7Egenerarea%7Enumerelor%7Ealeatoare.+%5C%5C+Aceste%7Efunctii%7Esunt%7Edeclarate%7Ein%7Efisierul%7Eantet%7Estdlib.h.+%5C%5C+Scrieti%7Eun%7Eprogram%7Ecare%7Esa%7Eciteasca%7Edoua%7Enumere%7Enaturale%7E%5C%5C%7Enenule%7Ea%7Esi%7Eb%7Esi%7Ecare%7Esa%7Egenereze%7Esi%7Esa%7Eafiseze%3A%5C%5C%7E1%29un%7Enumar%7Enatural%7Ealeator%7Emai%7EMic%7Edecat%7Ea%3B%5C%5C2%29un%7Enumar%7Enatural%7Eintreg%7Ealeator%7Ein%7Eintervalul%7E%7B%5B-a%2Cb%5D%7D%3B%5C%5C3%29un%7Enumar%7Enatural%7Ealeator%7Edin%7Eintervalul%7E%7B%5Ba%2Cb%5D%7D%3B%5C%5C)
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
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]).
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
Istorie,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Ed. tehnologică,
9 ani în urmă