|
|
|
07.12.2024 | 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 |