Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufallszahl
Hi
Nachdem ich eine längere Pause gemacht habe wollte ich heute wieder eine
Programm schreiben.
Dazu will ich eine Zufallszahl generieren.
Hab das so gemacht:
....
Dim I As Integer
Zufallszahl = Rnd(6)
....
Aber die Zahl hat immer den gleichen Wert.
Das Wort "Zufallszahl" täuscht etwas. In wirklichkeit ist es eine Folge von den immer gleichen Zahlen, nur ist sie über den Bereich gestreut, d.h. wenn du "rnd" immer wieder aufrufst
do
Print rnd(6)
Loop
springt die Zahl zwischen 0 und 6 statistisch herum.
hmm so schaut das ganze progarmm aus:
Declare Sub Anzeige1()
Declare Sub Anzeige2()
Declare Sub Anzeige3()
Declare Sub Anzeige4()
Declare Sub Anzeige5()
Declare Sub Anzeige6()
Declare Sub Zuruecksetzen()
Declare Function Zufall() As Byte
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
Dim I As Integer
Dim Zufallszahl As Integer
Config Porta = Output
Do
Waitms 2000
Zufallszahl = Rnd(6)
Function Zufall() As Byte
Select Case Zufallszahl
Case 0
Call Anzeige1
Case 1
Call Anzeige2
Case 2
Call Anzeige3
Case 3
Call Anzeige4
Case 4
Call Anzeige5
Case 5
Call Anzeige6
End Select
End Function
Sub Anzeige1()
Porta.3 = 1
Call Zuruecksetzen
End Sub
Sub Anzeige2()
Porta.0 = 1
Porta.7 = 1
Call Zuruecksetzen
End Sub
Sub Anzeige3()
Porta.0 = 1
Porta.3 = 1
Porta.7 = 1
Call Zuruecksetzen
End Sub
Sub Anzeige4()
Porta.0 = 1
Porta.2 = 1
Porta.4 = 1
Porta.7 = 1
Call Zuruecksetzen
End Sub
Sub Anzeige5()
Porta.0 = 1
Porta.2 = 1
Porta.3 = 1
Porta.4 = 1
Porta.7 = 1
Call Zuruecksetzen
End Sub
Sub Anzeige6()
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
Porta.4 = 1
Porta.5 = 1
Porta.7 = 1
Call Zuruecksetzen
End Sub
Sub Zuruecksetzen()
Waitms 2000
For I = 0 To 7
Porta.i = 0
Next I
End Sub
Loop
hab ja eine do..loop schleife in dem das rnd steht aber ttrotzdem kommt immer die gleiche Zahl, keine Zahlenfolge.
stefan_Z
02.11.2008, 03:49
Schau dir im Handbuch mal RND() an - da steht auch was zum Thema ___RSEED (ja das Teil hat wirklich drei Tiefstriche im Namen!).
Das ist der Random-Seed - also der Ausgangspunkt des Generators.
Wenn man die Variable ändert, wird auch das Random-Muster anders.
Ganz zufällig wirds mit nem ADC und ner passenden Schaltung - welche das wäre, müssten die Analog-Spezis uns sagen...
jop das hab ich gestern auch schon gefunden ist mir aber ein bisschen zu aufwendig für so einfache schaltung.
Hab mir jetzt überlegt beim programmstart nen timer zu starten und dann bei nem druck auf nen taster (der sollte später sowieso dazuommen) den timmer anzuhalten und das dann als ___RSEED Wert zu setzen.
würde das so gehn?
Hallo,
...beim programmstart nen timer zu starten und dann bei nem druck auf nen taster (...) den timmer anzuhalten und das dann als ___RSEED Wert zu setzen. würde das so gehn?
das ist eine sehr gute Methode, zumindest für das Erzeugen von Seeds bei Pseudozufallsgeneratoren in anderen Programmiersprachen (ich verstehe nichts von Bascom). Wenn Du den Timer später noch benötigst, brauchst Du ihn vielleicht gar nicht anzuhalten, sondern könntest nur den Zählerwert lesen.
Gruß
Fred
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.