Herzlich Willkommen im einzigen (deutschsprachigem) Picaxe-Forum.

Der Ursprung dieses Forum reicht bis in das Jahr 2008 zurück


Zufallszahl richtig berechnen

#1 von BoomBoomMagic , 26.01.2019 19:04

Der ein oder andere möchte sicherlich auch mal eine Zufallszahl mit einer Picaxe berechnen.

Jeder kennt dazu den englischen Begriff : Random

Auch bei der Picaxe heißt dieser Befehl : Random w0

Für diese Funktion wird bei der Picaxe eine WORD-Variable benötigt.

Warum ?

Das ist der Knackpunkt , ..... "Pferdefuss" ..... bei der Picaxe :(

Die Picaxe generiert eine Zufallszahl im Bereich von 0 - 65535 !

Möchte man jetzt jedoch nur eine Zahl in einem bestimmten Bereich , fangen jetzt viele an
das mit IF Anweisungen zu lösen .

IF w0 > xxxx then ...
IF w0 > yyyyy then ...
IF w0 > zzzzz then ...
IF w0 > nnnn then ...

kann man natürlich machen ... :? .... jedoch nicht der effektivste Weg und kostet einiges
an Speicherkapzität.



Es gibt natürlich einen "Trick" , wie man dies etwas eleganter lösen kann ;)

Dazu bedient man sich der Funktion : MOD ( Modulo )
MOD ist die Berechnung eines Restwertes.

Hier mal eine Seite , auf der man online die Funktion MOD probieren kann mit Erklärung :
http://www.mathe24.net/modulo.html?action=do


Und hier jetzt mal ein Beispielcode für die Picaxe , wo eine Zufallszahl von 1-18 generiert werden soll :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 

#picaxe 08M2

 
symbol Zufallszahl = w0 ' = b0 + b1
symbol neue_Wunschzahl = b2 ' = w1
symbol vorherige_Wunschzahl = b3 ' = w1
 

do
 

random Zufallszahl ' Zufallszahl errechnen lassen ( 0 -65535)

neue_Wunschzahl=Zufallszahl // 18+1 ' Umrechnen / Begrenzen auf Wunschbereich ( 1-18 )


if neue_Wunschzahl<>vorherige_Wunschzahl then ' Abfragen ob neue Zufallszahl <> alte Zufallszahl ( keine Wiederholung )

vorherige_Wunschzahl=neue_Wunschzahl ' neue Zufallszahl merken

sertxd (#neue_Wunschzahl,13,10) ' Zufallszahl über Tx ausgeben ( 4800 , n , 8 , 1 )

endif ' Abfrage schliessen


loop

 

 



Einzig "Besonderheit" hierbei ist , das ich bei jeder neuen generierten Zufallszahl vor der Übernahme erst
abfrage , ob diese <> als die vorherige Zufallszahl war um nicht 2 auf einander folgende gleiche Zahlen zu bekommen. :ugeek:



Um eine Zufallszahl innerhalb eines Bereichs zu generieren muß man auch hier ein wenig tricksen ....
.... da die Picaxe nur von 0 bis 65535 kann.

Möchte man jetzt z.B. eine Zufallszahl von 5 bis 10 , müßte man eine Zahl mittels MOD von 1-6 generieren lassen.
Diesen Wert dann mit 4 addieren , so das man einen Wertebereich von 5-10 erhält.

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 

#picaxe 08M2

 
symbol Zufallszahl = w0 ' = b0 + b1
symbol neue_Wunschzahl = b2 ' = w1
symbol vorherige_Wunschzahl = b3 ' = w1
 

do
 

random Zufallszahl ' Zufallszahl errechnen lassen ( 0 -65535)

neue_Wunschzahl=Zufallszahl // 6+1 ' Umrechnen / Begrenzen auf Wunschbereich ( 1-6 )


if neue_Wunschzahl<>vorherige_Wunschzahl then ' Abfragen ob neue Zufallszahl <> alte Zufallszahl ( keine Wiederholung )

vorherige_Wunschzahl=neue_Wunschzahl ' neue Zufallszahl merken

neue_Wunschzahl=neue_Wunschzahl+4 ' Zufallszahl mit Startwert addieren ( 4 + xxx => Bereich: 5 - 10 )

sertxd (#neue_Wunschzahl,13,10) ' Zufallszahl über Tx ausgeben ( 4800 , n , 8 , 1 )

endif ' Abfrage schliessen


loop
 
 

 
BoomBoomMagic
Beiträge: 879
Registriert am: 24.01.2019


   

Schwellwert /Hysterese programmieren
elektronischer Würfel

Picaxe Editor 5.5.5 Download
Update auf Picaxe Editor 5.5.6 Download
Picaxe Editor 6.x.x.x Download
Manual1.pdf        -      Grundwissen Download
Manual2.pdf        -      Befehle Download
Manual3.pdf        -      Beispiele Download


Press [Backspace] for back to Menu


Counter
Xobor Forum Software ©Xobor.de | Forum erstellen
Datenschutz