Pseudozufallszahlen erzeugen z.B. Zahl zwischen a und b

Gast #481449
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
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
> 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
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
> 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.
Gast #481513
Danke Karl, für die Erläuterung! Allerdings habe ich diese Schreibweise 
bereits im Visual Studio 6 immer genutzt. Dort funktionierte das.
#481516
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
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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.