rand() innerhalb eines Inervalls

Macbeth23

Grünschnabel
Hi,

Ich will, dass mir rand() nur Zahlen inerhalb eines Intervalles ausgibt.
ZB. Zahlen von -4 bis 30.

Wie kann man das machen?
 
moin


Z.B.:
Code:
int x, y;

x = rand();
if( x > -5 && x < 31)
     y = x;

Oder:
Code:
x = rand() % 31;
Der zweite Code erzeugt nur Zahlen von 0 bis 30.


mfg
umbrasaxum
 
umbrasaxum hat gesagt.:
moin


Z.B.:
Code:
 int x, y;
 
 x = rand();
 if( x > -5 && x < 31)
      y = x;

Das wird nicht funktionieren, da es sehr lange dauern kann, bis eine Zufallszahl in diesem Intervall kommt, oder?

Aber die 2. Funktioniert gut (komischerweiße hat das bei mir vorher nicht funktioniert... kA was ich flasch gemacht hab.).
Und bei der Möglichkeit kann man sagen, dass bei ierg = rand % i immer eine zahl zwischen 0 und i -1 rauskommt... oder?

Aufjedenfall DANKE für die Hilfe
 
moin


Bei dem zum ersten Code hast du recht.

Und mit dem zum zweiten hast du auch recht.

Man könnte das auch noch so machen:
Code:
x = ( rand() % 35 ) -4;
So hättest du Zahlen von -4 bis 30.


mfg
umbrasaxum
 
So hab es jetzt geschaft...
...scheint zu funktionieren. :)

Die Funktion prüft erst ob das Intervall gültig ist, und gibt dann eine Zahl in diesen Intervall aus (Alle ganzahligen Intervalle erlaubt).

Wens interessiert:
Code:
int Zufallszahl (int iAnfang, int iEnde)
  {
  	int isum=0, iZufall=0, iArt=0;
  
  	if (iEnde <= iAnfang || iEnde > RAND_MAX)
  		return 0;
  
  	//größe des Zahlenintervall
  	isum = iEnde - iAnfang +1; 
  
  	//Zufallszahl	
  	iZufall = rand() % isum;
  
  	//Angleichen ans Intervall
  	iZufall += iAnfang;
  		
  	return iZufall;
  }
 
Zurück