Felder und Indizes, oder das Programm nimmt brauchbare Gestalt an....
Das
Programm generiert nun schon 6 Zufallszahlen, leider sind oft genug Wiederholungen
vorhanden. Da das im realen und harten Lottoechteinsatz ziemlich unbrauchbar
ist, werden wir heute an einer Lösung dieses Problems arbeiten.
Um die Zahlen mit den bereits gezogenen vergleichen zu können, müssen
wir uns also alle gezogenen Zahlen merken.
Wir fügen also folgende Zeile im oberen Bereich unseres Programmes ein:
LOCAL numbers%(6) rem Feld um die gezogenen Zahlen zu speichern
Jetzt brauchen wir noch einen zusätzlichen Zähler, um das zu erzielen wird die Eingabe ,J% hinter LOCAL i% gesetzt. Der Quelltext sollte jetzt etwa so aussehen:
Das Zeichen % hinter dem Variablennamen definiert die Art (Integer). Die 6 in den Klammern definiert die Feldgröße. In diesem Fall ist die Variable numbers also 6 * vorhanden:
numbers%(1) | numbers%(2) | numbers%(3) | numbers%(4) | numbers%(5) | numbers%(6)
So
besteht die Möglichkeit jede gezogene Nummer zwischenzuspeichern und später
mit den neu gezogenen Nummern zu vergleichen. Um dies zu bewerkstelligen
wird eine neue kleine Schleife benötigt, in der wir die Schleifenvariable
j% benutzen werden.
Die Logik soll etwa so sein....
Setze
einen Zähler (j%) auf 1
While
j% ist kleiner als, oder gleich die Anzahl der zu ziehenden Nummern
Prüfe
ob die gerade zufällig gezogene Nummer (j%) bereits im Feld vorhanden
ist
Wenn
Ja, gehe zurück und ziehe eine neue Zufallsnummer
Addiere
1 zu j%
Gehe
zurück zu While und beginne von neuem mit den Bedingungen
Alles klar? Die Logik sollte unbedingt klar sein bevor die Lektion weiter abgearbeitet wird! Es kann eine Hilfe sein dieses Programmteil auf einem Blatt Papier Zeile für Zeile durchzuarbeiten. Dort muß dann jederzeit ersichtlich sein welche Variable welchen Wert enthält. Der Psion macht auch nichts anderes; nur ein kleines bißchen schneller....
Nun folgt der Code in OPL, diesmal muß ein klein wenig mehr als sonst getippt werden:
Das Display sollte etwa folgenden Inhalt haben, nun aber die Erweiterungen/Änderungen im Einzelnen:
1.
Die Zufallszahl wird nicht direkt ausgedruckt, sondern in der Feldvariablen
abgelegt.
Das ist zu späteren Prüfung auf doppelte Zahlen notwendig.
2.
Es wurde eine zweite Schleife (j%) innerhalb der ersten (i%) eingefügt.
Das
ist der weiter oben beschriebene Test.
3.
Anzumerken ist, das die j% Schleife immer nur (i%-1) Durchgänge erzielt.
Das
bedeutet, das bei der ersten Zahl die Schleife j% keine Reaktion bewirkt
(j%
ist ja 0) und von da ab immer nur eins weniger als i%. Das ist anders
auch
nicht
notwendig, da bei der ersten Zahl ja keine andere Zahl existiert mit der
man
vergleichen müßte!
4.
Wurde ein doppelte Zahl entdeckt springt das Programm zu Marke "picknum::",
um
den Zufallsgenerator erneut aufzurufen und die Prüfung abzuarbeiten. Für
die
Sprungmarke
kann jeder Begriff verwendet werden, er sollte jedoch eine gewisse
Aussagekraft
haben. Da die ganze Programmiererei im allgemeinen englisch ist,
habe
ich hier den englischen Begriff übernommen.
Ferner
muß zu unserer Lösung noch gesagt werden, das es eine höchst
unelegante
Lösung ist ein GOTO zu verwenden. Aber für dieses Problem
belassen
wir es erst mal dabei.
5.
Die Printanweisung erfolgt zu dem Zeitpunkt wenn wir genau wissen,
daß
die Zahl nicht doppelt vorhanden ist!
So jetzt ist es aber Zeit das Programm zu übersetzten und zu Starten. Wenn bei der Übersetzung noch Fehler auftreten, dann muß das Programm mit dem obigen verglichen werden. Nun ist der Lottozahlengenerator ja schon fertig......
Wenn da nicht noch das Allerwichtigste fehlen würde: Der Copyrightvermerk und die Ausgabe des Programmnamens usw......
Was
wir also zuerst mal brauchen ist ein Programmname:
Psionwelt Lottozahlen Generator oder auch "P.L.G."
So fügen wir in der Nähe des Programmbegins folgende Zeilen ein:
PRINT
"P.L.G. v0.1 (C) PsionWelt 1998"
PRINT
"Ausgabe der Lottonummern:"
Und am Ende des Programmes vor der Zeile "GET" fügen wir folgende Zeile ein:
PRINT "Drücken Sie bitte eine Taste um das Programm zu beenden"
Nach der Übersetzung und dem erneuten Start sollte auf dem Display folgendes zu sehen sein:
Das nächste Kapitel unserer Programmiereinführung wird auf dem heutigen Programm aufbauen und sich unter anderem mit der Erstellung einer guten Benutzeroberfläche beschäftigen
Weiter > |
---|