Springe zum Inhalt oder Footer
SerloDie freie Lernplattform

Taschenrechner

Das Rechnen ist eine Fähigkeit, in der uns Computer weit überlegen ist. Computer sind darin super schnell und präzise und machen eigentlich keine Fehler.

Bild

Die Treppen und Burgen von Robot Karol sind ja schön anzuschauen - aber um sich als praktische Sprache zu beweisen muss Karol zeigen, dass sie auch mit Zahlen umgehen kann.

Du: Aber Robot Karol besitzt gar keine Methoden zum Rechnen!?

InformatikerIn: hold my beer

3 hours later

It's done!

Eine InformatikerIn braucht keine vorgefertigten Methoden, wenn sie sich diese auch selber bauen kann. Dieser Artikel zeigt eine Möglichkeit, wie es geht. Ich versuche die einzelnen Schritte möglichst anschaulich darzustellen und zu erklären. Du kannst das Programm selbst mitprogrammieren.

Informationen darstellen

Bild

Wir verwenden eine sehr einfache Form der Zahlendarstellung: Die Zahl wird durch die Anzahl der Ziegel bestimmt, die übereinander liegen. Damit kann Karol gut arbeiten und ist auch schön anschaulich. Wir beschränken uns für das Erste auf den Zahlenbereich von 1 bis 9.

Rechenzeichen werden mit Marken gelegt. Im Bild oben sieht man die Rechnung 2+4=62+4=6. Hier sind jeweils noch die anderen Rechenarten dargestellt:

Bild

Ich habe mir diese Darstellung ausgesucht, weil sie schön anzuschauen ist. Ist hat man natürlich die Freiheit, andere Darstellungen zu verwenden. Diese Freiheit ist auch das Schöne am Programmieren.

Rechenart auslesen

Jetzt geht es ans Programmieren! Ich werde den didaktisch-wertvollen Weg gehen und nur mit Blöcken arbeiten. Das ist manchmal etwas leidvoll, aber irgendwie macht mir das auch Spaß - weird. Anyways. Nur mit Blöcken zu arbeiten heißt auch, dass ich wirklich nur Bausteine verwende, die schon bekannt sind. Keine geheimen Tricks. Alles transparent.

Let's go. Zuerst muss Karol erkennen, um welche Rechenart es sich handelt. Für jede Rechenart gibt es ein anderes Verfahren.

Bild

Ich teste zuerst das untere Feld. Wenn dort eine Marke liegt, dann kann es nur die Addition oder die Division sein. Um diese zu unterscheiden, gehe ich ein Feld rüber.

Falls auf dem Feld keine Marke liegt, dann sind es die beiden anderen Rechenarten. Um diese zu unterscheiden gehe ich ein Feld diagonal nach oben rechts. Mit bedingten Anweisungen sieht es so aus:

Bild

Hier haben wir also schön die 4 Rechenarten aufgetrennt und können uns einem nach dem anderen widmen.

1. Addition

Erstmal der grobe Plan: Ich gehe jeden der beiden Summanden durch und lege für den Ziegel ein Ziegel im Ergebnis. Es wird also zwei Programmteile geben, die recht ähnlich sind. Allerdings muss ich beachten, dass ich die Ziegel mit abbauen. Das macht und leider ein wenig mehr Arbeit.

1.1. Gehe zu Start

Bild

Karol muss erstmal wieder zur Startposition Das geht mit folgenden 5 Befehlen:

Bild

Schreibe alle folgenden Unterabschnitte nacheinander - sie sollen nicht verschachtelt sein.

1.2. Markiere Stapel

Wir wollen den Stapel nicht abbauen, deshalb brauchen wir eine andere Möglichkeit, die Position im Stapel zu speichern. Ich nutze dafür eine Marke. Die Anzahl der leeren Felder bis zur Wand entspricht dem aktuellen Wert:

Bild

Karol soll also an den Ziegeln entlang gehen, die Marke setze und sich Richtung Wand drehen:

Bild

1.3. Anzahl Ziegel im Ergebnis legen

Bild

Jetzt wird Karol ihre Runden drehen. Dabei wird sie in 1.3.0 am Anfang des Ergebnis stapels stehen, in 1.3.1 zum Ende des Stapels laufen, in 1.3.2 den Ziegel setzen, in 1.3.3. zurücklaufen und schließelich in 1.3.4 die Marke um eins verschicken.

Bild
Bild

Sobald zwischen der Marke und der Wand keine Ziegel mehr liegen, hat Karol diesen Teil abgeschlossen:

Bild

1.4. Zum nächsten Summand

Bild

Wir sind mit dem ersten Summanden fertig, können also die Marke löschen und uns vorwärts bewegen.

Bild

1.5 Und nochmal markieren

Bild

Anderer Stapel, gleiche Prozedur. Wir gehen wie bei 1.2. zum oberen Ende des Stapels und setzen eine Marke.

Bild

1.6. Und nochmal ins Ergebnis kopieren

Dieser Teil entspricht fast 1-zu-1 dem Abschnitt 1.3. Wichtiger Unterschied sind die Anzahl der Schritte, um beim Ergebnis anzukommen. Du kannst das gesamte "wiederhole" kopieren (Rechtsklick) und wieder einfügen.

Bild
Bild

1.7. Abschluss

Jetzt noch die Marke löschen, dann ist die Arbeit getan:

Bild

Hier das Ergebnis:

Bild

3. Subtraktion

Tja, weil ich lieber die Reihenfolge im Code richtig halten möchte, machen wir jetzt mit der Subtraktion weiter.

Bild

Die Rechnung lautet 74=37-4=3. Glücklicherweise zeige ich dir meine 2. Version, die ich programmiert habe, die um 30 Blöcke kürzer ist als meine erste Version. Das klappt mit folgendem Trick:

3.1. Gehe zu Subtrahend

Bild

Wir fangen diesmal mit dem 2. Stapel an - im mathematischen Jargon der Subtrahend.

Bild

3.2. Gehe zu Ende des Stapels

Bild

Wir messen wieder den Stapel ab, aber setzen diesmal keine Marke.

Bild

Stattdessen wollen wir im Subtrahend einen Ziegel so setzen, dass wir nur die nötige Anzahl an Ziegel kopieren.

3.3. Markiere im Minuend

Bild

Dadurch wird ein Hilfsziegel gelegt. Die Ausgabe zeigt an, dass er eigentlich weg soll - machen wir dann später.

Bild

3.4. Gehe zu Start

Bild

Wir stellen uns in die Ausgangslage.

Bild

3.5. Markiere Stapel

Bild

Ein alter Bekannter. Der Code ist 1-zu-1 der gleiche.

Bild

Schaue dir an: zwischen der Marke und dem Ziegel liegen genau 3 freie Felder. Für jedes freie Feld legen wir nun einen Ziegel im Ergebnis.

3.6. Ins Ergebnis kopieren.

Dieser Code verfolgt uns immer wieder. Das gleiche Konstrukt wie in 1.3., nur mit einer anderen Bedingung: Anstatt bis zur Wand zu laufen, laufen wir nur bis zum Ziegel. Der Rest ist 1-zu-1 gleich geblieben.

Bild
Bild

Und schau mal, das sieht schon mal sehr gut aus.

Bild

3.7. Aufräumen

Bild

Die letzten Sachen noch aufräumen, dann sind wir fertig.

Bild

Der Auftrag ist erfolgreich erfüllt. Wir können außerdem davon ausgehen, dass die Subtraktion immer möglich ist, d.h. es kommen keine negativen Zahlen vor.

4. Multiplikation

Immer noch dabei? Wow, Respekt. Als nächstes ist die Multiplikation dran.

4.1. Gehe zu Start

Bild

Damit steht Robot Karol für den Auftrag bereit.

Bild

4.2. Markiere Stapel

Bild

Unser alter Freund.

Bild

4.3. Äußere Schleife

Bild

Bei der Addition hat es gereicht, die Stapel nacheinander zu kopieren. Das wird jetzt für die Multiplikation nicht mehr reichen. Wir müssen weiter und noch tiefer verschachteln.

Bild

Konkret heißt das jetzt, dass wir in dieser äußeren Schleife nochmal eine Schleife haben werden.

Bild
Bild
Bild

Man muss relativ gut aufpassen, auf welcher Ebene man welche Befehle einfügt. Die innere Schleife 4.3.3. kümmert sich darum, dass der zweite Stapel in das Ergebnis kopiert wird. Das machen wir eben so oft, wie der erste Stapel hoch ist - eine Multiplikation:

Bild

4.4 Aufräumen

Bild

Letzte Kleinigkeit, dann ist der Auftrag erfüllt.

Bild

2. Division

Let's go, nur noch eine Rechenart zu erledigen.

2.1. Start

Bild

Diesmal starten wir von der anderen Seite. Einfach mal bisschen Abwechslung.

Bild

Das Prinzip ist so: Wir wollen solange den 2. Stapel an den ersten Stapel anlegen, bis dieser voll ist. Für jeden Durchlauf zählen wir im Ergebnis 1 hoch. Das tun wir in einer Schleife.

2.2. Äußere Schleife

Achtung, Code-Dump incoming:

Bild
Bild
Bild
Bild

Hier siehst du den Zwischenschritt nach einem Durchlauf.

Bild

Die gelbe Marke wandert 3 nach oben, im Ergebnis wird 1 hochgezählt. Nach drei Wiederholungen hat Karol die Spitze erreicht und beendet das Programm

2.3 Aufräumen

Bild

Endzustand erreicht.

Bild

Zusammenfassung

Nach meiner Zählung sind das 359 Zeilen Code, mit denen wir Robot Karol das Rechnen beigebracht haben. In der Aufgabe findest du noch weitere Testfälle.

Ich hoffe, das war eine lehrreiche und interessante Erfahrung - auch wenn sie sicherlich einiges an Zeit und Gedul erfordert hat.

Bye


Dieses Werk steht unter der freien Lizenz
CC BY-SA 4.0Was bedeutet das?