Forum: PC-Programmierung Zufallszahlen in einem bestimmten Bereich erzeugen


von helpme91 (Gast)


Lesenswert?

Hallo zusammen,

ich versuche gerade in C eine Zufallszahl mit rand() zu erzeugen.
Im netz steht, dass man das mit: "int zahl = rand()%(max-min)+min;"
machen kann.

Es kommt eine Zufallszahl heraus, die ist aber im 6 stelligen Bereich.

Weiß jemand von euch wie das funktioniert?

Ich möchte z.B. eine Zahl zwischen: 100 und 200 erzeugen.


SG

von Dirk B. (dirkb2)


Lesenswert?

helpme91 schrieb:
> zahl = rand()%(max-min)+min;

Mit min = 100 und max = 201

helpme91 schrieb:
> Es kommt eine Zufallszahl heraus, die ist aber im 6 stelligen Bereich.

Dann machst du etwas falsch.

Da du aber nicht zeigst was du machst und wie du feststellst, dass die 
Zahl 6-stellig ist, kann die keiner sagen, was falsch ist.

von Georg (Gast)


Lesenswert?

helpme91 schrieb:
> Ich möchte z.B. eine Zahl zwischen: 100 und 200 erzeugen

Logisch wäre es, 100 als min und 200 als max zu nehmen - aber das 
probiere ich jetzt nicht extra aus.

Georg

von A. S. (Gast)


Lesenswert?

Vermutlich sind min und max Funktionen und alle Warnungen aus.

Setze die Werte ein und kopiere den Code + Warnungen + Output hier hin

von Mathematiker vom Dienst (Gast)


Lesenswert?

Für solche Anwendungen gibt es in MATLAB die "random numbers toolbox". 
Lässt sich zusätzlich installieren und erzeugt praktisch jede 
Zufallszahl die man sich nur denken kann - ganz zufällig!  Oft tauchen 
sie sogar plötzlich und unerwartet auf dem Bildschirm aus.

Alternative:

Du erinnerst dich an MATHE Klasse 5 und nutzt die Multiplikation sowie 
Addition:

1: Runterskalieren
2: Offset draufrechnen

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

helpme91 schrieb:
> Es kommt eine Zufallszahl heraus, die ist aber im 6 stelligen Bereich.

Wahrscheinlich sind min und max vertauscht.

von Teo D. (teoderix)


Lesenswert?

int zahl = (rand() % (max - min +1)) + min;

von pumuggl (Gast)


Lesenswert?

Es bleibt das Problem, dass die per modulo erzeugten Zufallszahlen
u.U. nicht mehr gleichverteilt sind.

von Teo D. (teoderix)


Lesenswert?

pumuggl schrieb:
> Es bleibt das Problem, dass die per modulo erzeugten Zufallszahlen
> u.U. nicht mehr gleichverteilt sind.

Nein. Ist aber eh nur ein pseudo Zufall und der ist sowieso nicht 
wirklich gleich verteilt.

von helpme91 (Gast)


Lesenswert?

Danke, hat funktioniert.

Eine Frage habe ich da noch, ich hab eine structur mit mit 4 members 
erstellt. In dieser structur habe ich ein struct array, befüllt ist es 
schon mit zahlen.

Mein Problem ist, das ich nun von jeden member den größten wert 
ermitteln muss und ausgeben muss.

Gibt es da eine Funktion in c?

SG

von Dirk B. (dirkb2)


Lesenswert?

In der C-Standard-Library nicht.

Selber schreiben geht natürlich in C, ist auch nicht schwer.

von A. S. (Gast)


Lesenswert?

helpme91 schrieb:
> Mein Problem ist, das ich nun von jeden member den größten wert
> ermitteln muss und ausgeben muss.
>
> Gibt es da eine Funktion in c?

Im einfachsten Fall ist das eine Schleife mit 4 ifs (+2 Variablen). Du 
wirst hier aber auch viel bessere Versionen bekommen, die mit Boost und 
Templates 3 Bildschirme füllen um besser, schneller, sicherer und 
lesbarer zu sein.

von Sven B. (scummos)


Lesenswert?

Teo D. schrieb:
> pumuggl schrieb:
>> Es bleibt das Problem, dass die per modulo erzeugten Zufallszahlen
>> u.U. nicht mehr gleichverteilt sind.
>
> Nein. Ist aber eh nur ein pseudo Zufall und der ist sowieso nicht
> wirklich gleich verteilt.

Ist Quatsch. Natürlich ist vernünftiger Pseudozufall gleichverteilt. 
rand() % x ist es nicht, außer x ist eine Zweierpotenz (dann werden 
einfach Bits weggeschnitten).

von A. S. (Gast)


Lesenswert?

Sven B. schrieb:
> rand() % x ist es nicht, außer x ist eine Zweierpotenz (dann werden
> einfach Bits weggeschnitten).

Eine man dort auch die Kirche im Dorf lassen sollte: bei %101 und 
RAND-MAX 32767 kommen 0..43 häufiger vor als 44..100. also nicht je mit 
0.990% Wahrscheinlichkeit, sondern die einen mit 0.993% und die anderen 
Mi 0.987% also einmal mehr nach 324 Malen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.