PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufallsgenerator



erni55
12.01.2008, 09:13
Hallo,
ich hätte da mal eine Frage:
Kann man fuer den ASURO ein Programm mit einem Zufallsgenerator schreiben, ähnlich der "randomize"-Funktion?
z.B. dass er eine Zahl zwischen eins und drei wählt und wenn eins kommt leuchtet die Status-LED rot, bei zwei gruen etc.?
Wär schön wenn ihr mir weiterhelfen könntet!
Ich sag schon einmal danke im voraus!
lg

Arexx-Henk
12.01.2008, 09:37
Hallo,

mann sollte zufugen:(einbinden)

#include <stdlib.h>

und mann nutzt dann etwas wie:

unsigned int r = random();

in 'r' befindet sich jetzt ein willkurlichen Wert.

siehe z.B.

http://www.cs.cf.ac.uk/Dave/C/node16.html

Gruss,

Henk

erni55
12.01.2008, 12:43
Danke, werd es gleich mal ausprobieren!
lg

robo.fr
12.01.2008, 12:48
Oder so (http://www.roboterclub-freiburg.de/asuro/zufall/zufall.html), kostet weniger Speicher.

erni55
12.01.2008, 13:19
Ich brauch eh nur wenig Speicher.
Aber wie muss ich random definieren wenn ich wirklich nur ein paar Zufallswerte brauche...
wie
.
.
.
if(r==1)
{
BackLED(ON,OFF);
}
if(r==2)
{
BackLED(OFF,ON);
}
if(r==3)
{
BackLED(OFF,OFF);
FrontLED(ON);
}

erni55
12.01.2008, 13:28
Hab eine Lösung hab die Zahlen einfach hoch gesetzt...
Danke fuer die schnelle Hilfe, hab noch einige Ideen die ich ausprobieren muss
lg

damaltor
12.01.2008, 13:29
ich meine mich zu erinnern, dass random() zufällige zahlen mit 9 kommastellen zwischen 0 und 1 ausgibt. du musst sie also noch normieren, für drei zahlen ungefähr so:

zufall=int(3*random())+1;

von innen nach aussen:
eine zufallszahl wird erzeugt (beispiele: 0, 0.5, 0,9
sie wird mit 3 multipliziert (beispiele: 0, 1.5, 2.7)
es werden die kommastellen abgeschnitten (beispiele: 0, 1, 2)
es wird eins addirt um die null auszuschliessen und die 3 zu erreichen (beispiele: 1, 2, 3)

du musst also nur die zahl vor dem * anpassen um eine beliebige menge von zahlen zu erreichen. die eins bleibt unverändert.

erni55
12.01.2008, 13:52
Ja das funktioniert auch,danke!

damaltor
12.01.2008, 15:49
kein problem. wenn du die null mit einbeziehen willst, musst du das +1 entfernen.
zufall=int(3*random());

währen die drei zahlen 0, 1 und 2

farratt
15.01.2008, 09:39
Laut hier (http://www2.hs-fulda.de/~klingebiel/c-stdlib/stdlib.htm) heißt die Funktion aus der stdlib.h

int rand(void) und nicht irgendwie random oder so.
Außerdem sollte man den Zufallsgenerator vor dem ersten (und nur vor dem ersten) Aufruf im Programm initialisieren. Das geht mit

void srand(unsigned int seed), wobei seed eine beliebige Zahl ist, die beim Programmaufruf noch nicht feststeht, z.B. ein Wert der Odometriesensoren.