-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Wie denn "Zufall" programmieren

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306

    Wie denn "Zufall" programmieren

    Anzeige

    Moin

    Ich will ein kleines Lauflicht für meine Freundin bauen!
    Bloß das problem ist wie schreibe ich ein programm was eine zufällige zahl generiert im bereich ca 0-10!

    ich will durch die zahl ein Unterprogramm aufrufen!

    Hat jemand ne idee wie man sowas bewerkstelligen kann?

    Das es ja in der digitaltechnik eigentlich keine zufälle gibt!

    Gruß cybrix
    Wenn etwas klemmt, wende Gewalt an.

    Wenn es kaputt geht,
    hätte es sowieso erneuert werden müssen.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.07.2006
    Ort
    Berlin
    Beiträge
    439
    Hallo Cybrix,

    in Basic z.B. Bascom heißt der Befehl Rnd von Random, deutsch Zufall

    Syntax: Variable = Rnd(10)

    Mit der 10 gibst du die Obergrenze der Zufallszahl an

    Gruß
    Detlef

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306
    jo danke für die mühe aber ich programmierein C!

    Aber vielleicht gibt es dafür ja auch ein befehl
    Wenn etwas klemmt, wende Gewalt an.

    Wenn es kaputt geht,
    hätte es sowieso erneuert werden müssen.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    27
    Beiträge
    485
    Was vielleicht auch noch eine Möglichkeit wäre, wäre die Dauer eines Tastendruckes messen und daraus einen "Zufallswert" generieren.

    So haben wir das mal bei der Elektronik-AG in der Schule gemacht. (Mit einem R8C, gabs mal in der Elektor als "Weihnachtsgeschenk")

    MfG

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306
    jo das ist genau das was ich gesucht habe danke

    @coco

    das muss in der software passieren da ich keine taster verwende
    Wenn etwas klemmt, wende Gewalt an.

    Wenn es kaputt geht,
    hätte es sowieso erneuert werden müssen.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306
    Ich habe das versucht aber irgendwo hängt das in der Funktionen das schmeist mir garnicht die Zahlen raus die ich maximal definiert habe

    habe selbst in der stdlib.h die RANDOM_MAX auf 0x0007 verändert und im meinem Programm auch aber irgendwie wirft er mir immer größere zahlen raus als ich eingestellt habe vielleicht findet ja jemand von euc denn Fehler!

    Hier mal ein Auszug aus dem Programm:

    Code:
    //  **  Präprozessor  **  //
    
    #include <stdio.h>
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdlib.h>
    #define RAND_MAX 0x0007
    
    
    //Hauptprogramm
    
    
    int main (void)
    {
     
       init();   
       int zufall=0;              //Variable Zufall deklarieren
       
       
       while (1)
      {
       zufall=rand();
    
       switch (zufall)
       {
    
        case 0:
       
                lauflr();          //Von links nach rechts durchlaufen
    			//zufall=zufall+1;
    			break;
    
        case 1:
       
                laufrl();          //Von rechts nach links durchlaufen
    			//zufall=zufall+1;
    			break;
        
    	case 2:
    	 
    	        jede21lr();           //Jede erste zweite LED geht an von links nach rechts
    			//zufall=zufall+1;
    			break;
        case 3:
    	 
    	        jede21rl();           //Jede erste zweite LED geht an von rechts nach links
    			//zufall=zufall+1;
    			break;
        case 4:
    	 
    	        blink();              //LED`s blinken
    			//zufall=zufall+1;
    			break;
        case 5:
    	
       	        blink2w();            //jede zweite LED blinkt im wechsel
    			//zufall=zufall+1;
    			break;
        case 6:
    
    			jede22rl();           //Jede zweite LED geht an von rechts nach links
    			//zufall=zufall+1;
    			break;
        case 7:
    
                jede22lr();           //Jede zweite LED geht an von rechts nach links
    			//zufall=1;
    			break;
       }
      }
     }
    Wenn etwas klemmt, wende Gewalt an.

    Wenn es kaputt geht,
    hätte es sowieso erneuert werden müssen.

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Zitat Zitat von Zufallszahlen mit avr-gcc
    RAND_MAX und RANDOM_MAX haben rein informativen Charakter. Ein Umdefinieren dieser Werte kann natürlich die Arbeitsweise der Bibliotheksalgorithmen nicht verändert und bleibt daher nutzlos!
    Disclaimer: none. Sue me.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Wenn du nur Zahlen x von 0...max willst, dann kannst du das machen mit

    x = foo () % (max+1); // foo() ist die Zufallsfunktion

    max muss < RAND_MAX bz. RANDOM_MAX sein. Und zwar die Werte von *_MAX, die die Programmierer der avr-libc angegeben haben!

    Beachte, daß dieses Kappen mit modulo Einfluss auf die Gleichverteilung nimmt!
    Disclaimer: none. Sue me.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    04.01.2005
    Ort
    Rendsburg
    Alter
    32
    Beiträge
    306
    Die gleichverteilung sollte schon ungefähr gleich bleiben!

    Ich habs mal getestet! bei 20 durchläufen

    Hat er folgende aufteilung:

    Funktion 1 = 10%
    Funktion 2 = 05%
    Funktion 3 = 20%
    Funktion 4 = 15%
    Funktion 5 = 05%
    Funktion 6 = 20%
    Funktion 7 = 15%
    Funktion 8 = 10%

    gibt es da noch ne möglichkeit die Verteilung ungefähr gleich hin zukriegen?

    Aber danke für die Hilfe jetzt funktioniert es wenigstens!
    Wenn etwas klemmt, wende Gewalt an.

    Wenn es kaputt geht,
    hätte es sowieso erneuert werden müssen.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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