Archief - [C++] simpele 'random' applicatie

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Blukkie

Legacy Member
Een goede avond allemaal,

ik zit met een klein probleempje.
Ik heb de volgende simpele applicatie gemaakt, waarbij een denkbeeldige munt wordt gegooid. Wanneer de munt op munt valt, gaat er -1 van het huidige getal af. Bij kop is dat dus +1.

Maar wanneer ik de applicatie run, is er altijd een reeks van of +1 of -1. Nooit eens om en om. Hij kan dus van 0 naar 1000 gaan en dan van 1000 helemaal naar 0 zonder dat er ook maar eens +1 komt.

Hij ziet er als het volgt uit:
Code:
//BACK TO ZERO
// "Toss" a coin.
//
// Tails -1
// Heads +1
//
// 0, 1, 2, 1, 0 for example

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
	int number = 0;
	int tries = 0;
	
	bool goToss = true;
	
	while(goToss)
	{
		srand(time(0));
		int randomNumber = rand();
		int side = (randomNumber % 2) + 1;
		
		switch(side)
		{
			case 1: // tails
				number--;
			break;
			
			case 2: // heads
				number++;
			break;

			default:
			break;
		}
		
		tries++;
		
		cout << "on try " << tries << " the number is: " << number << endl;
		
		if(number == 0)
		{
			goToss = false;
		}
	}
	
	if(!goToss)
	{
		cout << "The coin flipped a total of " << tries << " times to reach 0 again." << endl;
		system("PAUSE");
	}
};

Weet iemand de oorzaak en/of een mogelijke "fix"?
Ik denk dat het door rand(time) komt, maar ik weet zo snel niet een oplossing hier op.

Alvast bedankt.

MAXXUR

Legacy Member
is het niet zo (schiet mij niet dood) dat rand() een getal genereert, floating, tussen 0 en heel groot.

Met andere woorden gaat gij rand() mod 1 willen doen, en dat afronden:

Code:
int random = 1;
//random 0 of 1 genereren
int teken = (int) (rand() % 1 + 0.5);
if (!teken)
  random = -random;
som += random;

edit: heb ff uw code iets beter bekeken, en uw manier zou wel OK moeten zijn
wa die srand(time(0)) doet weet ik zelfs niet :p

Kemblin

Legacy Member
ziet er wel ok uit maar ik zou die srand(time(0)); wel buiten u while zetten. Kan normaal ni echt veel kwaad maar u seed moet ge maar 1 keer zetten, das genoeg.

cG`

Legacy Member
als je "srand(time(0));" buiten de while zet is het blijkbaar opgelost.

Omdat die time(0) in de while loop stond roep je verschillende keren de srand-functie op met dezelfde waarde als parameter (aangezien je pc vele functie oproepen per seconde kan verwerken). Elke keer als srand met dezelfde waarde opgeroepen wordt begint de bijhorende random reeks opnieuw denk ik, waardoor er dus een hele tijd +1 of -1 gebeurt.

Kemblin

Legacy Member
cG` zei:
als je "srand(time(0));" buiten de while zet is het blijkbaar opgelost.

Omdat die time(0) in de while loop stond roep je verschillende keren de srand-functie op met dezelfde waarde als parameter (aangezien je pc vele functie oproepen per seconde kan verwerken). Elke keer als srand met dezelfde waarde opgeroepen wordt begint de bijhorende random reeks opnieuw denk ik, waardoor er dus een hele tijd +1 of -1 gebeurt.

idd goe gezien, met dezelfde seed zal ook steeds dezelfde reeks gegenereerd worden natuurlijk, doh :)

Blukkie

Legacy Member
Ik heb de rand() buiten de While functie gezet en dit werkt inderdaad!
Bedankt!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan