PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufallszahl



Lync
01.11.2008, 17:41
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.

PicNick
01.11.2008, 18:13
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.

Lync
01.11.2008, 18:19
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, 02: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...

Lync
02.11.2008, 08:03
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?

fhs
02.11.2008, 08:21
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