Generatorul de numere aleatorii cu

Termeni și condiții

Forumul este interzis:

Cei care încalcă legea vor fi aspru pedepsiți de către moderatori sau administratori, și ei vor fi refuzat complet accesul la forum.

Folosind acest forum puteți:

Acest articol va vorbi în detaliu despre generare de numere aleatorii (Nota. Corect să spunem „numere pseudo-aleatoare“, pentru că nimeni nu algoritm nu se poate lucra un număr cu adevărat aleatoriu, dar pentru comoditate, voi omite cuvântul „pseudo“). Destul de des în programarea nevoie pentru a obține numere aleatoare pentru a efectua orice acțiune. În primul rând, este un exemplu, este de amestecare cărți în jocurile de cărți sau, de exemplu, jocul de „oase“, care necesită, de asemenea, generarea de numere aleatoare pentru aruncarea de simulare „oase“. Exemple în mod arbitrar, în special în ceea ce privește jocurile pe calculator.

În scopul de a obține un număr aleatoriu poate, desigur, scrie, și funcția sa, și pot fi folosite și biblioteca standard. Nu vom fi cu tine „reinventeze roata“, și așa vom folosi funcțiile de bibliotecă numai standard. Deci, pentru generarea de numere aleatoare în C ++ folosind functia rand (). descris în biblioteca stdlib.h. Cum funcționează, ia în considerare un exemplu simplu.

După cum puteți vedea, totul este simplu: conectați biblioteca necesară, prin directiva #include preprocesorului și de a folosi funcția rand () în program. Încercați să executați programul și vedea elaborat numerele. Și apoi încercați să executați programul de mai multe ori. Probabil ați observat că de fiecare dată când executați funcția rand () generează același număr. Da, e adevărat! Dar de ce? Să ne ocupăm împreună.

punct de vedere tehnic. pentru că Rand () - această funcție, atunci ea are propriul său prototip (descriere), ceea ce indică faptul că acesta poate primi ca argument (argumente) și o returnează. Aici este un prototip (îl puteți găsi pe cont propriu și în fișierul stdlib.h, care este de obicei localizat în directorul includ mediului de programare):

După cum puteți vedea, funcția returnează un număr întreg (0-32767), ca argumente, nu poate lua nimic, asta în interiorul paranteze vor fi întotdeauna goale.

Vom continua să investigheze. Pentru a înțelege de ce funcția rand () ne revine întotdeauna la același număr, uita-te în interiorul acestuia. Asta e ceea ce vedem acolo

Nu vom intra în detaliile codului. Cu excepția a spune că numărul aleatoriu a primit cu ajutorul funcției depinde de numărul de a începe următoare. care, după cum vedeți, este setat la unu. Rezultă că numerele de vin întotdeauna la fel. Pentru a evita această problemă, într-o pereche cu rand () trebuie să folosiți funcția srand (). Aici este un prototip

Și aici este interior

După cum puteți vedea, această funcție modifică numărul de start următor, atribuindu-i o valoare diferită, obținem funcția ca argument. În principiu, acest număr poate fi introdus manual de fiecare dată, de exemplu, așa

În acest caz, prin introducerea unor valori diferite ale seminței variabile. vom obține diferite valori aleatoare la ieșire. După cum vă puteți imagina, acest lucru nu este foarte convenabil. În cele mai multe cazuri, ca și cantitatea de transmisie în funcție de srand () folosind timpul de sistem în secunde. Sunt de acord că acest lucru este cel mai bun mod, deoarece Acest număr va fi întotdeauna diferite, și, prin urmare, vom ajunge la ieșirea din numere aleatoare rand ().

Acum trebuie să se gândească la modul de a transfera funcția srand () la data sistemului. Iar răspunsul este simplu: ea are un timp funcție de bibliotecă (). descris în time.h. bibliotecă Aici este un prototip

Nu fi puse în afara de numele de tipul, ea poate fi asimilată cu int obișnuită. Pentru ca această funcție pentru a reveni ora curentă în secunde (secunde sunt numărate de la 0:00:00), trebuie să-l apelați cu un parametru NULL. Dovedi ca aceasta

Acum, să ne ia în considerare aici o întrebare. Să presupunem că avem nevoie pentru a genera un număr nu pe întreg intervalul acceptabil, și numai în unele special, de exemplu, 0 - 9 inclusiv. Așa cum am proceda în acest caz? In rand () funcția are propria sintaxă

în cazul în care un - un punct de pornire pentru a porni generarea,

b - este o valoare de deplasare care determină intervalul la care se realizează generarea.

In cazul in care un nostru = 0 (acest număr este inclusiv), b = 10 (acest lucru nu este inclusiv, deoarece aceasta nu este punctul final, iar valoarea de offset. Dacă 0 amâne 10 numere, atunci acesta din urmă va 9 inclusiv). Dacă s-ar genera un număr în intervalul, de exemplu, la 30 la 50 inclusiv, ar fi așa

Experiment cu programul de mai sus, respectați valorile obținute. Încearcă să facă ceva din propria mea, pentru a înțelege mai bine generarea de numere aleatoare în C ++. Eu pot recomanda, de asemenea, experimentarea cu adăugarea de srand () Ceas () funcția. Returnează timpul CPU aproximative petrecut de lucru cu programul. Iată o linie va

În unele cazuri, este posibil să primiți o variabile aleatoare, dar eu personal nu am observat diferența de principiu.

Acum, mai mult un singur lucru: obtinerea de valori negative. Să presupunem că avem nevoie pentru a obține valori aleatoare în intervalul -100-100. Linia de cod care este responsabil pentru randomizare va fi

Și ultimul punct este de a obține numere în virgulă mobilă, adică fracționată. De exemplu, pentru a obține numărul în intervalul de la 0,01 până la 1. Codul Bucurându

La sfârșitul articolului a scrie un mic program care cere utilizatorului pentru un interval de generare de numere aleatorii, se umple valorile obținute matrice bidimensional (matrice) și afișează pe ecran

Aici, comentariul doar codul care trebuie să fie explicate în detaliu - un șir de caractere

pentru că utilizatorul este mai convenabil să se introducă coduri inferioare și superioare randomizare, nu cantitatea de schimbare în al doilea caz, vom face niște calcule matematice. Să presupunem că utilizatorul introduce 10 și 20, apoi în cele din urmă vom obține un șir de cod

necesară.

Rezultatul programului

Generatorul de numere aleatorii cu

articole similare