Minimaschine V4.0 Vorschauversion

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.

Bereits vorhandene Möglichkeiten und Einschränkungen

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.

Verfügbare Ressourcen

Die Minimaschine ist zur Zeit als Version 4.0 beta 5 verfügbar.
Folgende Ressourcen können genutzt werden:

Unterschiede zu Version 3.2

Desktop-/Tabletvarianten

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.

Webversion

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.

Pseudocode als Hochsprache

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.

Syntax ohne Erweiterungen

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

Syntax mit Erweiterungen

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

Beispiele

Die Beispiele beziehen sich auf Aufgaben oder Lehrtextbeispiele aus den Cornelsen-Büchern.

Arithmetikbefehle

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

Bedingte Anweisung

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

Gemischte Kontrollstrukturen

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

Methodenverwendung

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

Rückmeldungen

Wenn Sie Fehler entdecken oder wenn Sie Anregungen bezüglich Funktionsweise, Bedienung, Darstellung usw. haben, teilen Sie mir Ihre Wünsche bitte mit.