|
|
|
| 26.10.2025 | Archiv # Recherche # Links # Kontakt # Gästebuch # Impressum | |
|
Index Login Die Anzeige des Archivs erfolgt grafisch. Ändern |
GeoCom Workshop #4Eine Würfelsimulation Endlich ist es soweit, wir fangen mit unserem Programmprojekt (Details: GUP 35) an. In dieser Folge soll eine Reihe von Zufallszahlen erstellt und eine Auswertungsgrafik aufgebaut werden. Im Hauptprogramm sind zunächst die Variablen zu initialisieren, dann wird von hier aus der restliche Ablauf gesteuert. Eine Datenreihe 'würfelzahl' speichert die Verteilung der Zahlen, eine Integervariable und eine Realzahl werden zur Berechnung des Durchschnitts gebraucht. Außerdem sind nötig: Ein Zähler, ein Puffer für die erzeugte Zahl und einer für die umgerechnete Würfelzahl und schließlich die Zufallszahlenfunktion. Die Adresse $850a wird bei jedem Interrupt mit einem Integerwert neu beschrieben, kann also als "random"-Funktion eingesetzt werden. Definitions-und Hauptteil sehen also so aus: NAME"Würlelstat.1.0a" CLASS"WStat V1.0a" AUTHOR "Olaf Dzwiza" BYTEVAR zähler, würfelwert, zufallszahl INTVAR gesamtwert INTVAR AT $850a; random REALVAR durchschnitt ROW 6 BYTEVAR würfelzahl LABEL hauptprogramm LABEL zahlenreihe_erzeugen, grafik_aufbauen @hauptprogramm (würfelzahl<0>)=0 (würfelzahl<1>)=0 (würfelzahl<2>)=0 (würfelzahl<3>)=0 (würfelzahl<4>)=0 (würfelzahl<5>)=0 gesamtwert=0 zahlenreihe_erzeugen grafik_aufbauen WAIT 255 : WAIT 255 END Bevor Ihr ans Compilieren geht, sollten noch die Label zahlenreihe_erzeugen und grafik_aufbauen in den Programmtext aufgenommen werden. zahlenreihe_erzeugen soll 200 Zufallszahlen erzeugen und für jede Zahl einen entsprechenden Zähler (BYTEROW würfelzahl) hochzählen. Dabei verwenden wir nur das niederwertige Byte der "random"-Funktion und ordnen folgende Würfelzahlen zu:
0 - 41: 1
42 - 82: 2
83 - 123: 3
124 - 164: 4
165 - 205: 5
206 - 246: 6
@zahlenreihe_erzeugen
zähler=0:zufallszahl=255
REPEAT
WHILE (zufallszahl>246)DO zufallszahl=(LOW random)
LOOP
würfelwert=1
IF (zufallszahl>41)THEN : würfelwert=2 : ENDIF
IF (zufallszahl>82)THEN : würfelwert=3 : ENDIF
IF (zufallszahl>123)THEN : würfelwert=4 : ENDIF
IF (zufallszahl>164)THEN : würfelwert=5 : ENDIF
IF (zufallszahl>205)THEN : würfelwert=6 : ENDIF
würfel_darstellen
INC (würfelzahl<(würfelwert=1)>)
INC zähler
zufallszahl=255
UNTIL (zähler==200)
RETURN
Das Label Würfel_darstellen ist noch im Deklarationsteil einzubinden, im Programmcode reicht hier vorübergehend aus: @würfel_darstellen RETURN Jetzt ist ein Balkendiagramm mit den Ergebnissen zu zeichnen. Die Grafikbefehle müssen wohl nicht groß erläutert werden, etwas verwirrend sind hier höchstens die vielen berechneten Koordinaten. Im Zweifelsfall helfen aber Tabellen und ein Blatt Karopapier. Für die genaue Auflistung fehlt leider der Platz. Viele Sachen in diesem Programmabschnitt (Zahlenbereiche, Klammerregeln) wurden bereits in den vorhergehenden Workshopteilen erläutert. Interessant ist höchstens noch die INT-Funktion:
@grafik_aufbauen
PATTERN 0
RECT 45,40,275,175 : FRAME 45,40,275,175
LINE 60,55,60,145 : LINE 60,145,260,145
LINE 258,143,260,145: LINE 258,147,260,145
zähler=0
REPEAT
LINE
58,((zähler*15)+62),60,((zähler*15)+62)
SETPOS 50,((zähler*15)+65)
PRINT(STR(zähler+1))
INC zähler
UNTIL (zähler==6)
zähler=0
REPEAT
LINE(INT((zähler*20)+60),0),145,(INT((zähler*20)+60),0),147
SETPOS (INT((zähler*20)+58),0),157
PRINT(STR(zähler*20))
INC zähler
UNTIL (zähler==10)
zähler=0
PATTERN 1
WHILE (((würfelzahl<zähler>)<>0) AND (zähler<6))DO
RECT
60,((zähler*15)+60),(INT(60+(würfelzahl<zähler>)),0),
((zähler*15)+64)
SETPOS
(INT(64+(würfelzahl<zähler>)),0),((zähler*15)+65)
PRINT(STR(würfelzahl<zähler>))
INC zähler
LOOP
zähler=0
REPEAT
gesamtwert=(gesamtwert+((INT(würlelzahl<zähler>),0)*(INT(zähler+1),0)))
INC Zähler
UNTIL(zähler==6)
durchschnitt=((REALgesamtwert)/200)
SETPOS 65,170: PRINT "/BDurchschnitt:";:PRINT (STR durchschnitt)
RETURN
Und nun noch eine kleine Aufgabe: Ergänzt den Programmpunkt @würfel_darstellen wie folgt: @würfel_darstellen INCLUDE "Wüdarst_mod" RETURN "Wüdarst_mod" sollte ein Modul sein, daß zu jeder erzeugten Zahl eine Würfelanzeige simuliert. Eine mögliche Lösung findet Ihr auf der Diskette zum Workshop, die es ab sofort bei mir gibt (Unkostenerstattung 5 DM oder entsprechen eine Disk (1541!) mit frankiertem Rückumschlag; Adresse am Ende des Textes).
Olaf Dzwiza Abschließend einige allgemeinige Infos
Olaf Dzwiza
Kurzlink hierhin: http://geos-printarchiv.de/1951 |
|
|
Letzte Änderung am 01.11.2019 |
||