MINT üben

Weitere Programmiersprachen

Zehn mehrschrittige Aufgaben: von Zeiteinheiten im Compiler-Modell über SQL-Abfragen und PHP-Ausgaben bis zu Rust-Besitz und Laufzeitfaktoren.

Dein Fortschritt:
0 / 0 Aufgaben
2

Aufgabenblock — AFB II

Zehn Aufgaben, in denen du mehrere Schritte verbinden musst: Zeiteinheiten im Compiler-Modell zählen, Typumwandlungen in zwei Sprachen verfolgen, SQL-Abfragen auswerten, PHP-Ausgaben vorhersagen, Rust-Besitz prüfen und Laufzeiten vergleichen. Jede Aufgabe hat zwei Teile a) und b). Wenn du nicht weiterkommst, helfen dir zwei gestufte Tipps — erst der Ansatz, dann der Rechenweg.

A1
Compiler oder Interpreter — Zeiteinheiten im Modell
AFB II

Ein Programm hat 5 Anweisungen: 3 stehen außerhalb einer Schleife und laufen je einmal, 2 stehen in einer Schleife mit 4 Durchläufen. Im Modell dauert das Übersetzen einer Anweisung 2 Zeiteinheiten (ZE), das Ausführen 1 ZE. Der Compiler übersetzt jede Anweisung genau einmal vor dem ersten Start. Der Interpreter übersetzt jede Anweisung bei jeder Ausführung neu.

a) Wie viele ZE braucht der Interpreter für einen Programmlauf? b) Das kompilierte Programm wird fünfmal gestartet, ohne neu zu übersetzen. Wie viele ZE braucht der Compiler-Weg insgesamt (Übersetzen plus fünf Läufe)?

ZE
ZE
Ansatz: Zähle zuerst, wie viele Anweisungen bei einem Lauf ausgeführt werden. Beim Interpreter kostet jede Ausführung Übersetzen + Ausführen. Beim Compiler fällt das Übersetzen nur einmal pro Anweisung an, das Ausführen bei jedem Lauf.
Rechenweg: Ausführungen pro Lauf: 3 + 2 · 4 = 11. Interpreter: 11 · (2 + 1) ZE. Compiler: 5 Anweisungen · 2 ZE zum Übersetzen, dann 5 Läufe · 11 ZE.
Vollständige Lösung

a) Bei einem Lauf werden 3 + 2 · 4 = 11 Anweisungen ausgeführt. Der Interpreter übersetzt jede davon neu: 11 · (2 + 1) = 33 ZE.

b) Der Compiler übersetzt die 5 Anweisungen einmal: 5 · 2 = 10 ZE. Jeder Lauf kostet nur noch das Ausführen: 11 ZE. Bei fünf Starts: 10 + 5 · 11 = 65 ZE. Der Interpreter bräuchte für fünf Läufe 5 · 33 = 165 ZE.

Hinweis: Das Modell zeigt die Grundidee. Echte Interpreter und JIT-Compiler merken sich schon übersetzte Teile und sind deshalb schneller, als das Modell vermuten lässt.

A2
Gleicher Code, zwei Sprachen — Typumwandlung verfolgen
AFB II

Derselbe Algorithmus steht einmal in JavaScript und einmal in PHP:

JavaScript
let a = "4";
let b = 2;
let c = a * b + a;
console.log(c - 4);
PHP
<?php
$a = "4";
$b = 2;
$c = $a * $b + $a;
echo $c - 4;
?>

a) Welche Zahl gibt JavaScript aus? b) Welche Zahl gibt PHP aus?

Ansatz: Rechne Zeile für Zeile und schreibe nach jedem Schritt auf, ob der Wert eine Zahl oder ein Text ist. JavaScript: * und - machen Zahlen, + mit einem Text verkettet. PHP: + rechnet immer.
Rechenweg: JavaScript: a * b = 8 (Zahl), 8 + "4" = "84" (Text), "84" - 4 = ? — PHP: $a * $b = 8, 8 + "4" = 12, 12 - 4 = ?
Vollständige Lösung

a) JavaScript: a * b: Das * wandelt "4" in 4 um, also 8 (Zahl). 8 + a: Weil a ein Text ist, verkettet + → c ist der Text "84". c - 4: Das - wandelt "84" in die Zahl 84 um → Ausgabe 80.

b) PHP: $a * $b = 8. 8 + "4": In PHP rechnet + immer, also 12. 12 - 4 → Ausgabe 8.

Hinweis: Beide Sprachen sind dynamisch typisiert, wandeln aber verschieden um. In Python ergäbe "4" * 2 sogar "44" (Text wiederholt), und spätestens c - 4 bräche mit einem TypeError ab.

A3
Die Playlist der Schulband
AFB II

Die Schulband speichert ihre Songs in der Tabelle songs (Dauer in Sekunden):

Tabelle songs
titelgenredauer
MorgenrotPop215
LaternenPop184
NachtbusRock243
PapierfliegerPop176
FunkstilleHip-Hop198
SommerregenPop199
EchoRock167
KompassPop231
SQL
SELECT titel, dauer FROM songs
WHERE genre = 'Pop' AND dauer < 200
ORDER BY dauer DESC;

a) Wie viele Zeilen hat die Ergebnistabelle? b) Welche Dauer steht in der ersten Zeile der Ergebnistabelle?

Zeilen
s
Ansatz: Arbeite die Abfrage in der Reihenfolge ab, in der eine Datenbank sie auswertet: erst FROM und WHERE (welche Zeilen bleiben?), dann ORDER BY (wie werden sie sortiert?), zuletzt SELECT (welche Spalten werden gezeigt?).
Rechenweg: Pop-Songs: Morgenrot 215, Laternen 184, Papierflieger 176, Sommerregen 199, Kompass 231. Davon unter 200 s: Laternen, Papierflieger, Sommerregen. Nun absteigend nach Dauer sortieren — DESC heißt: größter Wert zuerst.
Vollständige Lösung

a) genre = 'Pop' trifft auf 5 Songs zu. dauer < 200 schließt Morgenrot (215) und Kompass (231) aus. Es bleiben Laternen (184), Papierflieger (176) und Sommerregen (199): 3 Zeilen.

b) ORDER BY dauer DESC sortiert absteigend: Sommerregen 199, Laternen 184, Papierflieger 176. In der ersten Zeile steht 199.

Hinweis: Funkstille (198 s) ist kürzer als 200 s, aber kein Pop — bei AND müssen beide Bedingungen gelten.