Die Minimaschine V4.0 bringt zwei wesentliche Neuerungen
Mit der Ergänzung als Webversion kann die Minimschine auch überall dort verwendet werden, wo Einschränkungen bei den Installationsmöglichkeiten oder Einschränkungen bei den verfügbaren Ressourcen den Einsatz der Minimaschine behindert haben.
Die Ergänzung von Pseudocode als Hochsprache für die Minimaschine erlaubt es insbesondere, die Lösung
von Aufgabenstellungen in Pseudocode oder Aufgabenstellungen mittels Struktogramm sehr schnell zu überprüfen.
Gleichzeitig lässt sich mit der Pseudocodeübersetzbarkeit leicht der Bogen von den Hochsprachen zur Maschinenebene
schlagen; es kann damit nebenher gezeigt werden, dass die händische Übersetzung von Hochsprachenkonstrukten im
Wesentlichen die gleichen Ergebnisse bringt, wie die automatische Übersetzung.
Die vorliegende Version ist eine Testversion. Insbesondere sind die Programme zwar ausführlich getestet, aber gerade in der Webversion können (JavaScript ist leider eine sehr typische Interpretersprache ohne irgendwelche Vorabkontrolle über Korrektheit von Datentypen oder Vorhandsein von Variablen) noch Fehler an Stellen vorhanden sein, die bei den Tests noch nicht benutzt wurden.
In der Webversion wird auf die alte Minisprache verzichtet; für Aufgabenstellungen in den Lehrbüchern, welche Minisprachenvorlagen verwenden, wird die entsprechende Vorlage in Pseudosprache zur Verfügung gestellt.
Die Minimaschine ist zur Zeit als Version 4.0 beta 5 verfügbar.
Folgende Ressourcen können genutzt werden:
Neben kleinen Fehlerkorrekturen ist der Hauptunterschied die zusätzliche Verfügbarkeit des Compilers
für Pseudocode.
Die Eingabe von Pseudocodeprogrammen erfolgt genau so, wie die von Assembler- bzw. Minisprachenprogrammen.
Bei Ausführen der Menüpunkte "Übersetzen" bzw. "Assemblertext anzeigen" wird anand des Programmtextes
automatisch entschieden, ob ein Programm in Pseudocode oder in Minisprache vorliegt.
An der Oberfläche / Bedienbarkeit wurden keine Änderungen vorgenommen.
Aufgrund der unterschiedlichen Bedienbarkeitsanforderungen (speziell automatische Anpassung an die Bildschirmgröße)
wurde die Oberfläche etwas umstrukturiert. Die drei relevanten Anzeigeelemente (CPU, Speicher, Editor) wurden
zusammen mit ihren als Knöpfe umgesetzten Bedienelementen jeweils zu einer Anzeigeeinheit verbunden, die dann
je nach Bildschirmgröße und -orientierung nebeneinander, teils nebeneinander oder untereinander angezeigt werden.
Die bekannten Grundstrukturen und Optionen wurden vollständig bei behalten, so dass insbesondere die parallele
Nutzung von Desktop- und Webvariante ohne weiteres möglich ist.

Die exakte Festlegung von Pseudocode als Hochsprache entspricht genau den Festlegungen, die in den
Cornelsen-Büchern ab der 9. Jahrgangsstufe verwendet wird.
In der Version mit dem Basisbefehlssatz der Minimaschine werden alle angesprochenen Algorithmenelemente umgesetzt.
Als Datentypen sind GANZZAHL und WAHRHEITSWERT sowie rudimentäre Felder (Festsetzung der Länge beim Übersetzen)
vorhanden. Typgleichheit wird (wie in Java, Swift oder Kotlin) über strukturelle Gleichheit festgelegt;
inbsbesondere bedeutet das, dass zwei Felder mit gleicher Länge und gleichem Basistyp einander zugewiesen werden
können. Auch die Operratorreihenfolge entspricht der von Java, Swift bzw. Kotlin, so dass Klammerungen und
Operatorrangfolge in Ausdrücken und speziell auch Bedingungen gleich aussehen.
Programm = "programm" Zeile { Variablenvereinbarung } Block "endeprogramm" Zeile .
Variablenvereinbarung = [ ( "attribut" | "var" ) Name { "," Name } ":" Typ ] Zeile .
Typ = Name | "FELD" "<" Name ">" "[" Zahl "]" .
Block = Anweisung { Anweisung } .
Anweisung = [ Zuweisung | BedingteAnweisung | MehrfachAuswahl | WiederholungEingang | WiederholungEnde | WiederholungZaehl | WiederholungAlle | Zeile] .
Zuweisung = Name [ "[" Ausdruck "]" ] "=" Ausdruck Zeile .
Ausdruck = AusdruckUnd { "oder" AusdruckUnd } .
AusdruckUnd = AusdruckVergleich { "und" AusdruckVergleich } .
AusdruckVergleich = AusdruckStrich Vergleich AusdruckStrich .
Vergleich = "==" | "!=" | "<" | ">" | "<=" | ">=" .
AusdruckStrich = AusdruckPunkt { ( "+" | "-" ) AusdruckPunkt } .
AusdruckPunkt = Faktor { ( "*" | "/" | "%" ) Faktor } .
Faktor = ( "+" | "-" | "nicht" ) Faktor | Name [ "[" Ausdruck "]" ] | Zahl | "(" Ausdruck ")" .
BedingteAnweisung = "falls" Ausdruck "dann" Zeile Block { "sonstfalls" Ausdruck "dann" Zeile Block } [ "sonst" Zeile Block ] "endefalls" Zeile .
MehrfachAuswahl = "unterscheide" Ausdruck Zeile { "fall" Zahl { "," Zahl } ":" Zeile Block } [ "sonst" ":" Zeile Block ] "endeunterscheide" .
WiederholungEingang = "wiederhole" "solange" Ausdruck Zeile Block "endewiederhole" Zeile .
WiederholungEnde = "wiederhole" Zeile Block "bis" Ausdruck Zeile .
WiederholungZaehl = "zähle" Name "von" Ausdruck "bis" Ausdruck [ "schritt" [ "+" | "-" ] Zahl ] Zeile Block "endezähle" Zeile .
WiederholungAlle = "für" ( "alle" | "jedes" ) Name "in" Name Zeile Block "endefür" Zeile .
Name = Zeichen { Zeichen | Ziffer | "_" } .
Zahl = Ziffer { Ziffer } .
Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" .
Zeichen = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" |
"Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "Ä" | "Ö" | "Ü" |
"a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" |
"q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "ä" | "ö" | "ü" | "ß" .
Zeile = [ Kommentar ] "\n" .
Kommentar = "//" { Alle Zeichen außer \n } .
$Programm
Programm = "programm" Zeile { Variablenvereinbarung | Prozedurvereinbarung } Block "endeprogramm" Zeile .
Variablenvereinbarung = [ ( "attribut" | "var" ) Name { "," Name } ":" Typ ] Zeile .
Prozedurvereinbarung = "methode" Name "(" [ Parameterliste ] ")" [ "->" Typ ] Zeile { Variablenvereinbarung } Block endemethode Zeile .
Parameterliste = Parameter {"," Parameter} .
Parameter = Name ":" Typ .
Typ = Name | "FELD" "<" Name ">" "[" Zahl "]" .
Block = Anweisung { Anweisung } .
Anweisung = [ Zuweisung | BedingteAnweisung | MehrfachAuswahl | RückkehrAnweisung | ProzedurAufrufAnweisung |
WiederholungEingang | WiederholungEnde | WiederholungZaehl | WiederholungAlle | Zeile ] .
Zuweisung = Name [ "[" Ausdruck "]" ] "=" Ausdruck Zeile .
Ausdruck = AusdruckUnd { "oder" AusdruckUnd } .
AusdruckUnd = AusdruckVergleich { "und" AusdruckVergleich } .
AusdruckVergleich = AusdruckStrich Vergleich AusdruckStrich .
Vergleich = "==" | "!=" | "<" | ">" | "<=" | ">=" .
AusdruckStrich = AusdruckPunkt { ( "+" | "-" ) AusdruckPunkt } .
AusdruckPunkt = Faktor { ( "*" | "/" | "%" ) Faktor } .
Faktor = ( "+" | "-" | "nicht" ) Faktor | Name [ "[" Ausdruck "]" ] | Zahl | | ProzedurAufruf | "(" Ausdruck ")" .
BedingteAnweisung = "falls" Ausdruck "dann" Zeile Block { "sonstfalls" Ausdruck "dann" Zeile Block } [ "sonst" Zeile Block ] "endefalls" Zeile .
MehrfachAuswahl = "unterscheide" Ausdruck Zeile { "fall" Zahl { "," Zahl } ":" Zeile Block } [ "sonst" ":" Zeile Block ] "endeunterscheide" .
WiederholungEingang = "wiederhole" "solange" Ausdruck Zeile Block "endewiederhole" Zeile .
WiederholungEnde = "wiederhole" Zeile Block "bis" Ausdruck Zeile .
WiederholungZaehl = "zähle" Name "von" Ausdruck "bis" Ausdruck [ "schritt" [ "+" | "-" ] Zahl ] Zeile Block "endezähle" Zeile .
WiederholungAlle = "für" ( "alle" | "jedes" ) Name "in" Name Zeile Block "endefür" Zeile .
RückkehrAnweisung = "return" [ Ausdruck ] Zeile .
ProzedurAufrufAnweisung = ProzedurAufruf Zeile .
ProzedurAufruf = Name "(" [ Ausdruck { "," Ausdruck } ] ")" .
Name = Zeichen { Zeichen | Ziffer | "_" } .
Zahl = Ziffer { Ziffer } .
Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" .
Zeichen = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" |
"Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "Ä" | "Ö" | "Ü" |
"a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" |
"q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "ä" | "ö" | "ü" | "ß" .
Zeile = [ Kommentar ] "\n" .
Kommentar = "//" { Alle Zeichen außer \n } .
$Programm
Die Beispiele beziehen sich auf Aufgaben oder Lehrtextbeispiele aus den Cornelsen-Büchern.
Das Programm passt zu Aufgabe 3 aus Band 6 eN, Seite 134 bzw. Band 7 gN, Seite 62 bzw. Band 3 allg., Seite 128
programm A3
var a, b, c, d: GANZZAHL
var res_i, res_ii, res_iii, res_iv: GANZZAHL
a = 1
b = 2
c = 3
d = 4
res_i = (a + b) / c
res_ii = a + (b - c) * d
res_iii = a - (b + c) * (b - c)
res_iv = a * a + b * b
endeprogramm
Das Programm passt zu Aufgabe 5 aus Band 6 eN, Seite 155 bzw. Band 7 gN, Seite 83 bzw. Band 3 allg., Seite 151
programm A5
var anzahl, gesamtpreis: GANZZAHL
anzahl = 17
gesamtpreis = 200
falls anzahl > 15 oder gesamtpreis > 300 dann
gesamtpreis = gesamtpreis - 20
endefalls
falls anzahl > 15 und gesamtpreis > 300 dann
esamtpreis = gesamtpreis - 20
endefalls
endeprogramm
Das Programm passt zum Lehrtext aus Band 7 eN, Kapitel 4.2 bzw. Band 7 gN, Kapitel 3.2 bzw. Band 3 allg., Kapitel 5.2
programm bubblesort var feld: FELD[10] var vertauscht: WAHRHEITSWERT var hilf: GANZZAHL //Vorbesetzen feld[0] = 15 feld[1] = 4 feld[2] = 20 feld[3] = 17 feld[4] = 11 feld[5] = 6 feld[6] = 8 feld[7] = 2 feld[8] = 14 feld[9] = 9 //Sortieren vertauscht = WAHR wiederhole solange vertauscht vertauscht = FALSCH zähle i von 0 bis 8 falls feld[i] > feld[i+1] dann hilf = feld[i] feld[i] = feld[i+1] feld[i + 1] = hilf vertauscht = WAHR endefalls endezähle endewiederhole endeprogramm
Dieses Programm nutzt Methoden (Prozeduren). Es passt zu Band 6 eN / gN Kapitel 3.1 Aufgabe 4a bzw.
programm Fakultaet var res: GANZZAHL methode Fak(nr:GANZZAHL) -> GANZZAHL falls nr == 1 dann return 1 sonst return nr * Fak(nr - 1) endefalls endemethode res = Fak(6) endeprogramm