home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Inside Multimedia 1995 July
/
IMM0795.ISO
/
demo
/
optix
/
optxfpac.set
/
THEORIE.INF
< prev
next >
Wrap
Text File
|
1995-01-18
|
13KB
|
313 lines
Das Hexadezimal-System
OPTIX ist in der Lage, statt der gebräuchlichen Dezimaldarstellung von Werten
mit den Ziffern 0 bis 9 diese im Hexadezimalsystem mit den 'Ziffern' 0 bis F
auszudrücken.
Wozu braucht man das Hexadezimalsystem?
Wollte man Bytewerte als Dezimalzahl darstellen, müßte man dazu im Maximum
eine Zeichenkette von 3 Ziffern (255) schreiben. Um diese Zahlendarstellung
für Bytewerte zu vereinfachen, hat man sich die HEXADEZIMALZAHLEN ausgedacht.
Dieses Zahlensystem hat alle Eigenschaften des Dezimalsystems. Der einzige
Unterschied ist der, daß als Basis zu den Wertigkeitspotenzen nicht die 10
(Dezi) genommen wird, sondern der Wert 16 (Hexadezi). Das hat den Vorteil,
daß der Inhalt eines Bytes (0-255) mit nur zwei Ziffern ($0 bis $FF)
darstellbar ist.
Mit den uns üblicherweise bekannten Zahlen läßt sich keine größere Zahl
als 9 einstellig schreiben, weshalb für die Zahlen 10 bis 15 Buchstaben
gewählt werden. Der Zahl 10 wird im Hexadezimalsystem der Buchstabe 'A'
zugeordnet, der Zahl 11 das 'B', 12 = 'C', 13 = 'D', 14 = 'E' und die 15
erhält den Buchstaben 'F'.
In OPTIX werden Hexadezimalzahlen - wie auch in anderen Programmiersprachen
üblich - gekennzeichnet, indem ihnen ein '$' (Dollarzeichen, z.B. $1AF7) vorangestellt wird.
ASCII-Codes
Bei der Strukturanweisung DEFBUTTON stoßen Sie auf den sogenannten 'ASCII-Code'.
Um Schriftzeichen auf einem Computer darstellen zu können, müssen den einzelnen
Zeichen (Ziffern, Buchstaben und Sonderzeichen) Zugriffcodes zugeordnet werden,
die man 'ASCII' nennt ('American Standard Code for Information Interchange';
engl.: 'amerikanischer Standard-Code für Informationsaustausch'). Hierbei steht
z.B. der Wert 65 für den Buchstaben 'A', der Wert 66 für 'B', der Wert 67 für
'C' usw. (ASCII-Tabelle s.Anhang). Bei AT-DIN-Tastaturen (die mit der [ F12 ]-
Taste) haben Sie die Möglichkeit, bei gedrückter [ Alt ]-Taste auf dem
Ziffernblock einen - bis zu dreistelligen - ASCII-Code einzugeben. Sobald
Sie die [ Alt ]-Taste wieder loslassen, erscheint das entsprechende Zeichen
an der aktuellen Cursorposition. Damit haben Sie auch ohne ASCII-Tabelle
jederzeit Überblick über den von DEFBUTTON geforderten Tasten-Code.
Bedingungen und Konsequenzen
Um den Computer zu einer Arbeit zu bewegen, die Ergebnisse liefert, mit denen
wir etwas anfangen können, mußte ein Verfahren entwickelt werden, das die
Arbeitsweise des Computers unserer eigenen möglichst weitgehend angleicht.
Es nützt wenig, ihn stur mathematische Aufgaben lösen zu lassen, was ja seine
Lieblingsbeschäftigung ist. Man will auch, daß unter bestimmten Bedingungen
Entscheidungen von ihm selbstständig getroffen werden. Sonst wäre er nichts
weiter, als ein besserer Taschenrechner.
Wie entscheidet sich ein Mensch?
Entscheidungen sind die Reaktion auf einzelne oder auch eine Folge von
Bedingungen. Man nimmt eine Situation wahr, ordnet ihre Anforderungen in ein
vorhandenes Handlungsschema ein und trifft aufgrund von ▄bereinstimmungen oder
eben auch Nichtübereinstimmungen mit den angelegten Kriterien die Entscheidung
darüber, ob und was nun zu tun ist.
Wir wissen alle, was die Worte 'und' und 'oder' bedeuten.
Wenn es warm ist und ich Zeit habe, werde ich baden gehen.
oder
Wenn es kalt ist oder ich nicht Zeit habe, werde ich
nicht baden gehen.
Wir verknüpfen mehrere Bedingungen miteinander, um daraus zu entscheiden, was
zu tun oder zu lassen ist. Ein Computer ist nur ein Computer, wenn er in der
Lage ist, Entscheidungen dieser oder ähnlicher Art zu fällen.
In der sogenannten 'Bool-Aritmetik' werden für solche Vergleiche die bool'schen
Operatoren 'AND' und 'OR' verwendet. Diese logischen Abläufe werden unter OPTIX
intern geregelt, sodaß Sie sich hiermit nicht näher zu befassen haben. Trotzdem
ist es wichtig, die grundlegende Verfahrensweise eines logischen Vergleichs zu
verstehen, da durch die Stellung mehrerer IF-Abfragen zueinander auch Sie in
OPTIX solche UND- und ODER-Bedingungen stellen können.
'IF...ELSE...ENDIF' (s. dort) ist der adäquate Befehl in OPTIX, um den Fortlauf
des Programms von einer Bedingung abhängig zu machen.
Weiter vorn wurden zwei typische Bedingungen und ihre Konsequenzen vorgestellt,
wie sie in dieser oder einer ähnlichen Art im täglichen Leben ständig vorkommen.
Wenn es warm ist und ich Zeit habe, werde ich baden gehen.
Wenn es kalt ist oder ich nicht Zeit habe, werde ich nicht baden gehen.
Es werden in beiden Fällen zwei Bedingungen gestellt, deren Erfüllung mit einer
Konsequenz verbunden ist.
Um das nun in ein anwendbares Beispiel zur Programm-Entscheidung übertragen zu
können, setzen wir für einige Worte in den beiden Sätzen Symbole ein. Für
jeden Ausdruck, der etwas bejaht, nehmen wir den Wert 1 (TRUE) und für jeden
Ausdruck, der etwas verneint, setzen wir den Wert 0 (FALSE).
Also:
ist : = 1
haben : = 1
gehen : = 1
nicht haben : = 0
nicht gehen : = 0
In die Struktur einer IF-Bedingung eingefügt, bekommen die beiden Sätze nun
folgende Form:
If Warm=1 Wenn warm 'ist' -------.
If Zeit=1 ..UND Zeit 'haben' |
Baden:=1 dann baden 'gehen' |- UND-Konstrukt.
Endif Ende der... |
Endif ... UND-Verknüpfung ----'
If Kalt=1 Wenn's kalt 'ist' ------ .
Baden:=0 dann baden 'nicht gehen' |
Endif Ende der 1.Konsequenz |
...ODER |- ODER-Konstr.
If Zeit=0 Wenn Zeit 'nicht haben' |
Baden:=0 dann baden 'nicht gehen' |
Endif Ende der 2.Konsequenz --------'
Zur IF-Struktur ist hier zu sagen, daß diese grundsätzlich mit einem ENDIF
abgeschlossen werden muß, um dem Compiler/Encoder kenntlich zu machen, welche
Konsequenzen zu welcher Bedingung gehören.
Sie merken, daß bei Verwendung von Symbolen für 'Ja' und 'Nein' schon recht
komplizierte Entscheidungen möglich sind. Das kann man sogar noch wesentlich
weiter führen, wenn Sie eine weitere Möglichkeit anwenden, die Ihnen OPTIX
bietet.
Es gibt auch noch die Möglichkeit, eine Alternativ-Konsequenz zu formulieren.
Wenn ich sage, daß ich unter bestimmten Bedingungen etwas tun werde, so folgt
daraus meist implizit, daß ich dann, wenn die Bedingungen nicht erfüllt sind,
etwas anderes tun werde.
Im obigen Beispiel könnte das sein:
Wenn es warm ist und ich Zeit habe, werde ich baden gehen.
Anderenfalls werde ich nicht baden gehen und ein Buch lesen.
Für das Ereignis 'lesen' (positiv) setzen wir hier wieder eine 1.
IF-Struktur:
If Warm=1 Wenn warm 'ist'
If Zeit=1 ..UND Zeit 'haben'
Baden:=1 dann baden 'gehen'
Else sonst (wenn also keine Zeit)
Lesen:=1 Buch'lesen'
Endif Ende des ersten Blocks
Else sonst (wenn also nicht warm)
Lesen:=1 dann auch Buch'lesen'
Endif Ende der ELSE-UND-Verknüpfung
Der Ausdruck ELSE steht hier für 'andernfalls' oder auch 'sonst'. ELSE ist
also die konsequente Umkehrung der bei IF gestellten Bedingungen. Die zwischen
ELSE und ENDIF eingeschlossenen Konsequenzen bekommen nur dann Gültigkeit,
wenn die beim zugehörigen IF gestellte Bedingung nicht zutrifft. Das heißt
wiederum, daß immer dann, wenn das Programm auf eine IF-Abfrage trifft, die
mit einer ELSE-Anweisung verbunden ist, entweder die unter IF oder die unter
ELSE eingebundenen Konsequenzen Gültigkeit bekommen. Soll das nicht geschehen,
wird die ELSE-Anweisung einfach weggelassen. D.h., daß die Nichterfüllung der
unter IF gestellten Bedingungen keine weitere Konsequenz hat, als daß das
Programm hinter der zugehörigen ENDIF-Anweisung fortgesetzt wird.
Anhand dieser einfachen Beispiele ist die ▄bertragbarkeit alltäglicher
Entscheidungen in die Logik der Computerwelt hoffentlich etwas deutlich
geworden. Mit Zunahme Ihrer Routine wird auch die Einsicht in die Möglichkeiten
dieser Verknüpfungen wachsen. Es ist jedenfalls manchmal recht faszinierend,
wie sich durch komplexe Bedingungen unterschiedliche Einflüsse so abfangen und
verarbeiten lassen, daß allein dadurch schon der Eindruck eines 'intelligenten'
Programms entsteht.
Flags
Eben wurde noch ein weiteres Prinzip effektiver Programmierung sichtbar. Man
nennt es FLAGS (engl.: Flaggen). Diese Flaggen haben eine sehr wichtige
Funktion in jedem Programm, das nicht nur die Grundfunktionen und -strukturen
verwendet, sondern darüber hinaus verschiedene Zustände signalisieren kann,
die dann in die Entscheidungsfindung einbezogen werden sollen.
Bemühen wir noch einmal unser Beispiel:
If Warm=TRUE
Flag:=TRUE
Endif
.
. ... weiteres Programm ...
.
If Flag=TRUE
If Zeit=TRUE
Baden:=TRUE
Endif
Endif
Es kann also ein Zustand an irgendeiner Programmstelle ausgewertet werden,
dessen Ergebnis erst später zur Wirkung kommen soll. Es ist hier denkbar, daß
die in 'Flag' gespeicherte Information an mehreren Stellen im Programm
ausschlaggebend sein soll.
Um nun nicht an jeder dieser Stellen die Entscheidung treffen (und auch
definieren) zu müssen, ob es warm ist oder ob man Zeit hat, kann man diese
Entscheidung bei frühestmöglicher Gelegenheit vornehmen und die Information,
ob die Entscheidung positiv oder negativ ausgefallen ist, in einer Variablen
speichern und diese dann bei weiteren Gelegenheiten abfragen.
Vielleicht weiß ich ja heute schon, daß es morgen warm sein wird, aber ich weiß
heute noch nicht, ob ich morgen Zeit haben werde, baden zu gehen. Also treffe
ich die zweite Teilentscheidung erst dann, wenn die dazu erforderlichen
Umstände eingetreten sind. Im Beispiel wurde der Variablenname 'Flag'
willkürlich gewählt. Sie können dafür natürlich jeden beliebigen Variablennamen
verwenden.
Vergleichsoperationen
Bei der Beschreibung der Schleifenstrukturen wurden mehrfach sogenannte
VERGLEICHSOPERATOREN verwendet.
= gleich
< kleiner
> größer
<> ungleich
<= kleiner oder gleich
>= größer oder gleich
Diese Operatoren können also eingesetzt werden, um zwei Werte oder Textausdrücke
miteinander zu vergleichen.
Sie werden sich evtl. fragen, wie man denn Textausdrücke auf 'größer' oder
'kleiner' prüfen kann. Das geht folgendermaßen vor sich: Sollen zwei
Textausdrücke verglichen werden, geht OPTIX der Reihe nach alle Zeichen
der beiden Ausdrücke durch und ermittelt, welches der beiden verglichenen
Zeichen den größeren ASCII-Wert besitzt. Der Ausdruck, der in einer der
verglichenen Positionen das Zeichen mit dem größeren ASCII-Wert enthält,
ist somit der 'größere' String. Beim Vergleich zweier Strings auf 'kleiner'
wird das gleiche Verfahren angewandt. Nur ist hier eben der 'kleinere' String
der, der zuerst ein Zeichen enthält, dessen ASCII-Wert kleiner ist, als der
des verglichenen Zeichens des anderen Strings.
Haben die beiden Strings ungleiche Längen und hat der Vergleich bis zum Ende
des kürzeren Strings keine Unterschiede zwischen beiden Strings aufgewiesen,
so ist beim Vergleich auf 'größer' der längere String auch der größere, bzw.
beim Vergleich auf 'kleiner' der kürzere String der kleinere.
Arithmetik und Prioritäten
OPTIX verfügt über die grundlegenden arithmetischen Operatoren:
Klammern
Multiplikation
Division
Addition
Subtraktion
Sämtliche Berechnungen werden in einer vorgegebenen Prioritätenfolge erledigt.
Gemeint ist damit die Reihenfolge, nach welcher die verschiedenen arithmetischen
Operationen ausgeführt werden.
Aus der Mathematik werden wohl den meisten Konstrukte wie das folgende oder
ähnliche bekannt sein:
X := (12+(65/3))*(5+(77-2)/5)/17
Formeln dieser Art werden nach folgender Rangfolge aufgelöst:
1. Klammern > ( ) erst innere, dann äußere
2. Multiplikation / Division > * , / (gleichrangig)
3. Addition / Subtraktion > + , - (gleichrangig)
Werden innerhalb eines arithmetischen Ausdrucks nur gleichwertige Operatoren
verwendet, werden diese der Reihe nach von links nach rechts ausgeführt.
Wollen Sie diese Reihenfolge durchbrechen, können Sie die Berechnungen, die
zuerst behandelt werden sollen, in Klammern einfassen. In einer Klammer
werden die Operationen wieder in der üblichen Rangfolge bearbeitet.
Die obige Formel würde intern zu folgendem Ablauf führen:
linke Klammer:
1. Schritt : 65 / 3 = Zwischenerg. 1 = 21
2. Schritt : 12 + ZwErg1 = Zwischenerg. 2 = 33
rechte Klammer:
3. Schritt : 77 - 2 = Zwischenerg. 3 = 75
4. Schritt : ZwErg3 / 5 = Zwischenerg. 4 = 15
5. Schritt : 5 + ZwErg4 = Zwischenerg. 5 = 20
Schlußberechnung:
6. Schritt : ZwErg5 * ZwErg2 = Zwischenerg. 6 = 660
7. Schritt : ZwErg6 / 17 = Endergebnis = 38,82..
8. Schritt : Zuweisung an X (incl. Integration) X := 38