Was ist ein Programm?
Ein Algorithmus ist ein Plan in einzelnen Schritten, um ein Problem zu lösen. Ein Programm ist dieser Plan, aufgeschrieben in einer Sprache, die ein Computer versteht, zum Beispiel Python, Scratch, Java oder C. Der Computer tut genau das, was im Programm steht, nicht mehr und nicht weniger.
Die meisten Programme folgen dem Muster Eingabe → Verarbeitung → Ausgabe: Daten hereinholen, damit arbeiten, ein Ergebnis liefern. Bevor du programmierst, plane mit Pseudocode (Schritte in einfacher Sprache) oder einem Flussdiagramm.
Sequenz heißt: Die Anweisungen laufen der Reihe nach von oben nach unten. Wenn du die Reihenfolge änderst, kann sich das Ergebnis ändern.
Variablen und Datentypen
Eine Variable ist ein Speicherplatz mit Namen für einen Wert. score = 0 ist eine Zuweisung: Sie legt die 0 in die Kiste namens score. score = score + 5 liest den alten Wert, addiert 5 und speichert den neuen Wert.
Häufige Datentypen:
- Integer (ganze Zahl): z. B. 42
- Real / Float (Kommazahl): z. B. 3.5
- String (Text): z. B. "Asha"
- Boolean (Wahrheitswert): True oder False
Eine Konstante ist ein Wert, der sich während des Programmlaufs nicht ändert, wie die Anzahl der Tage in einer Woche. Gute Namen (total_marks statt x) machen den Code leicht lesbar.
Selektion und Iteration
Selektion (if / else)
Ein Programm prüft eine Bedingung, die entweder True oder False ist, und führt dann genau einen Zweig aus.
if marks >= 33:
print("Pass")
else:
print("Try again")Bedingungen nutzen Vergleichsoperatoren (==, !=, <, >, <=, >=) und logische Operatoren (and, or, not).
Iteration (Schleifen)
- Zählschleife (for): wiederholt eine feste Anzahl von Malen.
for i in range(1, 5):läuft mit i = 1, 2, 3, 4. - Bedingungsschleife (while): wiederholt, solange eine Bedingung True ist. Im Inneren muss sich etwas ändern, sonst läuft sie ewig.
Funktionen und modularer Aufbau
Eine Funktion (auch Unterprogramm, Prozedur oder Methode genannt) ist ein Codeblock mit Namen. Du definierst sie einmal und rufst sie auf, wann immer du sie brauchst.
def area(length, width):
return length * width
print(area(4, 3)) # 12- Parameter (length, width) sind die Eingaben der Funktion. Die Werte, die du übergibst (4, 3), heißen Argumente.
- return schickt ein Ergebnis zurück.
- Eine Variable, die in einer Funktion entsteht, ist lokal. Außerhalb ist sie nicht sichtbar.
Modularer Aufbau heißt: Ein großes Problem wird in kleine Teile zerlegt (Zerlegung), und jeder Teil wird als eigene Funktion geschrieben und getestet. Vorteile: weniger doppelter Code, leichteres Testen, Teamarbeit, und eine Korrektur wirkt an jeder Stelle, an der die Funktion benutzt wird.
Testen, Fehlersuche und Code-Pflege
Es gibt drei Arten von Fehlern:
- Syntaxfehler: verstößt gegen die Regeln der Sprache (fehlender Doppelpunkt oder fehlende Klammer). Das Programm startet nicht.
- Laufzeitfehler: tritt während des Laufs auf, z. B. Division durch null.
- Logikfehler: Das Programm läuft, gibt aber die falsche Antwort, z. B. eine Schleife, die einmal zu wenig läuft (Off-by-one).
Testen nutzt normale Daten, Grenzdaten (am Rand, z. B. genau 33 Punkte) und ungültige Daten (z. B. -5 Punkte). Eine Trace-Tabelle notiert den Wert jeder Variablen Zeile für Zeile, um die Stelle des Fehlers zu finden.
Gut wartbarer Code hat sinnvolle Namen, Kommentare, die das Warum erklären, einheitliche Einrückung, kleine Funktionen und keine hineinkopierten Blöcke. Programmierer nutzen außerdem Versionsverwaltung, um den Verlauf der Änderungen festzuhalten.
Ausprobieren: Roboter ohne Computer
Bitte eine Freundin oder einen Freund, der Roboter zu sein. Schreibe Anweisungen auf Papier und benutze nur: step, turn left, turn right, repeat n und if wall: turn. Führe ihn von der Tür zu einem Stuhl. Hat der Roboter genau das getan, was du aufgeschrieben hast? Behebe die Bugs und versuche es noch einmal. Öffne dann das freie Spiel in 3D und sage voraus, wo der Roboter anhält, bevor du irgendetwas drückst.
Wichtige Formeln und Definitionen
- Drei Bausteine: Sequenz, Selektion (if/else), Iteration (for/while)
- Zuweisung: variable = ausdruck (die rechte Seite wird zuerst berechnet)
- for i in range(a, b) läuft b − a Mal (a, a+1, …, b−1)
- Funktion: def name(parameters): … return result
Gelöste Beispiele
1. x = 4, dann x = x * 2, dann x = x - 3. Was ist x?
Zeile für Zeile: x = 4 → x = 8 → x = 5. Also x = 5.
2. Was gibt das aus? for i in range(1, 4): print(i * 10)
i nimmt die Werte 1, 2, 3 an, also werden 10, 20, 30 ausgegeben.
3. age = 15. Was gibt das aus? if age >= 18: print("Adult") else: print("Minor")
15 >= 18 ist False, also läuft der else-Zweig: Minor.
4. Schreibe eine Funktion, die die größere von zwei Zahlen zurückgibt.
def bigger(a, b): if a > b: return a else: return b
5. Trace: total = 0; for n in range(1, 4): total = total + n. Was ist total am Ende?
n = 1 → total 1; n = 2 → total 3; n = 3 → total 6. Endwert: total = 6.
6. Ein Programm soll die Zahlen 1 bis 5 ausgeben, benutzt aber for i in range(1, 5). Welcher Fehler ist das, und wie behebst du ihn?
Es ist ein Logikfehler (Off-by-one). Es werden nur 1 bis 4 ausgegeben. Lösung: range(1, 6).
Häufige Fehler
- Das = wie in der Mathematik als "gleich" lesen. Im Code bedeutet = "speichere die rechte Seite in der linken". Zum Vergleichen nimmst du ==.
- Vergessen, dass range(1, 5) vor der 5 aufhört.
- Eine while-Schleife schreiben, deren Bedingung nie False wird, sodass sie ewig läuft.
- Denselben Codeblock viele Male kopieren, statt eine Funktion zu schreiben.