Fyll matrise med tilfeldige tall i C ++

Fyll matrise med tilfeldige tall i C ++
Å fylle en matrise med tilfeldige tall høres enkelt ut hvis det antas at matrisen er for 10 elementer. For å gjøre det, generer du et tilfeldig tall og legg inn i matrisen som det første elementet. Generere et annet tilfeldig tall og sett inn som det andre elementet. Generer deretter igjen et tredje tilfeldig tall og satt inn som det tredje elementet. Fortsett denne veien til det tiende elementet er nådd.

Her er imidlertid andre ting å sette pris på før du koder for det. Tilfeldige tall generert av C ++ 20 Følg en sekvens. Det er mange slike sekvenser, så tilfeldige tall er ikke virkelig tilfeldige. Brukeren av programmet vil neppe kunne vite hvilken sekvens programmereren valgte og hvordan du bestemmer neste nummer, når den tilfeldige funksjonen kalles, i samme kode.

Hver sekvens har et startnummer. Frøet er relatert til startnummeret til en sekvens. Hver sekvens avhenger av frøet og sekvensfordelingen. Sekvensfordelingen er profilen til sekvensen.

Denne artikkelen forklarer hvordan du fyller en matrise med tilfeldige tall som begynner med klassene: random_device, standard_random_engine og uniform_int_distribution. Disse klassene er alle i det tilfeldige biblioteket som må inkluderes. Skjelettet til et program for å fylle en rekke 10 elementer, med tilfeldige tall, er som følger:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int arr [10];
int main ()

// uttalelser
retur 0;

Merk at enhver aritmetisk type kan brukes som elementtype for matrisen. Størrelsen på matrisen er 10. Imidlertid kan et hvilket som helst antall tilfeldige tall oppnås.

Motor og distribusjon

I dette emnet er en motor en generator med tilfeldige tall.

RANDOM_DEVICE

Dette er en klasse som gjenstander blir instantiert. Et objekt fra denne klassen er en enhet og ikke en motor. Dette trenger en generator for å være nyttig. En generator kan ta en random_device som argument.

standard_random_engine

En motor i dette emnet genererer tilfeldige tall. Det er forskjellige motorer som programmereren kan velge. Dette må velges når programmereren ikke er sikker på hvilken motor du skal velge. Dette er en klasse som gjenstander blir instantiert. Det tar et random_device -objekt som argument.

uniform_int_distribution

Det er mange sekvenser distribusjonsprofiler som programmereren kan velge mellom. Den som er valgt for denne artikkelen er: uniform_int_distribution. Dette er en klasse som gjenstander kan opprettes. Konstruksjonen tar en motor som argument, så vel som de nedre og øvre grensetallene for tilfeldige tall. Det er faktisk en klassemal. En av konstruksjonssyntaksene er:

eksplisitt uniform_int_distribution (inttype a, inttype b = numeric_limits:: max ());

Følgende tre uttalelser fungerer sammen:

random_device rd;
standard_random_engine eng (rd ());
uniform_int_distribution dist (4, 13);

Fra 4 til 13 er ti heltall inkludert nedre og øvre grenser. Malspesialiseringen for distribusjonsobjektet, DIST, er int. Så ti forskjellige tilfeldige tall kan velges fra dette området, (4 - 13). Merk at argumentet for Eng () er RD () og ikke RD. Vær også oppmerksom på at enhver aritmetisk type kan være malspesialiseringen for denne distribusjonskonstruksjonen.

Fra denne koden, for å få neste tilfeldige nummer, bruk "DIST (ENG);" .

Produserer ti tilfeldige heltall

Følgende program produserer ti tilfeldige heltall, fra 4 til 13 inklusive.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

random_devicerd;
standard_random_engineeng (rd ());
uniform_int_distributiondist (4, 13);
cout<cout<retur 0;

Utgangen fra forfatterens datamaskin er:

7 10 4 10 6
8 12 6 12 8

Noen tall skjedde mer enn en gang. Programmet begynner med inkludering av iostream -biblioteket for input og output. Etter det er det tilfeldige biblioteket inkludert Forr tilfeldige tall. Neste linje er en uttalelse og ikke et direktiv. Det ender med en semikolon. Den insisterer på at ethvert navn, ikke foregått med "STD ::" er av standardnavnet.

Så er det C ++ hovedfunksjonen. De tre første uttalelsene fra hovedfunksjonen er blitt forklart, tidligere. I neste kodesegment sender DIST (ENG) ut neste tilfeldige nummer; Innenfor rekkevidden (inkluderende), gitt som argumenter for distribusjonskonstruktøren.

Fylle en matrise med tilfeldige tall

I koden ovenfor ble ti tilfeldige tall produsert med uttrykket, DIST (ENG). Det ble skrevet ti ganger. Det kan skrives en gang, og kalles ti ganger, hvis det gjøres i en for-loop. For-loopen må iterere ti ganger. I denne situasjonen vil det tilfeldige nummeret ikke bli sendt til terminalen (skjerm); Det vil bli sendt til neste elementsted, av matrisen. Følgende program illustrerer dette:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int arr [10];
int main ()

random_devicerd;
standard_random_engineeng (rd ());
uniform_int_distributiondist (4, 13);
for (int i = 0; i<10; i++)
arr [i] = dist (eng);
for (int i = 0; i<10; i++)
cout<cout<retur 0;

Utgangen fra forfatterens datamaskin, denne gangen, er:

9 8 12 10 8 10 8 5 4 11

Legg merke til hvordan den første for-loopen ble kodet. Naturligvis kan ethvert utvalg valgt, følgende program bruker et område fra 0 til 100:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int arr [10];
int main ()

random_devicerd;
standard_random_engineeng (rd ());
uniform_int_distributiondist (0, 100);
for (int i = 0; i<10; i++)
arr [i] = dist (eng);
for (int i = 0; i<10; i++)
cout<cout<retur 0;

Utgangen fra forfatterens datamaskin, denne gangen, er:

43 52 52 24 90 81 21 72 33 42

Selv om rekkevidden har mer enn ti heltall, ble bare ti tilfeldige tall produsert, som besluttet av den første for-loop.

Konklusjon

Gjennomfør følgende prosedyre for å fylle en matrise med tilfeldige tall: Generer et tilfeldig tall og sett i matrisen, som det første elementet. Generere et annet tilfeldig tall og sett inn, som det andre elementet. Generere et tredje tilfeldig tall og sett inn, som det tredje elementet. Fortsett denne veien til antallet tilfeldige tall som kreves, er nådd. Følgende kodesegment er viktig:

int arr [10];
random_device rd;
standard_random_engine eng (rd ());
uniform_int_distribution dist (0, 100);
for (int i = 0; i<10; i++)
arr [i] = dist (eng);