Forum: Compiler & IDEs Pseudozufallszahlen erzeugen z.B. Zahl zwischen a und b


von humpfkrömekröm (Gast)


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

von Jorge (Gast)


Lesenswert?


von Rahul, der Trollige (Gast)


Lesenswert?

Naja, wenn du ein Zufallszahl zwischen 0 und 1 erzeugen kannst, kannst 
du die auch mit 3980 multiplizieren und mit 20 addieren...

von humpfkrömekröm (Gast)


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.

von Snake (Gast)


Lesenswert?

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

dann solltest du eine zufallszahl zwischen minimal und maximal 
erhalten...theoretisch

von Karl H. (kbuchegg)


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.



von Karl H. (kbuchegg)


Lesenswert?

> Ein Tip wo man den Befehl in der Hilfe findet würde schon
> reichen.

rand() ist eine Standard-C Funktion.
Du kennst Google?  http://www.google.com

von Snake (Gast)


Lesenswert?

man gebe 'man 3 rand' ein und erhalte alle 
informationen...vorrausgesetzt man ist in besitz eines *nix systems

von humpfkrömekröm (Gast)


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

von Karl H. (kbuchegg)


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.

von humpfkrömekröm (Gast)


Lesenswert?

Danke Karl, für die Erläuterung! Allerdings habe ich diese Schreibweise 
bereits im Visual Studio 6 immer genutzt. Dort funktionierte das.

von Karl H. (kbuchegg)


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)

von humpfkrömekröm (Gast)


Lesenswert?

> rand() liefert integer Zahlen zwischen 0 und RAND_MAX.

@ Karl:

Wieviel Bit breit ist hier eigentlich das RAND_MAX?

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Ja gib's halt mal aus... Meistens so breit wie ein "normales" Integer 
auf dem System.

von Karl H. (kbuchegg)


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.

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.