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
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.
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
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.
Disclaimer: none. Sue me.
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
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.
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.
Zitat von Zufallszahlen mit avr-gcc
Disclaimer: none. Sue me.
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.
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.
Lesezeichen