| Autor |
Nachricht |
Hurrican
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.07.2000
Beiträge: 483
|
Hurrican Mitglied
16:49:00 04.09.2000 Titel: |
random mal wieder |
Zitieren |
ich weiß daß das schon recht oft hier gefragt wurde aber daraus werde ich nciht schlau.
also ich brauche zufallszahlen die immer in fünfer schritten gehn und nicht kleiner als 10 und nicht größer als 410 sind.
ok danke und wenn noch fragen sind fragt nur
THX Hurrican
------------------
!!!Meine HP!!! |
|
|
|
 |
Werbeunterbrechung
|
|
 |
RenéG
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.06.2000
Beiträge: 4357
|
RenéG Mitglied
23:21:00 04.09.2000 Titel: |
|
Zitieren |
Ich versteh noch nicht, wo Dein Problem damit ist.
Also Zufallszahlen der Funktion rand() gehen von 0 bis RAND_MAX. Dieser Bereich soll auf [10,410] eingeschränkt werden. Von diesem Bereich subrahiere ich 10, um den gleichen Anfangswert für beide Bereiche zu bekommen !
=>
[0,RAND_MAX] -> [0,400]
Ersteren Bereich schränken wir ein auf [0,1], indem wir durch den Maximalwert dividieren. Danach muß mit dem Maximalwert des 2. Bereiches Multipliziert werden.
Definiere v als Random-Value aus erster Menge, v' als Ergebnis aus der 2. Menge
=> v' = v/RAND_MAX*400
Für die Schrittweite fünf muß die 400 in 5er-Schritte zerlegt werden => 400 = 80*5
=> v' = (v/RAND_MAX*80)*5
Um jetzt allerdings die Zwischenwerte loszuwerden, die halt zwischen 0 und 5, 5 und 10, 10 und 15 u.s.w. liegen, rechnen wir bloß mit dem Integerteil von (v/RAND_MAX*80).
=> v' =(int)((double)v*80/RAND_MAX)*5
Und jetzt müssen wir wieder die 10 addieren, die wir vorhin subtrahiert haben.
Das Ergebnis sieht dann folgendermaßen aus:
v' =(int)((double)v*80/RAND_MAX)*5 + 10;
Genügt das als Antwort auf Deine Frage ??
Gruß
René |
|
|
|
 |
Hurrican
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.07.2000
Beiträge: 483
|
Hurrican Mitglied
09:42:00 05.09.2000 Titel: |
|
Zitieren |
ok jetzt is noch mein problem das der bereich nicht von 0-400 geht
im konsturtor
{
rand(400);
}
void CSnakeDlg::random ( )
//Zufallszahlen werden erzeugt
{
int v1=0;
int v=rand();
v1=(int)((double)v*80/400)*5 + 10;
}
[Diese Nachricht wurde von Hurrican am 05-09-2000 editiert.] |
|
|
|
 |
class CMarcus
Unregistrierter
|
class CMarcus Unregistrierter
10:00:00 05.09.2000 Titel: |
|
Zitieren |
auf daß der Sturm über Dich komme... wozu glaubst Du addiert er am Ende ein "+10"??? Damit man vom Bereich 0..400 auf den Bereich 10..410 kommt!
------------------
Viele Grüße
Marc++us
Besucht die C/C++-Ecke
http://www.c-plusplus.de |
|
|
|
 |
RenéG
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.06.2000
Beiträge: 4357
|
RenéG Mitglied
10:15:00 05.09.2000 Titel: |
|
Zitieren |
Also Hurrican, wenn Du nicht einmal richtig abschreiben kannst, tut es mir schon leid !!
1. Wozu im Konstruktor ein rand(400), der Befehl rand() hat keine Parameter !!!
2. Schau Dir mal Deine Formel für die Berechnung an und dann meine, falls Du nach genauerem Betrachten nicht den Unterschied siehst, solltest Du Dir mal eine Brille zulegen !! |
|
|
|
 |
Hurrican
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.07.2000
Beiträge: 483
|
Hurrican Mitglied
10:46:00 05.09.2000 Titel: |
|
Zitieren |
ok erstmal sorry rené ich meinte srand(400); im konstuktor (und ich trag ne brille)
marcus ich bekomme werte von 12000 und höher aber schon in fünfer schritten
------------------
!!!Meine HP!!!
[Diese Nachricht wurde von Hurrican am 05-09-2000 editiert.] |
|
|
|
 |
Gandalf
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.07.2000
Beiträge: 273
|
Gandalf Mitglied
11:09:00 05.09.2000 Titel: |
|
Zitieren |
Vergleich einfach die Formel von Rene mit deiner Formel!
ReneG: v' =(int)((double)v*80/RAND_MAX)*5 + 10;
Hurrican: v1=(int)((double)v*80/400)*5 + 10;
Nun, fällt dir was auf?
(Ich meine jetzt nicht, dass du v1 anstatt v' verwendet hast) |
|
|
|
 |
Hurrican
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.07.2000
Beiträge: 483
|
Hurrican Mitglied
13:05:00 05.09.2000 Titel: |
|
Zitieren |
RAND_MAX is doch nur ein variable die ich mit einem wert füllen muß oder???
z.B. 400 is das denn nicht das gleiche?
------------------
!!!Meine HP!!! |
|
|
|
 |
Hurrican
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.07.2000
Beiträge: 483
|
Hurrican Mitglied
13:07:00 05.09.2000 Titel: |
|
Zitieren |
OK OK OK jetzt hab ichs war mein fehler *schäm*
------------------
!!!Meine HP!!! |
|
|
|
 |
Hurrican
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.07.2000
Beiträge: 483
|
Hurrican Mitglied
13:25:00 05.09.2000 Titel: |
|
Zitieren |
ok noch ne frage [img]http://www.c-plusplus.de/ubb/ubb/biggrin.gif[/img]
da ich das zweimal nacheinander machen muß. wie bekomme ich daraus zwei so unterschiedliche zahlen wie nur möglich
------------------
!!!Meine HP!!!
[Diese Nachricht wurde von Hurrican am 05-09-2000 editiert.] |
|
|
|
 |
class CMarcus
Unregistrierter
|
class CMarcus Unregistrierter
13:53:00 05.09.2000 Titel: |
|
Zitieren |
naja, einfach zweimal hintereinander aufrufen... das was Du forderst wird durch den Begriff "Zufallszahl" schon weitgehend erfüllt.
------------------
Viele Grüße
Marc++us
Besucht die C/C++-Ecke
http://www.c-plusplus.de |
|
|
|
 |
Hurrican
Mitglied
Benutzerprofil
Anmeldungsdatum: 10.07.2000
Beiträge: 483
|
Hurrican Mitglied
14:50:00 05.09.2000 Titel: |
|
Zitieren |
nein geht nciht dann bekomme ich IMMER die selben zahlen
------------------
!!!Meine HP!!! |
|
|
|
 |
Gandalf
Mitglied
Benutzerprofil
Anmeldungsdatum: 17.07.2000
Beiträge: 273
|
Gandalf Mitglied
16:25:00 05.09.2000 Titel: |
|
Zitieren |
Vermutlich hast du srand mit einem festen Werd aufgerufen. Bevor du rand das erste mal aufrufst, muss die Funktion srand mit einem zufälligen Wert (z.B. der Systemzeit) aufgerufen werden. Näheres findest du bestimmt in der Doku zu rand /srand. |
|
|
|
 |