Gå til innhold

Anbefalte innlegg

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 :w00t: 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 av zirener
Lenke til kommentar
Videoannonse
Annonse

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 av <BøNilzen>
Lenke til kommentar
Takk for svar, ble litt klokere, men hva har time() og millisekunder med et tilfeldig tall å gjøre?? :hmm:

Hvis du kunne forklare srand(time()) litt bedre så ville det vært fint :yes:

 

EDIT: Du leif du leif :nei:

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

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

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
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
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

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

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; :blush:

Endret av <BøNilzen>
Lenke til kommentar

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 av søppel
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...