Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: FAQ - C (C89, C99 und C11) ::  random mal wieder     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Hurrican
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.07.2000
Beiträge: 483
Beitrag Hurrican Mitglied 15: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
Beitrag RenéG Mitglied 22: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
Beitrag Hurrican Mitglied 08: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




Beitrag class CMarcus Unregistrierter 09: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
Beitrag RenéG Mitglied 09: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
Beitrag Hurrican Mitglied 09: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
Beitrag Gandalf Mitglied 10: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
Beitrag Hurrican Mitglied 12: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
Beitrag Hurrican Mitglied 12: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
Beitrag Hurrican Mitglied 12: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




Beitrag class CMarcus Unregistrierter 12: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
Beitrag Hurrican Mitglied 13: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
Beitrag Gandalf Mitglied 15: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.
C++ Forum :: FAQ - C (C89, C99 und C11) ::  random mal wieder   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.