www.mathesport.de Knobelmix

ALGOS

Teil A:

Algos II (Algebraisches Operationssystem) ist eine einfache Programmiersprache, die in etwa einen programmierbaren Taschenrechner simuliert. ALGOS benutzt ein Speicherwerk, ein Steuerwerk und ein Rechenwerk.

Das Speicherwerk verfügt über 26 Speicher (a-z), die Dezimalzahlen aufnehmen können. Nach dem Start eines Programms haben zunächst alle Variablen den Wert Null.

Das Steuerwerk verfügt über 4 Register:
1) Befehlszähler 2) Befehlsregister 3) Adressregister 4) Vergleichsregister

Das Rechenwerk verfügt über das eigentliche Rechenregister (den Akkumulator) sowie über einen sechselementigen Stack und einen sechselementigen Rücksprung-adressenstack für Unterprogramme.

Alle Berechnungen passieren im Rechenregister (Akku, Akkumulator) !

Wie gelangen Zahlen in den Akkumulator?

Beispiele:
lade 5 Das Programm schreibt die Zahl 5 in den Akku.
lade a Das Programm schreibt den Inhalt von Speicher a in den Akku.
eingabe Hier wird der Anwender aufgefordert eine Zahl einzugeben. Die Zahl wird direkt in den Akku geschrieben. (Mit 'eingabe d' würde die Zahl direkt in den Speicher d geschrieben. Der Akku wird nicht verändert)


Was passiert im Akkumulator?

Beispiele:
mal 5Der Inhalt des Akkus wird mit 5 multipliziert.
addi 4Zum Inhalt des Akkus wird die Zahl 4 addiert.
sub cVom Inhalt des Akkus wird der Inhalt des Speichers c subtrahiert.
wurzelEs wird die Wurzel aus dem Inhalt des Akkus gezogen.
ganzeVom Inhalt des Akkus werden alle Nachkommastellen abgeschnitten.

In jedem Fall stellt das Ergebnis der Berechnungen den neuen Akkuinhalt dar!

Wie werden die Ergebnisse weiterverarbeitet?

Beispiele:
druckeDer Inhalt des Akkus wird auf dem Bildschirm ausgegeben. (Mit 'drucke d' könnte man z.B. den Inhalt des Speichers d auf dem Bildschirm ausgeben.)
speicher gDer Inhalt des Akkus wird in den Speicher g geschrieben.


Noch ein Hinweis:
text xyzMit diesem Befehl können Sie die Zeichenkette 'xyz' auf dem Bildschirm ausgeben.


DIE BEFEHLE I
ladezahl/speicherEine Zahl oder ein Speicherinhalt (a-l) wird in den Akkumulator geladen.
speicherspeicherDer Akkumulatorinhalt wird in einen der Speicher geschrieben.
plus-/speicherDer Inhalt des Akkumulators oder eines Speichers wird um Eins erhöht.
minus-/speicherDer Inhalt des Akkumulators oder eines Speichers wird um Eins vermindert.
eingabe-/speicherIn den Akkumulator oder einen Speicher wird eine Zahl eingegeben.
drucke-/speicherDer Inhalt des Akkumulators oder eines Speichers wird ausgegeben.
text??????????Es wird eine beliebige Zeichenfolge ausgegeben.
malzahl/speicherDer Inhalt des Akkumulators wird mit einer Zahl oder einem Speicherinhalt multipliziert. Das Ergebnis steht im Akkumulator.
durchzahl/speicherDer Inhalt des Akkumulators wird durch eine Zahl oder einen Speicherinhalt dividiert. Das Ergebnis steht im Akkumulator.
hochzahl/speicherDer Inhalt des Akkumulators wird mit einer Zahl oder einem Speicherinhalt potenziert. Der Exponent muß größer als Null sein.
wurzel----Im Akkumulator steht die Wurzel des alten Inhalts.
ganze----Im Akkumulator steht dann der ganzzahlige Anteil des alten Inhalts.
addizahl/speicherZum Akkumulatorinhalt wird eine Zahl oder der Inhalt eines Speichers addiert.
subzahl/speicherVom Akkumulatorinhalt wird eine Zahl oder der Inhalt eines Speichers subtrahiert.
sin----Im Akkumulator steht dann der Sinus-Wert des alten Inhalts.
cos----Im Akkumulator steht dann der Cosinus-Wert des alten Inhalts.
ln----Im Akkumulator steht dann der natürliche Logarithmus des alten Inhalts.


Teil B: Bei fortgeschrittener Programmierung werden Sie nicht auf die Sprungbefehle verzichten können. Sie müssen dabei Sprungziele, die sogenannten Marken, definieren. Eine Marke ist ein beliebiger Name mit einem Doppelpunkt (:) am Ende. Mit dem Befehl 'gehe test' würden Sie das Programm zwingen, an der Stelle weiterzuarbeiten an der 'test:' steht.

Neben diesem unbedingten Sprung existieren mehrere bedingte Sprungbefehle. D.h. der Sprung wird nur ausgeführt, falls eine bestimmte Bedingung erfüllt ist. Anderenfalls wird die Bearbeitung mit der nächsten Programmzeile fortgesetzt.

Ein Beispiel:
lade 5Die Zahl 5 wird in den Akku geschrieben.
vgl aDer Inhalt des Akkus wird mit dem Inhalt des Speichers a verglichen.(Anm.: Im Vergleichsregister steht 5-Inhalt a.)
vwg testFalls beide Zahlen gleich sind, arbeite in Zeile 'test:' weiter.
mal 3Ansonsten mache hier weiter.
test:  


Programmteile, die in gleicher Form an mehreren Stellen gebraucht werden, können in Form eines Unterprogramms geschrieben werden. Unterprogramme werden mit dem Befehl 'rufe' (+ marke) aufgerufen. Das Programm merkt sich die aufrufende Adresse im Rücksprungadressenstack. Wenn das Programm auf den Befehl 'rufend' stößt, dann erfolgt ein Rücksprung zu der aufrufenden Adresse und es wird in der nächsten Zeile weitergearbeitet.

Ein Beispiel:Ausgabe:
text Hier HauptprogrammHier Hauptprogramm
rufe xyzHier Unterprogramm
text Hier HauptprogrammHier Hauptprogramm
endefertig
xyz:  
text Hier Unterprogramm  
rufend  


Computer nutzen oft die Möglichkeit Daten zur Zwischenabspeicherung in den Stack zu schreiben. Mit dem Befehl 'stein' wird der Akku-Inhalt in den Stack geschrieben; mit dem Befehl 'staus' wird das oberste Stack-Element in den Akku geladen. Sie müssen dabei berücksichtigen, dass der Wert, der als letztes in den Stack geschrieben wurde, als erster wieder herausgenommen wird.

DIE BEFEHLE I I
gehemarkeDas Programm verzweigt zu der angegebenen Marke.
vglzahl/speicherDer Akkumulator wird mit einer Zahl oder einem Speicherinhalt verglichen. Ergebnis = Akku - (zahl oder speicher)
vwumarke"verzweige wenn ungleich"
Das Programm verzweigt zu der angegebenen Marke, wenn das Ergebnis von "vgl" ungleich Null ist.
vwgmarke"verzweige wenn gleich"
Das Programm verzweigt zu der angegebenen Marke, wenn das Ergebnis von "vgl" gleich Null ist.
vwmmarke"verzweige wenn minus"
Das Programm verzweigt zu der angegebenen Marke, wenn das Ergebnis von "vgl" kleiner Null ist.
vwpmarke"verzweige wenn plus"
Das Programm verzweigt zu der angegebenen Marke, wenn das Ergebnis von "vgl" größer oder gleich Null ist.
rufemarkeEs wird ein Unterprogramm aufgerufen. Die aurufende Adresse wird im Rücksprungadressenstack gespeichert.
rufend----Rückkehr aus dem Unterprogramm.
stein----Der Akkumulatorinhalt wird im Stack gesichert.
staus----Das oberste Stackelement wird aus dem Stack genommen und in den Akkumulator geschrieben.