Hallo corone,
da gibt's doch z.B.:
randomize timer
y=rand
Schau mal in die Hilfe zu CCBASIC!
Gruß Dirk
Hi allesamt.
Kennt zufällig jemand eine Möglichkeit, dass man im Code irgendwie per Zufall etwas ausführen lässt? Ich bin dabei meinem Robby einige einfache Verhaltensweisen zu programmieren, alelrdings sollen die nicht starr hintereinander laufen, sondern per Zufall ausgewählt werden.
Weiß hier jemand einen Befehl dafür? Bin für Hinweise jeglicher Art dankbar!
Gruß
Corone
Hallo corone,
da gibt's doch z.B.:
randomize timer
y=rand
Schau mal in die Hilfe zu CCBASIC!
Gruß Dirk
hmm... das hab ich inzwischen auch egfunden, danke dafür. aber das problem ist, dass ich nen wirklichen zufallswert brauche... und in der endlosschleife müssen alle zahlen mal vorkommen. mit randomize ergibt sich eine auf dauer immer dientische zahlenfolge, es werden nicht alle möglichen zahlen irgendwann mal getroffen.
mit randomize timer erhalte ich das selbe ergebnis...
wüsstest du noch eine andere lösung?
Hallo corone,
Klar: Es sind ja nur Pseudo-Zufallszahlen.mit randomize timer erhalte ich das selbe ergebnis...
Man kann ein besseres Ergebnis erreichen, wenn vom Booten bzw. Reset nicht genau die selbe Zeit bis zur Zeile mit randomize vergeht.
Bei einem Lottozahlen-Prog habe ich den User vor dem randomize gezwungen, den Tastsensor TOUCH zu berühren. Danach gehts erst im Prog weiter. Dadurch ist der timer nicht mehr konstant und es werden bessere Zufallszahlen erreicht.
Gruß Dirk
hmm... die idee hat was... in die aufzurufenden subprogramme unterschiedlich lange pausen einfügen, damit er auf neue zufallsergebnisse kommt...
danke dir erst mal. falls du noch irgend eine bessere idee hast, wäre ich dir sehr dankbar!
gruß
corone
Hallo corone,
... nee, so war das nicht gemeint. Die Pausen z.B. vor dem rand-Aufruf verändern die Zufallszahlenreihenfolge nicht.hmm... die idee hat was... in die aufzurufenden subprogramme unterschiedlich lange pausen einfügen, damit er auf neue zufallsergebnisse kommt...
Das Einzige, was Sinn macht, ist randomize immer am Anfang des Programms mit einem zufälligen Wert aufzurufen, der nicht beim Start immer gleich ist. Wenn man als Parameter für randomize den timer nimmt, dann bringt das auch nicht viel, weil vom Hochfahren des uC (CC1) bis zum Aufruf der randomize-Zeile jedesmal fast genau dieselbe Zeit benötigt wird. Damit hat timer bis auf geringe Abweichung denselben Wert. Das führt dann zur selben Abfolge der Zufallszahlen.
Man braucht also einen zufälligen Parameter für randomize. Wenn ich timer nehmen will, muss ich die Zeit bis zum Aufruf der Zeile unplanbar machen. Das meinte ich mit dem Berühren des TOUCH-Sensors. Niemand kann ihn so exakt zu einer bestimmten Zeit nach dem Booten berühren, dass timer den selben Wert enthalten würde.
Eine andere Lösung wäre, einen ganz anderen Parameter zu nehmen. Da bietet sich z.B. der Helligkeitssensor an, der wohl auch beim Start nicht immer den gleichen Wert haben wird, oder eine Multiplikation aus Helligkeit und Geräuschpegel im Raum ... Der Phantasie sind keine Grenzen gesetzt.
Was nichts bringt, sind zeitliche Veränderungen vor oder nach rand-Aufrufen. Da rand die Zufallszahlen errechnet, wird eine längere oder kürzere Zeit bis zum rand-Aufruf nichts ändern.
Verbesserungen kannst du nur über randomize (s.o.) erreichen.
Zur Sicherheit noch eins: Du rufst doch randomize nicht jedesmal vor rand auf??? randomize sollte am Anfang des Progs einmal erscheinen (mit möglichst zufälligem Parameter). Im Prog selbst gibt es dann nur noch die rand-Aufrufe.
Gruß Dirk
hallo dirk,
danke noch mal für deine antwort. ja, ich hatte das irgendwie falsch verstanden... hat auch wirklich nix gebracht... zu der anderen idee:
das hatte ich auch schon überlegt und gleich mal ausprobiert, aber es bringt nicht viel. die zahlen ändern sich leider kaum bis gar nicht (zumal mein robby immer in der selben umgebung eingesetzt wird).Da bietet sich z.B. der Helligkeitssensor an, der wohl auch beim Start nicht immer den gleichen Wert haben wird, oder eine Multiplikation aus Helligkeit und Geräuschpegel im Raum
was mich vor allem wundert, ist, dass ich manchmal ca 50 verschiedene zahlen bekomme, bevor sich die sequenz wiederholt und manchmal sogar nur drei oder vier... einfach ein paar mal resetten und neu starten... wie kommt das zustande?
gruß
corone
Lesezeichen