-
        
+ Antworten
Ergebnis 1 bis 6 von 6

Thema: Zufallsgenerator in C2?

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.788

    Zufallsgenerator in C2?

    Hallo C2-Profis,

    gibt es eine gute Zufallsgenerator-Funktion für C2 (so wie in BASIC der RANDOM-Befehl)?

    Gruß Dirk

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    20.12.2003
    Alter
    48
    Beiträge
    5
    Kann man so machen

    Code:
    int RND;
    //--------------------
     function randomize()
    //--------------------
      { 
         RND = system.timer();
       }
    
    //--------------------------------------------
     function rnd(int min, int max) returns float
    //--------------------------------------------
     {
      float r1;
         RND = RND * 251 ;
         r1 = math.abs(RND) ;
         return ((r1 / 32768) * (max - min + 1)) + min;
       }

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.788

    Zufall?

    Hallo Rudi,

    der Code kommt mir aus dem Modul "random.c2" bekannt vor.

    Mein Problem war mit diesem Modul u.a., dass es bei Neustart des Progs immer dieselben Zahlen liefert, weil der system.timer immer den selben Wert hat, wenn das Prog ihn anfangs mit randomize() abfragt.

    Ich habe mir schon mit der "Krücke" geholfen, dass ich random.RND mit dem Inhalt eines A/D-Wandlers gefüllt habe. Der ist ein Helligkeitssensor, so dass meist unterschiedliche Startwerte für RND entstehen.

    Das sind aber auch keine guten Zufallswerte, d.h. es kommen immer noch Wiederholungen vor.

    Gruß Dirk

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    09.06.2004
    Ort
    Rhein-Neckar-Raum
    Beiträge
    504
    Statt dem Helligkeitssensor kannst du einen Rauschgenerator an den A/D-Wandler anschließen. Schaltungen für Rauschgeneratoren gibts im WWW. Ich glaube bei "Elektronik Kompendium" habe ich mal eine gesehen. Ist nicht kompliziert. Im Prinzip wird nur das schwache Rauschen, das in allen Widerständen und Halbleitern entsteht wird, verstärkt. Das Rauschen entsteht durch Bewegungen den Atome und Elektronen. Diese Bewegungen sind völlig unregelmäßig und nicht deterministisch.

    Wenn du pro Zufallszahl zwei oder drei Messungen machst und diese miteinander verrechnest, müsstest du "Hausnummern" heraus bekommen, wie sie zufälliger nicht sein könnten.

    Da ist der RAND-Befehl dann wirklich überflüssig.

    http://www.ciphersbyritter.com/NOISE/NOISRC.HTM

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.03.2004
    Ort
    München
    Alter
    33
    Beiträge
    286
    Alternativ gäbe es doch auch noch die Möglichkeit, dass nach dem
    Start irgendeine User-Interaktion nötig ist.

    Beispielsweise muss der User auf der Tastatur eine Taste drücken
    (sofern du ein Applikationboard mit Tastatur hast) oder es muss
    vom PC ein byte übertragen werden.
    Natürlich lässt sich auch ein einfacher Schalter an einen der Ports
    anschliessen - sobald der Schalter gedrückt wurde, läuft das Programm
    weiter.

    Damit hast du komplette Zufälligkeit, da ja die Userinteraktion nie
    zur gleichen Millisekunde nach dem Start auftritt...

    Ciao,
    Simon

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.788

    Zufall oder keiner?

    Hallo Simon,

    danke für den Tip mit der Benutzeraktion!
    Jetzt muss vorher ein Berührungssensor gedrückt werden. Die Zufallszahlen danach sind nicht mehr vorhersagbar!

    Gruß Dirk

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •