random number generator c
Denna handledning beskriver användningen av funktioner rand () och srand () i detalj för att generera slumpmässiga nummer i C ++:
Många gånger behöver vi använda slumpmässiga nummer i vår applikation för att producera simuleringar eller spel och andra applikationer som kräver slumpmässiga händelser.
Till exempel, i ett tärningsspel, utan att ha slumpmässiga händelser, kommer vi att ha samma sida som dyker upp varje gång vi kastar tärningarna, vilket ger oönskade resultat.
Således blir det nödvändigt att vi har ett slumptalsgenerator till vårt förfogande. I den fysiska miljön kan vi generera slumpmässiga händelser men det är inte möjligt när det gäller datorer.
=> Läs igenom Easy C ++ Training Series.
Detta beror på att allt på datorer är binärt, dvs. 0 eller 1 (sant eller falskt) och inget däremellan. Så datorer genererar vanligtvis förutsägbara händelser och kan inte generera slumpmässiga händelser.
Istället simulerar datorer slumpmässighet som görs med pseudoslumpgenerator (PRNG) . C ++ har en slumptalsgenerator och kan användas med många av applikationerna.
I denna handledning kommer vi att diskutera funktionerna / tillvägagångssätten för att generera slumptal i C ++ i detalj.
Vad du kommer att lära dig:
- Pseudo-Random Number Generator (PRNG) I C ++
- rand och srand Funktioner i C ++
- Skillnad mellan rand () och srand ()
- C ++ slumpmässig flytning
- C ++ slumpmässigt nummer mellan 0 och 1
- C ++ slumpmässigt nummer mellan 1 och 10
- Vanliga frågor
- Slutsats
- Rekommenderad läsning
Pseudo-Random Number Generator (PRNG) I C ++
I allmänhet kan en pseudoslumpgenerator (PRNG) definieras som ett program som tar ett frö eller ett startnummer och förvandlar det till något annat nummer som skiljer sig från frö med matematiska operationer.
Denna process utförs upprepade gånger genom att ta det senast genererade numret varje gång. Varje gång det genererade numret inte är relaterat till de tidigare siffrorna. Således kan detta program generera en serie siffror som verkar slumpmässiga.
C ++ språk kommer med en inbyggd pseudoslumpgenerator och ger två funktioner rand () och srand () som kan användas för att generera slumptal.
Låt oss diskutera dessa två funktioner i detalj.
virtual reality-headset för xbox one
rand och srand Funktioner i C ++
srand ()
Funktionsprototyp: ogiltig srand (osignerad int seed);
Parametrar: seed - Ett heltal som ska användas som seed av algoritmen för pseudoslumpgenerator.
Returvärde: Ingen
Beskrivning: srand-funktionen används för att initiera sekvensen av pseudo-slumpmässiga nummer med en parameter som kallas 'random seed'. Det får utgången från randfunktionen att se slumpmässig ut. I annat fall kommer funktionen för rand () att vara densamma varje gång vi kallar det.
Således, om vi sånar slumptalsgeneratorn med srand () -funktionen, kommer den att starta generatorn från den punkt som är beroende av argumentvärdet som skickas till srand. Om vi ställer in slumptalsgeneratorn med systemtiden Till exempel, före det första samtalet till rand () -funktionen kommer det att generera slumpmässiga siffror varje gång vi kör programmet.
Observera att vi vanligtvis behöver ringa srand () -funktionen bara en gång innan samtalet till rand () -funktionen och inte varje gång vi genererar slumptal.
rand ()
Funktionsprototyp: int rand (ogiltig);
Parametrar: ingen
Returvärde: Ett heltal mellan 0 och RAND_MAX.
Beskrivning: Funktionen rand () genererar nästa slumpmässiga tal i sekvensen. Antalet som genereras är det pseudoslumpmässiga heltalet mellan 0 och RAND_MAX. RAND_MAX är en konstant i sidhuvudet som vanligtvis ställs till värde 32767.
#include #include #include int main() { std::srand(static_cast(std::time(nullptr))); for (int count=1; count <= 100; ++count) { std::cout << std::rand() << ' '; // display 5 random numbers per row if (count % 5 == 0) std::cout << '
'; } return 0; }
Produktion:
I ovanstående program har vi genererat de första 100 slumpmässiga siffrorna genom att ge systemklockan som frö för srand-funktion. I det här programmet har vi använt både srand- och randfunktioner. Observera att på grund av systemklockan som utsäde kommer den genererade produktionen att vara annorlunda varje gång vi kör programmet.
Skillnad mellan rand () och srand ()
rad() | srand () |
---|---|
Används för att generera slumptal. | Fröer PRNG som används av rand () -funktionen. |
Ringde så många gånger som vi vill generera slumpmässiga nummer. | Ringde bara en gång för att se slumptalsgeneratorn. |
Tar inga argument. | Tar parametern som används för att sådd slumptalsgeneratorn. |
Returnerar sekvensen av slumpmässiga nummer varje gång det anropas. | Returnerar inte ett värde. |
C ++ slumpmässig flytning
Funktionen rand () som vi har sett ovan returnerar som standard ett heltal som kan orsaka ett flöde i vissa fall. Således kan vi använda flyt- eller dubbelvärde. Vi kan generera flytande slumpmässiga nummer genom att kasta returvärdet för rand () -funktionen till 'float'.
Följaktligen genererar följande ett slumpmässigt tal mellan float 0.0 och 1.0 (båda inkluderande).
cout< På samma sätt genererar raden nedan ett slumpmässigt tal mellan 1,2 och 3,4
cout<<1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2)));
I vårt efterföljande exempel nedan använder vi slumpmässigt flyt för att generera utdata.
C ++ slumpmässigt nummer mellan 0 och 1
Vi kan använda srand () och rand () -funktionen för att generera slumpmässiga siffror mellan 0 och 1. Observera att vi måste kasta utdata från rand () -funktionen till decimalvärdet antingen float eller double.
Standardreturvärdet för rand () -funktionen, dvs heltal är otillräckligt för att visa slumptal mellan 0 och 1 som är bråk.
C ++ - programmet som anges nedan visar de fem första slumpmässiga siffrorna mellan 0 och 1.
exempel på internet av saker applikationer
#include #include using namespace std; int main() { cout<<'Random numbers generated between 0 and 1:'< Produktion :
Vi ser att programmets output är det slumpmässiga talet mellan 0 och 1 som är bråk.
Om vi inte kastar returvärdet för rand () -funktionen för att flyta eller fördubblas, får vi 0 som slumptalet.
C ++ slumpmässigt nummer mellan 1 och 10
Nästa exempel är att generera slumptal mellan 1 och 10. Följande är C ++ - programmet som genererar slumptal.
Vi kallar srand-funktionen med systemklockan och anropar sedan rand-funktionen med modul 10-operatörer.
#include #include #include using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout<<'Random numbers generated between 1 and 10:'< Produktion:
I ovanstående program genererar vi de första 10 slumpmässiga siffrorna mellan 1 och 10. Observera att varje gång programmet körs kommer det att generera olika siffror på grund av att srand-funktionen anropas.
Vanliga frågor
F # 1) Vad är rubrikfilen för slumpmässig funktion i C ++?
Svar: Funktionerna för att generera slumptal, rand och srand definieras i< cstdlib > rubrik på C ++.
F # 2) Vad är Rand_max i C ++?
Svar: RAND_MAX är en konstant i rubrik som vanligtvis är inställd på värde 32767. Pseudoslumpgenerator (PRNG) genererar slumptal mellan 0 och RAND_MAX.
F # 3) Hur fungerar den slumpmässiga funktionen?
Svar: C ++ stöder två slumpmässiga funktioner, dvs. srand () och rand (). Funktionen srand () utsäde slumptalsgeneratorn som används av rand () -funktionen som genererar slumptalsekvensen beroende på det ursprungliga fröet som tillhandahålls.
F # 4) Hur mår du med tiden?
Svar: Funktionen srand fröer den pseudoslumpgenerator (PRNG) som används av funktionen rand (). Det är en standardpraxis att använda resultatet av ett samtal till tid (0) som utsäde. Den här tidsfunktionen returnerar värdet, ett antal sekunder sedan 00:00 timmar, 1 jan 1970, UTC (nuvarande UNIX-tidsstämpel).
Således förändras värdet på utsäde varje sekund. Följaktligen genereras en ny uppsättning slumpmässiga nummer varje gång srand anropas med tidsfunktion.
Slutsats
Vi har diskuterat slumptalsgenerering i detalj i denna handledning. Programmeringsspråk eller generellt genererar datorer inte slumptal eftersom de är utformade för att ge förutsägbar effekt. Därför måste vi simulera slumpmässighet.
För att simulera slumpmässighet använder vi oss av pseudoslumpgenerator (PRNG) som är inbyggd i C ++. Således kan vi använda de två funktionerna, rand () och srand (), för att generera slumptal i C ++.
Funktionen srand () används för att ge frö för att generera slumptal medan rand () -funktionen genererar nästa slumptal i sekvensen.
=> Leta efter hela C ++ träningsserien här.
Rekommenderad läsning
- C # slumpmässigt nummer och C # slumpmässig stränggenerator med kodexempel
- Pythons huvudfunktionshandledning med praktiska exempel
- Handledning för Unix Pipes: Rör i Unix-programmering
- Rekursion i C ++
- Vänfunktioner i C ++
- Polymorfism i C ++
- Objektorienterad programmering i C ++
- OOP Java: Introduktion till objektorienterad programmering i Java