Pseudozufallszahlen erzeugen z.B. Zahl zwischen a und b

Gast #481449
Lesenswert?

Hi,

Hat jemand von euch schonmal eine Funktion gebastelt, die eine 
Zufallszahl aus einer Grenze zurückgibt?

Also ich meine eine Funktion in die man z.B. die Zahl 20 und die Zahl 
4000 reinsteckt und man bekommt eine (Pseudo-)zufallszahl zwischen 20 
und 4000 zurück.


MfG Krömer
Gast #481499
Lesenswert?

ich weiß leider nicht wie das geht. ich kenne nur srand() und rand(). 
srand() findet der compiler nicht. also steht mir nur rand() zur 
verfügung. Ein Tip wo man den Befehl in der Hilfe findet würde schon 
reichen.
#481503
Lesenswert?

> zufallszahl = minimal + rand() * ( maximal - minimal )

Fast.

rand() liefert keine Zahlen zwischen 0 und 1.
rand() liefert integer Zahlen zwischen 0 und RAND_MAX.

Ist zwar etwas verpöhnt, aber was solls:

zufallszahl = minimal + rand() % ( maximal - minimal );

Wobei der Bereich maximal - minimal natürlich um einiges
kleiner als RAND_MAX sein sollte.


Gast #481507
Lesenswert?

1
uint16_t randomrange(uint16_t von, uint16_t bis) {
2
  //Zufallszahlen //srand();
3
  randomrange = von + rand() % ( bis - von );  // <== Zeile 16
4
  //randomrange = ( rand() * (bis-von) ) + von;
5
};

Die Fehlermeldung lautet
"../test03.c:16: error: invalid lvalue in assignment"

Was mache ich denn da falsch.

In der auskommentierten Zeile darunter lautet der Fehler genauso.

BTW: Was bedeutet eigentlich das %?


MfG,

  Krömer
#481509
Lesenswert?

> uint16_t randomrange(uint16_t von, uint16_t bis) {
>   //Zufallszahlen //srand();
>   randomrange = von + rand() % ( bis - von );  // <== Zeile 16
>   //randomrange = ( rand() * (bis-von) ) + von;
> };
>
> Die Fehlermeldung lautet
> "../test03.c:16: error: invalid lvalue in assignment"
>
> Was mache ich denn da falsch.

Du programmierst Pascal.
In Pascal gibt man aus einer Funktion einen Wert zurück,
indem man ihn einer Pseudovariablen mit dem Namen der Funktion
zuweist. In C schreibt man einfach

uint16_t randomrange(uint16_t von, uint16_t bis) {
   return von + rand() % ( bis - von );
}



> "../test03.c:16: error: invalid lvalue in assignment"

'assignment' sollte klar sein. Das ist eine 'Zuweisung'
'lvalue' steht für 'left hand value', also den linken
Teil einer Zuweisung:

   lvalue = rvalue;

Und dieser lvalue ist invalid, also ungültig.
#481516
Lesenswert?

humpfkrömekröm wrote:
> Danke Karl, für die Erläuterung! Allerdings habe ich diese Schreibweise
> bereits im Visual Studio 6 immer genutzt. Dort funktionierte das.

Möglich (Wusste gar nicht, dass es von Microsoft auch
einen Pascal Compiler gibt :-).

Aber nicht in C.

(Erzähl mir nichts. Ich hab 10 Jahr mit VS6.0 C und C++
programmiert)
#481588
Lesenswert?

humpfkrömekröm wrote:
>> rand() liefert integer Zahlen zwischen 0 und RAND_MAX.
>
> @ Karl:
>
> Wieviel Bit breit ist hier eigentlich das RAND_MAX?

RAND_MAX ist ein Makro und als solches ein Zahlenwert
mit Datentyp int.

Die Zahlwerte variieren, meistens ist es aber 32767.
Wie schon gesagt: Gibs einfach mal aus, dann weist du's
ganz genau.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren