-         

Ergebnis 1 bis 6 von 6

Thema: Zufallszahl

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.11.2006
    Ort
    Wien
    Beiträge
    120

    Zufallszahl

    Anzeige

    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:
    Code:
    ....
    Dim I As Integer
    Zufallszahl = Rnd(6)
    ....
    Aber die Zahl hat immer den gleichen Wert.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.11.2006
    Ort
    Wien
    Beiträge
    120
    hmm so schaut das ganze progarmm aus:
    Code:
    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.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    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...

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.11.2006
    Ort
    Wien
    Beiträge
    120
    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?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    63
    Beiträge
    622
    Hallo,

    Zitat Zitat von Lync
    ...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
    Only entropy comes easy. - Anton Checkhov

Berechtigungen

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