Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 16:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Zufallszahl in einem Bereich

Discussion on Zufallszahl in einem Bereich within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
_Roman_'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,620
Received Thanks: 237
Zufallszahl in einem Bereich

Hey ich habe das folgende Problem:

Ich möchte gerne ein kleines Spiel schreiben, wo man Zahlen raten muss. Das soll zum Beispiel in nem Bereich von 1-100 sein. Ich poste einfach mal einen kleinen Ausschnitt aus dem Spiel.

Code:
				//Spiel
				Leerzeile();
					SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
					srand ((unsigned)time(NULL));

					std::cout << "Zahl zwischen 1 und 100: ";
					std::cin >> iZahl; 
				Leerzeile();

					int iZufallszahl = 1 + (int) (3.0 * (rand() / (RAND_MAX + 1.0)));
					if (iZahl == iZufallszahl)
					{
						std::cout << "Du hast es geschafft!" << std::endl;
						std::cout << "Deine ausgesuchte Zahl " << iZahl << " hat den selben Wert wie die Zufallszahl!" << std::endl;
						Leerzeile();
						std::cout << "Fuer das naechste Level bitte Enter druecken" << std::endl;
						std::cout << "Nochmal? (j/n) oder in das Hauptmenue (h)." << std::endl;
						std::cout << "Zum Schliessen ein anderes Zeichen eingeben" << std::endl;

					}
Einmal möchte ich wissen, ob es eine bessere Möglichkeit gibt, einen Bereich abzudecken. Hab das aus dem Internet und gelesen, dass man keine Modulo-Division benutzen sollte. Dann möchte ich wissen, warum sich die Meldung, wenn ich es geschafft habe, direkt wieder schließt...

Edit: Das letztere Problem hat sich erledigt. Hab das std::cin >> .. vergessen
_Roman_ is offline  
Old 04/02/2013, 15:15   #2
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Es würde sich anbieten. (default_random_engine sollte hier reichen)
Und zur Funktion Leerzeile()...
Wenn du unbedingt eine eigene Definition von einer neuen Zeile willst,
könntest du es auch folgendermaßen lösen:
Code:
#define Leerzeile std::cout << std::endl << std::endl;
//.....
//.....
std::cout << "foo";
Leerzeile;
std::cout << "bar";
.SkyneT. is offline  
Thanks
1 User
Old 04/02/2013, 15:22   #3
 
_Roman_'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,620
Received Thanks: 237
Das mit der Leerzeile hab ich schon gemacht Ist nur wo anders definiert mit

std::cout << "" << std::endl;

Edit: Dein Link da geht nicht so richtig bei mir. Hab es genau so gemacht, aber welchen Header soll ich einbinden?
Edit2: oh bin so blöd
Edit3: finde die methode nicht so gut. hab die grad mal getestet mit ner range von 1-5 und als ich einmal 5 raushatte, ging nurnoch 5
_Roman_ is offline  
Old 04/02/2013, 16:09   #4
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Code:
#include <iostream>
#include <chrono>
#include <random>

template<typename Gen>
int rand_int(Gen& gen, int min, int max)
{
	std::uniform_int_distribution<int> dist(min, max);
	return dist(gen);
}

int main()
{
	std::default_random_engine re;
	auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
	re.seed(seed);

	for(int i = 0; i < 10; ++i)
	{
		int random = rand_int(re, 0, 5);
		// do sth with random...
		// ...
		std::cout << random << std::endl;
	}
}
Ähnliche Beispiele lassen sich im Forum hier glaub ne Menge finden, wenn du genauer suchen würdest.
Schlüsselbein is offline  
Thanks
1 User
Old 04/02/2013, 23:44   #5
 
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
Modulare Arithmetik, einfach mal google benutzen.
Cheers!
yihaaa is offline  
Thanks
1 User
Old 04/03/2013, 07:10   #6

 
Delinquenz's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
Quote:
Ähnliche Beispiele lassen sich im Forum hier glaub ne Menge finden, wenn du genauer suchen würdest.
Ist es in seinem Beispiel nicht ausreichend, wenn man die Engine in der Funktion als static deklariert?

Dann muss man, sofern man das ganze dann mehrmals aufrufen will, nicht immer (sofern man jetzt in verschiedenen Gültigkeitsbereichen ist) eine neue Engine deklarieren.

(ist jetzt eher eine Verständnisfrage, nicht unbedingt eine Verbesserung)

Quote:
Modulare Arithmetik, einfach mal google benutzen.
Er hat zwar in seinem Beispiel Division benutzt, aber im Text wollte er eine Alternative zum Modulo haben, oder habe ich das falsch verstanden?
Delinquenz is offline  
Thanks
1 User
Old 04/03/2013, 10:03   #7
 
_Roman_'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,620
Received Thanks: 237
Naja ich weiß halt nicht, ob ich das Modulo benutzen soll, was hält ihr denn davon. Hab ja gelesen, dass man es nicht benutzen soll bei sowas, den Grund kenne ich nicht mehr
_Roman_ is offline  
Old 04/03/2013, 10:11   #8
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
wüsste so auf anhieb keinen grund, warum man nicht modulo benutzen sollte.

Theoretisch gibt es evtl. winzige abweichungen die aber praktisch wohl kaum relevant sind.
Dr. Coxxy is offline  
Thanks
1 User
Old 04/03/2013, 10:22   #9
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Quote:
Ist es in seinem Beispiel nicht ausreichend, wenn man die Engine in der Funktion als static deklariert?
Ausreichend schon, ja. Da würde ich es aber eher vorziehen, die Engine global zu definieren. Static Variablen würden die Kapselung hier halt aufbrechen. Gleiches auch für globale. Die Funktion sollte m.E. "dumm" genug sein um nicht zu entscheiden, welcher Generator der beste für den Nutzer ist. Das sollte der Caller selbst entscheiden. Packt man das noch in ne RandomGenerator-Klasse oder, dann keine Frage - kann man ja auch schonmal n Default festlegen.

Wie gesagt, ist nur Ansichtssache. Es gibt sicherlich auch den ein oder anderen Grund für ne statische Variable in der Funktion.
Schlüsselbein is offline  
Thanks
1 User
Old 04/03/2013, 17:46   #10
 
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
Es gibt kein Grund modulo nicht zu benutzen! Es ist die einfachste und sicherste Methode Zahlen in einem Bereich zu bekommen.
Cheers!
yihaaa is offline  
Thanks
1 User
Old 04/03/2013, 17:54   #11
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Doch den Grund gibt es: Er benutzt C++ und deshalb lässt man auch die Finger von dem Modulo-gespiele. Nicht umsonst gibts den <random> header.
Schlüsselbein is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
(! (zufallszahl 1L)) ???
08/07/2012 - C/C++ - 5 Replies
Hallo epvpler^^ Hab mal ne kleine Frage und wollt mich jetzt nicht irgendwo anders anmelden und deshalb frag ich mal kurz hier: Und zwar versteh ich diese Funktion nicht: int get_ungerade() { int zufallszahl;
Zufallszahl warscheinlichkeitsbereich beeinflussen.
07/30/2010 - General Coding - 2 Replies
Gehen wir davon aus ich möchte eine Zufallszahl generieren welche innerhalb einer gewissen Zahlenmenge liegt. Innerhalb dieser Zahlenmenge soll aber eine Zahlenmenge sein welche doppelt so häufig auftritt wie die Restmenge, wie bewerkstellige ich dies? Also ich erschaffe eine Zufallszahl zwischen 1 und 4 var x; x = Random(1, 4); So.
Auf der Suche nach einem Profi im Bereich "ASM".
01/10/2010 - General Coding - 9 Replies
Hallo, ich bin auf der Suche nach jemanden, der mir einen kleinen ASM-Code in für mich verständliches C/C++ übersetzt. Ich habe mich eigentlich noch nie mit ASM beschäftigt. Mich aber jetzt an ASM zu setzen wäre auch nicht der richtige Weg. Wäre super, wenn sich jemand bei mir meldet. Und bitte keine Amateure. :-) Liebe Grüße, hijax



All times are GMT +2. The time now is 16:40.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.