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
Naja, wenn du ein Zufallszahl zwischen 0 und 1 erzeugen kannst, kannst du die auch mit 3980 multiplizieren und mit 20 addieren...
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.
zufallszahl = minimal + rand() * ( maximal - minimal ) dann solltest du eine zufallszahl zwischen minimal und maximal erhalten...theoretisch
> 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.
> 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
man gebe 'man 3 rand' ein und erhalte alle informationen...vorrausgesetzt man ist in besitz eines *nix systems
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
> 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.
Danke Karl, für die Erläuterung! Allerdings habe ich diese Schreibweise bereits im Visual Studio 6 immer genutzt. Dort funktionierte das.
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)
> rand() liefert integer Zahlen zwischen 0 und RAND_MAX.
@ Karl:
Wieviel Bit breit ist hier eigentlich das RAND_MAX?
Ja gib's halt mal aus... Meistens so breit wie ein "normales" Integer auf dem System.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.