Ein Fund im Computermuseum
AFB I–IIBeim Projekttag im Computermuseum entdeckt Lina eine Schautafel. Sie zeigt denselben Auftrag „addiere a und b und speichere das Ergebnis in summe“ auf drei Ebenen A, B und C. Daneben steht ein Hinweis: „Ein Buchhaltungsprogramm von 1982 wurde für einen damaligen Prozessor in Assembler geschrieben. Ein zweites Programm aus demselben Jahr ist in C geschrieben.“
- Nenne die Fachbegriffe für die Ebenen A, B und C.
- Beschreibe, wie aus der Zeile in Ebene A ein Programm wird, das der Prozessor ausführen kann. Verwende dabei die Begriffe Übersetzer und Maschinencode.
- Erkläre, warum das Assemblerprogramm von 1982 auf einem heutigen Laptop mit anderem Prozessortyp nicht ohne Weiteres läuft, das C-Programm aber mit wenig Aufwand wieder lauffähig gemacht werden kann.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
A: Hochsprache (hier C), B: Assembler(sprache), C: Maschinensprache (Maschinencode).
Erwartungshorizont zu Aufgabe b)
Der Prozessor versteht nur Maschinencode (Ebene C). Ein Übersetzer überträgt die Hochsprachenzeile deshalb vor der Ausführung in Maschinenbefehle; in der Abbildung ist Ebene B als Zwischenschritt gezeigt. Aus einer Zeile Hochsprache werden dabei drei Befehle: a laden, b addieren, Ergebnis in summe speichern. Erst dieser Maschinencode wird vom Prozessor ausgeführt.
Erwartungshorizont zu Aufgabe c)
Assembler ist prozessorabhängig: Jeder Befehl entspricht genau einem Maschinenbefehl eines bestimmten Prozessortyps, auch die Register wie AX gehören zu diesem Prozessor. Auf einem anderen Prozessortyp gibt es diese Befehle nicht — das Programm müsste neu geschrieben werden. Der C-Quelltext beschreibt die Aufgabe dagegen unabhängig vom Prozessor. Man übersetzt ihn mit einem Compiler für den neuen Prozessor neu und erhält passenden Maschinencode.
Stammbaum für die Schülerzeitung
AFB II–IIIDie Schülerzeitung plant eine Seite „Familienstammbaum der Programmiersprachen“. Mira hat dasselbe kleine Programm in vier Sprachen gesammelt: Es addiert die Zahlen von 1 bis 10 und gibt 55 aus. Ihr Mitschüler Tim meint dazu: „Alte Sprachen wie COBOL oder C braucht heute niemand mehr — man sollte nur noch die neueste Sprache lernen.“
#include <stdio.h> int main(void) { int summe = 0; for (int i = 1; i <= 10; i++) { summe = summe + i; } printf("%d\n", summe); return 0; }
public class Summe { public static void main(String[] args) { int summe = 0; for (int i = 1; i <= 10; i++) { summe = summe + i; } System.out.println(summe); } }
class Summe { static void Main() { int summe = 0; for (int i = 1; i <= 10; i++) { summe = summe + i; } System.Console.WriteLine(summe); } }
summe = 0 for i in range(1, 11): summe = summe + i print(summe)
- Vergleiche die Listings 1 bis 3 hinsichtlich Blöcken, Anweisungsende, Schleifenkopf und Ausgabe.
- Ordne Listing 4 in den Stammbaum ein: Gehört Python zur C-Familie? Begründe anhand des Codes.
- Erläutere am Beispiel von Rust, warum trotz vieler vorhandener Sprachen immer wieder neue entstehen.
- Nimm Stellung zu Tims Aussage.
Hinweise
Hinweis zu Aufgabe a)
Hinweis zu Aufgabe b)
Hinweis zu Aufgabe c)
Hinweis zu Aufgabe d)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
Gemeinsam: Blöcke in geschweiften Klammern { }, jede Anweisung endet mit ;, identischer Schleifenkopf for (int i = 1; i <= 10; i++), Variable mit Typ int. Unterschiede: Programmrahmen (C: Funktion main mit #include; Java und C#: Klasse mit main bzw. Main), Ausgabe (printf, System.out.println, Console.WriteLine).
Erwartungshorizont zu Aufgabe b)
Python gehört nicht zur C-Familie im engeren Sinn: Blöcke werden durch Einrückung und Doppelpunkt gebildet, es gibt keine Semikolons und keine Typangabe int, die Schleife läuft mit range(1, 11) statt Zählkopf. Die Idee (Variable, Schleife, Ausgabe) ist gleich, die Syntax nicht.
Erwartungshorizont zu Aufgabe c)
Neue Sprachen reagieren auf neue Anforderungen. C ist schnell, erlaubt aber Speicherfehler, die zu Abstürzen und Sicherheitslücken führen. Rust (Version 1.0 im Jahr 2015) soll ähnlich schnell sein, aber Speicherfehler schon beim Übersetzen verhindern. Ebenso entstanden FORTRAN für Formeln, COBOL für Geschäftsdaten und Java, JavaScript und PHP für das Web.
Erwartungshorizont zu Aufgabe d)
Die Aussage ist in dieser Form nicht haltbar. Gegen Tim: COBOL-Programme laufen bis heute in Banken und Versicherungen, C wird für Betriebssysteme und Mikrocontroller eingesetzt — dafür braucht man Fachleute. Außerdem zeigen die Listings, dass viele Sprachen C-Syntax übernommen haben; wer C kennt, liest Java und C# schneller. Für Tim spricht: Neue Sprachen wie Rust beheben Schwächen älterer. Ein begründetes Fazit, z. B. „Entscheidend ist der Einsatzzweck, nicht das Alter“, gilt als vollständige Antwort.
