Zur Themenwahl


Arbeiten mit dem Modellrechner DC (Didaktischer Computer)

Beim Programmieren - also bei der Formulierung von Algorithmen - treten bestimmte Strukturen häufig auf. Es ist zweckmäßig, diese Strukturen allgemein mit Maschinenbefehlen aufzubauen und in höheren Programmiersprachen als eigenständige Befehle zu formulieren. Dann können diese Strukturen bequem und 'lesbar' geschrieben werden. Von großer Bedeutung sind hier Schleifen. Das sind Programmteile, die (evtl.) mehrfach durchlaufen werden. Schleifen enthalten Programmcode für Anweisungen und eine Abbruchbedingung zum Verlassen der Schleife. Ist die Abbruchbedingung wahr, wird die Schleife verlassen und der auf den Schleifenbefehl folgende Befehl wird ausgeführt. Ist die Bedingung falsch, werden die Anweisungen bis zum Schleifenende ausgeführt und dann wird zum Schleifenanfang für einen erneuten Schleifendurchlauf zurückgesprungen.
Es werden hier verschiedene Schleifentypen angegeben mit ihrer Formulierung in den beiden problemorientierten Sprachen Javascript und Derive 5.

Wichtige Informationen und eine Download-Möglichkeit findet ihr auf der Seite
www.oberstufeninformatik.de

Ein Beispiel für das Lösen eines Problems mit dem Modellrechner

Organisation der Arbeit mit dem Modellrechner

  • Vor dem Schreiben eines Programms sollte der Lösungsweg (Algorithmus) durchdacht sein.
  • Die einzelnen Lösungsschritte müssen auf der Sprachebene des Modellrechners überlegt sein. Günstig kann das Anlegen eines Flussdiagramms sein.
  • Dann wird ein Editor wie Wordpad geöffnet und darin werden die Befehle und Daten zeilenweise in der Form Adresse Befehl (Beispiel: 0 JMP 4) oder Adresse DEF Wert (Beispiel: 2 DEF 10) geschrieben (keine weiteren Zeichen).
  • Eine sinnvolle Gliederung eines Programms: Auf Adresse 0 kommt ein Sprung zur ersten Befehlsadresse. Zwischen dieser Adresse und 0 werden die Daten (Konstanten und Anfangswerte für Variablen) gespeichert.
  • Das Programm wird in Wordpad gespeichert (Endung: .dc)
  • Dann wird der Text des Programms mit der Maus markiert und mit der rechten Maustaste kopiert (kommt in die Zwischenablage).
  • Danach wird der Modellrechner DC gestartet.
  • Im Menue von DC wird 'Einfügen' gewählt. Damit wird das Programm in den Speicher des Modellrechners geschrieben.
  • Das Laden eines Programms kann auch so erfolgen: Der Modellrechner wird gestartet. Mit der Eingabe L wird eine Liste gespeicherter Programme angezeigt. Daraus kann ein Programm gewählt werden.
  • Nun kann das Programm getestet werden.
  • Änderungen können im Direktmodus in den Modellrechner eingegeben werden.

Schleifen

Schleife mit Abbruchbedingung am Anfang

Schleife mit Abbruchbedingung am Ende

Zählschleife

Schleife mit beliebiger Abbruchbedingung

Ein Schleifenbeispiel (Zählschleife, Abbruchbedingung am Anfang)

Ein Programm für das Produkt zweier natürlicher Zahlen

Variablen

Das Konzept von J.v. Neumann sieht vor, dass Daten und Befehle in gleicher Weise unter bestimmten Adressen gespeichert werden. Dieses Konzept ermöglicht also das Ansprechen von Speicherinhalten über die Adressen.
In den höheren Programmiersprachen ermöglicht diese Konzeption eine besonders elegante Form der Formulierung von Lösungsschritten. Es handelt sich dabei um den Umgang mit Variablen, die bei mathematiktypischen Formulierungen vielfach auftreten.

In der Mathematik sind Variablen ‘Platzhalter’ für Elemente aus einer bestimmten Definitionsmenge. Mit Variablen können mathematische Ausdrücke für alle diese Elemente in einfacher Form geschrieben werden.
Üblich ist z.B. die Formulierung des Kommutativgesetzes für die Addition von reellen Zahlen in der Form a + b = b + a , wobei a und b Variablen für reelle Zahlen sind. Die Formel ist eigentlich eine Abkürzung für die wahre Aussage

Hierbei ist vereinbart, dass für a (und entsprechend für b) in der Formel jeweils die selbe Zahl einzusetzen ist.
In mathematischer Schreibweise kann x = 2 zwei unterschiedliche Bedeutungen haben: Es kann heißen, dass eine Gleichung gegeben ist (deren Lösung 2 ist, wenn x aus R ist). Es kann sich aber auch um die Zuweisung des Wertes 2 für die Variable x handeln. Welche Bedeutung gemeint ist, muss sich aus dem Zusammenhang mit anderem Text ergeben.

Beim Formulieren eines Computerprogramms muss aber klar sein, ob eine Gleichung (ein Vergleich) oder eine Wertzuweisung an eine Variable gemeint ist. Deshalb weicht die Syntax in Programmiersprachen von der mathematiküblichen Form ab. Beispiele:

In Derive wird für die Zuweisung x := 2 geschrieben und für die Gleichung x = 2 . Wird also in einem Derive-Programm x := 2 geschrieben, dann wird x im folgenden mathematischen Text stets durch 2 ersetzt. Wird dagegen x = 2 geschrieben, hat x damit keinen Wert zugewiesen bekommen, x bleibt eine freie Variable.

In Javascript wird für die Zuweisung x = 2 geschrieben und für die Gleichung x == 2.

Beim Programmieren spielt gerade die Wertzuweisung eine besondere Rolle. Allerdings erhält sie hier eine Bedeutung, die von der mathematischen Bedeutung abweicht. Schreibt man in Derive z.B. x:= x + 2, so gilt nicht mehr, dass für x jeweils der gleiche Wert einzusetzen ist, sondern diese Zuweisung erfolgt in bestimmtem, zeitlichen Ablauf: Die Auswertung des Ausdrucks beginnt rechts vom Zuweisungszeichen. Hier wird der bisherige Wert für x eingesetzt und der Wert des Terms wird berechnet. Dann wird dieser Wert zum neuen Wert von x. Die Zuweisung kann also den aktuellen x-Wert ändern. Beispiel in Derive:
x := 3 , x := 3x + 1 bewirkt, dass zunächst x den Wert 3 erhält und im nächsten Befehl den Wert 10.

Gerade bei Programmschleifen zeigt sich der Nutzen einer solchen Syntax. Man kann bei Schleifendurchläufen Variablenwerte ändern, ohne den Text der Schleife ändern zu müssen. Beispiel in Derive:
x:=0, summe:=0, loop(x:=x+1, summe:=summe+x, if(x=9, exit)), return summe
Hiermit wird 1 + 2 + 3 + 4 + ...+ 9 = 45 berechnet und 45 wird ausgegeben.

In der Programmiersprache scheint sich der Umgang mit Wertzuweisungen schwieriger zu gestalten, da die Werte von Variablen links und rechts vom Zuweisungszeichen unterschieden werden müssen. Erstaunlicher Weise ist das im Prinzip aber nicht so. Das geschieht durch die unmittelbare Umsetzung des J.v. Neumann-Konzepts: Die Adresse eines Speicherplatzes steht für die Variable und der Inhalt für den Wert der Variablen. x := x + 2 bedeutet dann, dass auf den Inhalt von x 2 addiert wird. Nach der Addition ist der Inhalt von x also um 2 vergrößert worden. Man schreibt auch [x] = [x] +2. Das wird gelesen als ‘Der neue Inhalt von x ist der alte Inhalt von x, auf den 2 addiert wird’. Die Wertzuweisung kann direkt umgesetzt werden in eine Folge von Modellrechner-Befehlen.
Sei 10 die Adresse für x, dann kann für x:=x+7 diese Folge von Befehlen geschrieben werden:
0 def 7
1 lda 10
2 add 0
3 sta 10

Lösungen der 1. Klausur

Es werden hier die kommentierten Lösungen zu 2a,b,c) angegeben

Zur Themenwahl