Dead_Rabbit Skrevet 6. april 2004 Del Skrevet 6. april 2004 (endret) Nok en gang nevner jeg at boka mi er litt uoppdatert og den lager et random tall slik: int test = random(6)+1; dette definerer et heltatt i området 1-6; Men etter hver programmkjøring blir resultatet likt og det er jo en grunn til at man velger RANDOM da. Men så har jeg kikket noen andre litt eldre poster hvor det har vært noen random sprøsmål. Jeg har testet denne her og JIPPII den funker. Da er spørsmålet hvordan? int test; //Skjønner jeg faktisk :w00t: srand(time(0)); //Denne skjønner jeg ikke kan noen forklare hvert ord og parantes ? test = rand();//Og denne da, først srand og nå rand()? Setter stor pris på om noen gidder å bruke den tiden det tar å forklare dette... EDIT: Leif... en trofast følgesvenn... Endret 6. april 2004 av zirener Lenke til kommentar
<BøNilzen> Skrevet 6. april 2004 Del Skrevet 6. april 2004 (endret) int test; //Denne skjønte du ja srand(time(0)); //srand betyr at rand() funksjonen skal gi "random" tall basert på time(0) som jeg tror er millisekundet test = rand();//integeren test initialiseres til et random tall mellom ? og ?....prøv heller test = rand(10); som gir et tall mellom 1 og 9 Edit: Nei nå tuller jeg....ikke skriv rand(10) det er jo bare tull. rand()%10 er det jo, altså test = rand()%10; // gir et tall mellom 0 og 9 Edit2: For å bruke time(0) funksjonen må du inkludere <ctime> Endret 6. april 2004 av <BøNilzen> Lenke til kommentar
Dead_Rabbit Skrevet 6. april 2004 Forfatter Del Skrevet 6. april 2004 (endret) Takk for svar, ble litt klokere, men hva har time() og millisekunder med et tilfeldig tall å gjøre?? Hvis du kunne forklare srand(time()) litt bedre så ville det vært fint EDIT: Du leif du leif Endret 6. april 2004 av zirener Lenke til kommentar
moesen Skrevet 6. april 2004 Del Skrevet 6. april 2004 Takk for svar, ble litt klokere, men hva har time() og millisekunder med et tilfeldig tall å gjøre?? Hvis du kunne forklare srand(time()) litt bedre så ville det vært fint EDIT: Du leif du leif Random-tid-funksjonen er vel bare et eksempel på en random funksjon. Hva med å ta noe litt lettere? #include <iostream> using namespace std; int main() { int nr1 = rand()%100; cout << "Det tilfeldige nummeret ble " << nr1 << endl; return(); } Da velger programmet ut et random tall mellom 0 og 100. Lenke til kommentar
Dead_Rabbit Skrevet 6. april 2004 Forfatter Del Skrevet 6. april 2004 (endret) OK, men glemte du ikke å skrive include <ctime>? EDIT: Gikk litt fort dette... EDIT: Fejerner herfra og setter litt lengere ned... Endret 6. april 2004 av zirener Lenke til kommentar
moesen Skrevet 6. april 2004 Del Skrevet 6. april 2004 OK, men glemte du ikke å skrive include <ctime>?EDIT: Gikk litt fort dette... Ehm... Edit2:For å bruke time(0) funksjonen må du inkludere <ctime> Lenke til kommentar
Dead_Rabbit Skrevet 6. april 2004 Forfatter Del Skrevet 6. april 2004 (endret) Åja ehh.. så ikke den jeg EDIT:Men er det noen grunn til at det står % og så f.eks 100? Eller er det bare noe jeg må godta? Endret 6. april 2004 av zirener Lenke til kommentar
moesen Skrevet 6. april 2004 Del Skrevet 6. april 2004 EDIT: Og er det noen grunn til at det står % og så f.eks 100? Eller er det bare noe jeg må godta? rand()%100 //Vil si at random-kommandoen velger et tall mellom 0 og 100 rand() // Velger et tall mellom 0 og RAND_MAX (32767?) Lenke til kommentar
☀ ❄ Skrevet 6. april 2004 Del Skrevet 6. april 2004 srand() står for "seed random". Det betyr at du lager et tilfeldig tall basert på et seed, eller altså et annet tall. Vi bruker time(0), som returnerer antall sekunder siden et eller annet år (1900? 1970?), for å gi srand() forskjellig seed hver gang, og dermed øke sjansene for å få et annet tall. rand() gir et pseudo-tilfeldig tall mellom 0 og RAND_MAX (som ofte er (256^2)/2) % (modulus) betyr "det tallet som er rest når lvalue deles på rvalue". Det er derfor vi får et tall mellom 0 og x-1, fordi x / x = 1 <=> x % x = 0. rand() % 100 gir forresten et tilfeldig tall mellom 0 og 99. Lenke til kommentar
Dead_Rabbit Skrevet 6. april 2004 Forfatter Del Skrevet 6. april 2004 Ok litt dårlig forklart spørsmål, jeg mente egentlig om det er noen grunn til at man setter rand()%100 isteden for å bare sette rand(100), men det er vel kansje noe jeg bare må godta? Det er ikke noe som kan settes inn mellom parantesene? Den random funksjonen som boka tar så er det bare random(100) så jeg syns bare det var litt rart, ikke noe å bry seg om... Lenke til kommentar
☀ ❄ Skrevet 6. april 2004 Del Skrevet 6. april 2004 rand() tar ikke noen argumenter. Grunnen er at den har en interface som er minimal og complete. Man kan begrense rekkevidden ved å bruke modulus, og evt. addisjon, dermed er det ikke nødvendig å ha det som et argument til funksjonen. Lenke til kommentar
Dead_Rabbit Skrevet 6. april 2004 Forfatter Del Skrevet 6. april 2004 (endret) TAKK Myubi, det var det jeg lette etter EDIT:Men takk til deg også moesen Endret 6. april 2004 av zirener Lenke til kommentar
Dead_Rabbit Skrevet 6. april 2004 Forfatter Del Skrevet 6. april 2004 srand() står for "seed random". Det betyr at du lager et tilfeldig tall basert på et seed, eller altså et annet tall. Vi bruker time(0), som returnerer antall sekunder siden et eller annet år (1900? 1970?), for å gi srand() forskjellig seed hver gang, og dermed øke sjansene for å få et annet tall. Et lite tillegspørsmål: Blir det da sånn at hvis jeg tar srand(2002) så får jeg antall sekunder som det er fra år 2002 og til nå? Mulig jeg er litt reg azz Lenke til kommentar
moesen Skrevet 6. april 2004 Del Skrevet 6. april 2004 rand() tar ikke noen argumenter. Grunnen er at den har en interface som er minimal og complete. Man kan begrense rekkevidden ved å bruke modulus, og evt. addisjon, dermed er det ikke nødvendig å ha det som et argument til funksjonen. Men hvordan kan jeg da få et tall annet enn 0? F.eks rand()30%100; Får jeg da et random tall mellom 30 og 100? Hvordan kan jeg lage et program som skriver ut et random tall mellom "et-tall" fra bruker og "et-annet-tall" fra bruker? #include <iostream> using namespace std; int main() { int tall1; int tall2; cout << "Skriv inn ditt første tall: "; cin >> tall1; cout << "Skriv inn ditt andre tall: "; cin >> tall2; cout << "Random tall er: " << rand()tall1%tall2 <<; /* Det er dette jeg vil vite....*/ return(); } Lenke til kommentar
☀ ❄ Skrevet 6. april 2004 Del Skrevet 6. april 2004 Nei. srand() lager et tilfeldig tall basert på et annet tall. Hvordan det skjer er en implementasjonsdetalj som vi brukere er lykkelige uvitende om -- det er halve poenget med "information hiding". Det er dessuten time() som returnerer antall sekunder. Jeg tror kanskje det er fra 1900 (det er det tm_year bruker), men jeg vet ikke sikkert. Dokumentasjon gir forresten svar på slike spørsmål. Søk på google etter f.eks. c standard library documentation Lenke til kommentar
Dead_Rabbit Skrevet 6. april 2004 Forfatter Del Skrevet 6. april 2004 Skal søke litt nå Lenke til kommentar
☀ ❄ Skrevet 6. april 2004 Del Skrevet 6. april 2004 Man kan begrense rekkevidden ved å bruke modulus, og evt. addisjon int between_thirty_and_hundred = rand() % (100-30); between_thirty_and_hundred += 30; "We are no substitute for your brain." Lenke til kommentar
<BøNilzen> Skrevet 6. april 2004 Del Skrevet 6. april 2004 (endret) for å få mellom 30 og hundre må du bel bruke int between_30_and_100 = rand()% (100-30) + 30 Eller hva? Edit: Tosken meg... Kanskje en ide' å lese hele posten før man klager... Du gjorde jo samme greia med between_thirty_and_hundred += 30; Endret 6. april 2004 av <BøNilzen> Lenke til kommentar
søppel Skrevet 7. april 2004 Del Skrevet 7. april 2004 (endret) http://cppreference.com/stdother_details.html#rand http://cppreference.com/stdother_details.html#srand http://cppreference.com/stddate_details.html#time ..o.s.v.. #include <iostream> #include <cstdlib> #include <ctime> template<typename T> class Random { public: Random(T min_, T max_) :_min(min_), _max(max_) { srand(time(0)); srand(time(0)); _delta = RAND_MAX / (_max - _min); } T operator()(T min_, T max_) { _min = min_; _max = max_; _delta = RAND_MAX / (_max - _min); return(operator()()); } T operator()() { return((rand() / _delta) + _min); } private: T _min, _max; T _delta; }; // class Random using namespace std; int main() { Random<float> randFloat(-10, -20); cerr << "5 tilfeldige flytetall mellom -10 og -20: "; for(int i = 0; i < 5; i++) { cerr << fixed << randFloat() << " "; } cerr << endl; randFloat(-100, 100); cerr << "5 tilfeldige flytetall mellom -100 og 100: "; for(int i = 0; i < 5; i++) { cerr << fixed << randFloat() << " "; } cerr << endl; Random<int> randInt(20000, 10000); cerr << "5 tilfeldige heltall mellom 20000 og 10000: "; for(int i = 0; i < 5; i++) { cerr << fixed << randInt() << " "; } cerr << endl; randInt(-10, 10); cerr << "5 tilfeldige heltall mellom -10 og 10: "; for(int i = 0; i < 5; i++) { cerr << fixed << randInt() << " "; } cerr << endl; return(0); } "Jeg har bein å gå på, hvordan kan jeg da gå til butikken?" ..no offence, men fytti-å-du-dæven å folk spør spm. som egentlig bør være åpenbare v.h.a. et kjappt oppslag i bok og/eller andre steder.. heh Endret 7. april 2004 av søppel Lenke til kommentar
Dead_Rabbit Skrevet 7. april 2004 Forfatter Del Skrevet 7. april 2004 Fine linker det der Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå