mikrocontroller.net

Forum: PC-Programmierung Zufallszahlen in einem bestimmten Bereich erzeugen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von helpme91 (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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. (achs)


Bewertung
1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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: robitzki.de) (torstenrobitzki)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
int zahl = (rand() % (max - min +1)) + min;

von pumuggl (Gast)


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

von Teo D. (teoderix)


Bewertung
-2 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
In der C-Standard-Library nicht.

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

von A. S. (achs)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (achs)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.