Informatik

Grundlagen der Programmierung

32 Lernkarten · 10 Übungsfragen · 9 Min Lesezeit

Die erste Programmier-Klausur prüft selten exotisches Sprachwissen. Ob das Modul Info 1, Einführung in die Informatik oder Programmierung 1 heißt – gefragt sind fast immer dieselben Bausteine: Variablen, Schleifen, Funktionen, dazu ein wenig Rekursion und Binärdarstellung. Und vor allem eine Fähigkeit, die viele unterschätzen: einen gegebenen Ablauf im Kopf Schritt für Schritt durchzuspielen und vorherzusagen, welcher Wert am Ende in welcher Variable steht. Wer programmieren lernen will, trainiert genau das – nicht das Auswendiglernen von Syntax.

Diese Zusammenfassung führt in der Reihenfolge durch den Stoff, in der die Konzepte aufeinander aufbauen: vom Algorithmus-Begriff über Variablen, Datentypen und Zuweisungen zu Ausdrücken und logischen Bedingungen, dann zu Verzweigungen und Schleifen, zu Funktionen mit Parametern und Gültigkeitsbereichen, zu Listen und Zeichenketten, zu einfachen Algorithmen wie der linearen Suche, zu Rekursion, Fehlersuche und zum Binärsystem. Jedes Rechenbeispiel ist durchgespielt, jeder Ablauf in nachvollziehbaren Schritten erklärt. Besonderes Gewicht liegt auf den Klassikern, die in Klausuren Punkte kosten: der Unterschied zwischen Zuweisung und Gleichung, Ganzzahl- gegen Gleitkommadivision, die Frage, warum 0,1 + 0,2 nicht exakt 0,3 ergibt, und der Off-by-one-Fehler bei Indizes, die bei 0 beginnen.

Zur Vorbereitung auf die Info-1-Klausur gehören außerdem Lernkarten zu Variablen, Schleifen und Funktionen sowie Übungsfragen, die wie echte Klausuraufgaben gestellt sind: Abläufe auswerten, Fehler finden, Zahlen umrechnen. Wenn du die Inhalte in Learnboost übernimmst, wiederholt Spaced Repetition jede Karte kurz bevor du sie vergisst, der Lernplan verteilt den Stoff bis zur Klausur, und der KI-Tutor beantwortet Rückfragen – etwa warum eine bestimmte Schleife nicht terminiert.

Übernimm diese Inhalte kostenfrei in deinen Learnboost Account — dann arbeiten sie für dich weiter: Spaced Repetition bringt jede Karte zurück, kurz bevor du sie vergisst. So stehst du zur nächsten Klausur nicht wieder am Anfang.

Kostenlos starten · Keine Kreditkarte · Deine eigenen Unterlagen bleiben privat

Zusammenfassung

Programmieren heißt, ein Problem in Schritte zu zerlegen, die ein Rechner ausführen kann. Die Schreibweise dieser Zusammenfassung ist an Python angelehnt; alle Konzepte gelten sprachunabhängig.

Vom Problem zum Programm

Am Anfang steht der Algorithmus: eine endliche, eindeutig beschriebene Folge von Schritten, die ein Problem löst. Drei Eigenschaften sind klausurrelevant: Eindeutigkeit (jeder Schritt ist präzise festgelegt – ein Rezept mit „nach Gefühl würzen“ wäre keiner), Ausführbarkeit (jeder Schritt ist elementar genug, um ihn tatsächlich auszuführen) und Endlichkeit bzw. Terminierung (das Verfahren endet nach endlich vielen Schritten).

Ein Programm ist ein Algorithmus in einer Programmiersprache. Den menschenlesbaren Quelltext übersetzt entweder ein Compiler komplett vor der Ausführung in Maschinencode (so arbeitet C), oder ein Interpreter führt ihn zur Laufzeit Anweisung für Anweisung aus (so arbeitet Python). Die Laufzeitumgebung stellt beim Ausführen Dienste wie Speicherverwaltung und Betriebssystemzugriff bereit.

Variablen, Zuweisung und Datentypen

Eine Variable ist ein benannter Speicherplatz. Bei der Zuweisung x = 5 wird immer zuerst die rechte Seite ausgewertet, dann das Ergebnis links gespeichert. Deshalb ist x = x + 1 keine mathematische Gleichung – als Gleichung wäre sie unlösbar. Als Anweisung heißt sie: Nimm den aktuellen Wert von x, addiere 1, speichere das Ergebnis wieder in x – aus 7 wird 8. Der Klassiker daneben: Das einfache = weist zu, das doppelte == vergleicht. Wer in einer Bedingung zuweist, verändert Werte, statt sie zu prüfen.

Elementare Datentypen: ganze Zahlen (42), Gleitkommazahlen (3,14), Wahrheitswerte (wahr oder falsch) und Zeichenketten („Hallo“). Umwandlungen passieren explizit (du wandelst die Zeichenkette „42“ selbst in die Zahl 42) oder implizit durch die Sprache: 3 + 2,5 ergibt die Gleitkommazahl 5,5. Vorsicht: Die Umwandlung von Gleitkomma- in ganze Zahlen schneidet ab, aus 3,9 wird 3 – gerundet wird nicht.

Division, Modulo und Gleitkomma-Genauigkeit

Die Ganzzahldivision liefert nur den ganzzahligen Anteil: 7 ganzzahlig durch 2 ergibt 3, denn 2 passt dreimal in 7; die Gleitkommadivision liefert 3,5. Der Modulo-Operator liefert den Rest: 7 mod 2 ergibt 1; 17 mod 5 ergibt 2, denn 17 ist 3 mal 5 plus 2. Typische Anwendungen: n ist genau dann gerade, wenn n mod 2 gleich 0 ist; n mod 10 liefert die letzte Ziffer.

Gleitkommazahlen speichert der Rechner binär, und 0,1 ist binär ein unendlicher periodischer Bruch – wie 1/3 im Dezimalsystem; gespeichert wird eine gerundete Näherung. Deshalb ergibt 0,1 + 0,2 nicht exakt 0,3, sondern 0,30000000000000004. Konsequenz: Gleitkommazahlen nie mit == vergleichen, sondern prüfen, ob der Abstand zweier Werte kleiner als eine winzige Toleranz ist.

Ausdrücke, Operatoren und logische Bedingungen

Ausdrücke kombinieren arithmetische Operatoren, Vergleiche und die logischen Verknüpfungen und, oder, nicht. Es gilt Punkt- vor Strichrechnung, Vergleiche vor Logik; Klammern schlagen alles. Die Kurzschlussauswertung spart den zweiten Teil: Bei „A und B“ wird B nicht mehr ausgewertet, wenn A falsch ist – erst prüfen, ob die Liste Elemente hat, dann aufs erste zugreifen. Zum Verneinen hilft die De-Morgan-Regel: „nicht (A und B)“ ist „(nicht A) oder (nicht B)“ – wer nicht volljährig und Mitglied ist, ist minderjährig oder kein Mitglied.

Kontrollstrukturen: Verzweigungen und Schleifen

Jeder Ablauf besteht aus Sequenz (Anweisungen nacheinander), Verzweigung und Schleife. Die Verzweigung führt je nach Bedingung den Wenn- oder Sonst-Zweig aus; Bedingungen lassen sich verschachteln, und die Mehrfachauswahl „wenn – sonst wenn – sonst“ führt genau den ersten zutreffenden Zweig aus.

Die kopfgesteuerte Schleife (while) prüft die Bedingung vor jedem Durchlauf und läuft daher auch null-mal. Die zählergesteuerte Schleife (for) durchläuft einen festen Bereich oder eine Sammlung. Die fußgesteuerte Schleife prüft erst nach dem Durchlauf und läuft mindestens einmal. Eine Endlosschleife entsteht, wenn die Bedingung nie falsch wird – typisch: Die Laufvariable wird im Rumpf nicht verändert, oder die Abbruchbedingung wird übersprungen, etwa wenn ein Zähler in Dreierschritten wächst, aber „ungleich 10“ geprüft wird. Denkwerkzeug ist die Schleifeninvariante, eine Aussage, die nach jedem Durchlauf gilt – beim Aufsummieren etwa: summe enthält die Summe aller bisher besuchten Elemente.

DIE Fehlerquelle ist der Off-by-one-Fehler, das Danebenliegen um genau eins. Er hängt an der 0-basierten Indizierung: Das letzte Element einer Liste der Länge n hat den Index n − 1. Zählbeispiel: Startet ein Zähler bei 0 und läuft, solange er kleiner als 3 ist, gibt es Durchläufe mit 0, 1 und 2 – drei Stück; mit „kleiner oder gleich 3“ wären es vier. Wer bei einer Liste der Länge 5 den Index 5 anspricht, greift hinter das Ende – Laufzeitfehler.

Funktionen und Gültigkeitsbereiche

Eine Funktion bündelt Anweisungen unter einem Namen – für Wiederverwendung und Struktur. In der Definition stehen Parameter als Platzhalter; beim Aufruf übergibst du konkrete Argumente, und der Rückgabewert transportiert das Ergebnis zurück. Variablen aus dem Funktionsinneren sind lokal und existieren nur während des Aufrufs; Variablen außerhalb sind global. Verwirrbeispiel: Die globale Variable punktestand enthält 10; eine Funktion setzt eine gleichnamige lokale Variable auf 99 und gibt 99 aus – nach dem Aufruf steht global weiterhin 10, die lokale hat sie nur verdeckt.

Verändert eine Funktion Zustand außerhalb ihres Bereichs – globale Variablen, übergebene Listen, Ausgaben –, ist das ein Seiteneffekt. Zahlen kommen als Kopie an: Erhöht die Funktion ihren Parameter, bleibt die Variable außen unverändert. Listen kommen als Verweis auf dasselbe Objekt an: Hängt die Funktion ein Element an, sieht es auch die aufrufende Stelle.

Listen, Zeichenketten und Schlüssel-Wert-Paare

Eine Liste (Array) reiht Werte geordnet auf; der Index beginnt bei 0, bei Länge 8 sind also 0 bis 7 gültig. Jede Liste kennt ihre Länge; eine Schleife läuft die Elemente der Reihe nach durch. Zeichenketten sind Folgen einzelner Zeichen mit demselben Indexprinzip: In „Informatik“ steht an Index 0 das I, an Index 2 das f. Drittes Grundkonzept sind Schlüssel-Wert-Paare: Zugriff über einen Schlüssel statt eine Position, etwa per Matrikelnummer auf den Namen – vertieft auf der Schwesterseite zu Datenstrukturen und Algorithmen.

Einfache Algorithmen Schritt für Schritt

Vier Muster decken die meisten Aufgaben ab. Summe und Durchschnitt: summe startet bei 0, jedes Element wird addiert, am Ende durch die Anzahl geteilt – für 4, 7 und 1 wächst summe von 0 über 4 und 11 auf 12, der Durchschnitt ist 12 durch 3, also 4. Minimum und Maximum: Eine Merkvariable startet mit dem ersten Element; jedes weitere ersetzt sie, wenn es kleiner bzw. größer ist. Die Falle: Wer mit 0 initialisiert, bekommt bei der Maximumsuche über −3, −8 und −1 das Ergebnis 0 – eine Zahl, die gar nicht in der Liste vorkommt; richtig wäre −1. Der Minimumsuche passiert dasselbe bei rein positiven Werten. Lineare Suche: das Gesuchte der Reihe nach mit jedem Element vergleichen, beim ersten Treffer mit dessen Index abbrechen, sonst „nicht gefunden“ melden – wie schnell das bei großen Datenmengen bleibt, ist Thema der Schwesterseite. Zählen und Filtern: Ein Zähler wird nur erhöht bzw. ein Element nur übernommen, wenn es eine Bedingung erfüllt.

Rekursion als Grundidee

Eine Funktion ist rekursiv, wenn sie sich selbst aufruft – mit einem kleineren Teilproblem. Zwingend nötig ist ein Basisfall, der ohne Selbstaufruf auskommt; fehlt er, terminiert die Rekursion nie, und das Programm bricht ab, wenn der Speicher für die offenen Aufrufe erschöpft ist. Standardbeispiel Fakultät: fakultät(n) ist n mal fakultät(n − 1), Basisfall fakultät(0) gleich 1. Der Aufruf fakultät(4) steigt ab über fakultät(3), fakultät(2) und fakultät(1) bis fakultät(0); dort greift der Basisfall, und auf dem Rückweg wird multipliziert: 1 mal 1 ist 1, mal 2 ist 2, mal 3 ist 6, mal 4 ist 24. Jede Rekursion lässt sich auch als Schleife schreiben – die Schleife spart Verwaltungsaufwand, die Rekursion ist bei selbstähnlichen Problemen das natürlichere Denkmuster.

Fehler finden: Syntax, Laufzeit, Logik

Syntaxfehler verstoßen gegen die Grammatik der Sprache – das Programm startet gar nicht. Laufzeitfehler treten während der Ausführung auf, etwa Division durch 0 oder ein Zugriff hinter das Listenende. Logikfehler sind die tückischste Klasse: Das Programm läuft ohne Fehlermeldung durch, aber das Ergebnis ist falsch – wie bei der Maximumsuche mit Startwert 0. Dagegen hilft systematisches Eingrenzen: Zwischenwerte ausgeben und mit der Erwartung vergleichen, das Beispiel von Hand durchspielbar klein machen, Randfälle testen – leere Liste, ein Element, Null, negative Werte.

Zahldarstellung: Binärsystem, Bits und Bytes

Rechner speichern alles in Bits, den Ziffern 0 und 1. Im Binärsystem haben die Stellen von rechts die Wertigkeiten 1, 2, 4, 8, 16 und so weiter. Von binär nach dezimal addierst du die Wertigkeiten der Einsen: 1011 ist 8 plus 2 plus 1, also 11. Umgekehrt teilst du wiederholt ganzzahlig durch 2 und notierst die Reste: 13 durch 2 ist 6 Rest 1, dann 3 Rest 0, dann 1 Rest 1, dann 0 Rest 1 – die Reste rückwärts gelesen ergeben 1101. Acht Bits sind ein Byte mit 256 Werten, vorzeichenlos 0 bis 255. Wer zum Maximum 1 addiert, erzeugt einen Überlauf – begrenzte Bits bedeuten immer einen begrenzten Zahlenbereich.

Guter Stil im Überblick

Vier Regeln reichen für den Anfang: sprechende Namen (anzahlVersuche statt av), kleine Funktionen mit genau einer Aufgabe, Kommentare für das Warum – was der Code tut, sieht man ihm an – und Konsistenz bei Benennung und Formatierung im gesamten Programm.

Arbeite mit dieser Zusammenfassung weiter — kostenfrei in deinem Learnboost Account.

Zusammenfassung übernehmen

Beispiel-Lernkarten

Frage antippen, um die Antwort aufzudecken.

Was ist ein Algorithmus, und welche drei Eigenschaften muss er erfüllen?

Ein Algorithmus ist eine endliche, eindeutig beschriebene Folge von Schritten zur Lösung eines Problems. Er muss eindeutig sein (jeder Schritt ist präzise festgelegt), ausführbar (jeder Schritt ist elementar genug, um ihn tatsächlich auszuführen) und endlich bzw. terminierend (er endet nach endlich vielen Schritten).

Worin unterscheiden sich Compiler und Interpreter? Nenne je ein Sprachbeispiel.

Ein Compiler übersetzt den gesamten Quelltext vor der Ausführung in Maschinencode (Beispiel: C). Ein Interpreter führt den Quelltext zur Laufzeit Anweisung für Anweisung aus (Beispiel: Python). Kompilierte Programme laufen meist schneller, interpretierte lassen sich ohne Übersetzungsschritt direkt ausprobieren.

Erkläre die Begriffe Quelltext, Maschinencode und Laufzeitumgebung.

Der Quelltext ist das vom Menschen geschriebene, lesbare Programm. Maschinencode ist die Folge von Prozessorbefehlen, die der Rechner tatsächlich ausführt; Quelltext muss dafür übersetzt oder interpretiert werden. Die Laufzeitumgebung stellt während der Ausführung benötigte Dienste bereit, etwa Speicherverwaltung und den Zugriff auf das Betriebssystem.

Was ist eine Variable, und was passiert bei einer Zuweisung genau?

Eine Variable ist ein benannter Speicherplatz für einen Wert. Bei einer Zuweisung wird zuerst der Ausdruck auf der rechten Seite vollständig ausgewertet, dann wird das Ergebnis in der Variablen auf der linken Seite gespeichert. Der alte Wert der Variablen wird dabei überschrieben.

Warum ist die Anweisung x = x + 1 keine mathematische Gleichung, und was ist der Unterschied zwischen = und ==?

Als Gleichung wäre x = x + 1 unlösbar. Als Anweisung bedeutet sie: Werte die rechte Seite mit dem aktuellen Wert von x aus und speichere das Ergebnis wieder in x — aus 7 wird 8. Das einfache = ist der Zuweisungsoperator, das doppelte == der Vergleichsoperator, der prüft, ob zwei Werte gleich sind. Die Verwechslung ist ein Klassiker: Wer in einer Bedingung zuweist statt zu vergleichen, verändert den Wert, statt ihn zu prüfen.

Nenne die vier elementaren Datentypen mit je einem Beispiel.

Ganze Zahl (z. B. 42), Gleitkommazahl (z. B. 3,14), Wahrheitswert (wahr oder falsch) und Zeichenkette (z. B. der Text „Hallo“). Der Datentyp legt fest, welche Werte eine Variable annehmen kann und welche Operationen darauf erlaubt sind.

Welche Aussagen zur Typumwandlung sind richtig?

  • ✓ Bei 3 + 2,5 wird die ganze Zahl implizit in eine Gleitkommazahl umgewandelt; das Ergebnis ist 5,5.
  • Die Umwandlung der Gleitkommazahl 3,9 in eine ganze Zahl rundet auf 4.
  • ✓ Um mit der eingelesenen Zeichenkette „42“ zu rechnen, muss sie explizit in eine Zahl umgewandelt werden.
  • ✓ Implizite Umwandlungen nimmt die Sprache automatisch vor, ohne dass du sie hinschreibst.

Was ergibt 17 mod 5, also der Rest der ganzzahligen Division von 17 durch 5?

  • ✓ 2
  • 3
  • 1
  • 0

Die Gleitkommazahl 3,9 wird in eine ganze Zahl umgewandelt. Welchen Wert erhältst du?

  • ✓ 3
  • 4
  • 3,9 bleibt unverändert
  • 0

Warum ergibt 0,1 + 0,2 im Rechner nicht exakt 0,3, und welche Konsequenz hat das?

Gleitkommazahlen werden binär gespeichert, und 0,1 ist im Binärsystem ein unendlicher periodischer Bruch — gespeichert wird nur eine gerundete Näherung. Die Summe ist deshalb 0,30000000000000004. Konsequenz: Gleitkommazahlen nie mit == auf exakte Gleichheit prüfen, sondern testen, ob der Abstand zweier Werte kleiner als eine winzige Toleranz ist.

Welche Aussagen über Gleitkommazahlen sind richtig?

  • ✓ 0,1 + 0,2 ergibt in üblicher doppelter Genauigkeit nicht exakt 0,3.
  • ✓ Der Grund ist, dass 0,1 im Binärsystem nicht mit endlich vielen Stellen darstellbar ist.
  • Der Rechner speichert Gleitkommazahlen dezimal mit fester Anzahl Nachkommastellen.
  • ✓ Vergleiche auf Gleichheit führt man besser über eine kleine Toleranz als mit == durch.

Was ist Kurzschlussauswertung, und wofür nutzt man sie?

Bei „A und B“ wird B nicht mehr ausgewertet, wenn A bereits falsch ist; bei „A oder B“ nicht mehr, wenn A bereits wahr ist — das Gesamtergebnis steht ja schon fest. Man nutzt das als Schutz: erst prüfen, ob eine Liste Elemente enthält, und nur dann auf das erste Element zugreifen. Der riskante zweite Teil wird so gar nicht erst ausgeführt.

Wie lautet die De-Morgan-Regel zum Verneinen einer Und-Bedingung? Gib ein Beispiel.

„nicht (A und B)“ ist gleichbedeutend mit „(nicht A) oder (nicht B)“ — beim Verneinen kippt das Und in ein Oder, und beide Teile werden verneint. Beispiel: Wer nicht volljährig und Mitglied ist, ist minderjährig oder kein Mitglied. Analog gilt: „nicht (A oder B)“ ist „(nicht A) und (nicht B)“.

Welchen Wert hat der Ausdruck nicht (wahr und falsch)?

  • ✓ wahr
  • falsch
  • Der Ausdruck ist ungültig
  • Das hängt von der Programmiersprache ab

Unterscheide kopfgesteuerte, zählergesteuerte und fußgesteuerte Schleifen.

Die kopfgesteuerte Schleife (while) prüft die Bedingung vor jedem Durchlauf und kann daher auch null-mal laufen. Die zählergesteuerte Schleife (for) durchläuft einen festen Bereich oder eine Sammlung Element für Element. Die fußgesteuerte Schleife prüft die Bedingung erst nach dem Durchlauf und läuft deshalb mindestens einmal.

Welche Aussagen über Schleifen sind richtig?

  • ✓ Eine kopfgesteuerte Schleife kann null-mal durchlaufen werden.
  • ✓ Eine fußgesteuerte Schleife läuft mindestens einmal.
  • ✓ Eine Endlosschleife entsteht z. B., wenn die Laufvariable im Rumpf nie verändert wird.
  • Eine zählergesteuerte Schleife prüft ihre Bedingung grundsätzlich erst nach dem letzten Durchlauf.

Ein Zähler startet bei 0. Die Schleife läuft, solange der Zähler kleiner als 5 ist, und erhöht ihn in jedem Durchlauf um 1. Wie oft wird der Schleifenrumpf ausgeführt?

  • ✓ 5-mal (mit den Zählerwerten 0, 1, 2, 3 und 4)
  • 4-mal
  • 6-mal
  • Die Schleife läuft endlos

Was ist ein Off-by-one-Fehler, und warum passiert er bei 0-basierter Indizierung so leicht?

Ein Off-by-one-Fehler liegt vor, wenn ein Ablauf um genau einen Schritt oder Index danebenliegt — die Schleife läuft einmal zu oft oder zu selten, oder ein Index zeigt ein Element zu weit. Da Indizes bei 0 beginnen, hat das letzte Element einer Liste der Länge n den Index n − 1. Wer bis Index n läuft, greift hinter das Listenende und löst einen Laufzeitfehler aus.

Eine Liste hat die Länge 8. Welches ist der größte gültige Index?

  • ✓ 7
  • 8
  • 9
  • Das hängt von der Länge des ersten Elements ab

Was ist der Unterschied zwischen lokalen und globalen Variablen? Beschreibe das typische Verwirrbeispiel.

Lokale Variablen werden innerhalb einer Funktion angelegt und existieren nur während des Aufrufs; globale Variablen existieren außerhalb und darüber hinaus. Verwirrbeispiel: Die globale Variable punktestand enthält 10. Eine Funktion legt eine gleichnamige lokale Variable an und setzt sie auf 99 — in der Funktion wird 99 ausgegeben, aber nach dem Aufruf enthält die globale Variable weiterhin 10. Die lokale Variable hat die globale nur verdeckt, nicht verändert.

Welche Aussagen zu Parameterübergabe und Seiteneffekten sind richtig?

  • ✓ Wird eine Zahl übergeben und in der Funktion erhöht, bleibt die Variable der aufrufenden Stelle unverändert.
  • ✓ Hängt eine Funktion an eine übergebene Liste ein Element an, sieht die aufrufende Stelle diese Änderung.
  • ✓ Das Verändern einer globalen Variable aus einer Funktion heraus ist ein Seiteneffekt.
  • Lokale Variablen bleiben nach dem Ende des Funktionsaufrufs erhalten.

Ein fehlerhafter Ablauf soll das Maximum der Liste −3, −8, −1 finden, initialisiert die Merkvariable aber mit 0 statt mit dem ersten Element. Welchen Wert liefert er?

  • ✓ 0
  • −1
  • −8
  • −3

Beschreibe die lineare Suche in Worten. Wann bricht sie ab?

Die lineare Suche vergleicht den gesuchten Wert der Reihe nach mit jedem Element der Liste, beginnend bei Index 0. Beim ersten Treffer bricht sie ab und liefert den Index; erreicht sie das Ende ohne Treffer, meldet sie „nicht gefunden“. Wie schnell Suchverfahren bei großen Datenmengen sind, ist Thema der Datenstrukturen und Algorithmen.

Warum initialisiert man die Merkvariable bei der Minimum- oder Maximumsuche mit dem ersten Element und nicht mit 0?

Mit Startwert 0 vergleicht man gegen einen Wert, der womöglich gar nicht in der Liste vorkommt. Bei der Maximumsuche über −3, −8 und −1 bliebe die Merkvariable auf 0 stehen, obwohl das echte Maximum −1 ist; bei der Minimumsuche über rein positive Werte bliebe sie ebenfalls fälschlich auf 0. Startet man mit dem ersten Element, ist das Ergebnis garantiert ein Wert aus der Liste.

Was macht eine rekursive Funktion aus, und warum ist der Basisfall zwingend?

Eine rekursive Funktion ruft sich selbst auf, jeweils mit einem kleineren Teilproblem. Der Basisfall ist der Fall, der ohne weiteren Selbstaufruf direkt ein Ergebnis liefert — bei der Fakultät ist fakultät(0) gleich 1. Ohne Basisfall reißt die Kette der Selbstaufrufe nie ab: Die Rekursion terminiert nicht, und das Programm bricht ab, wenn der Speicher für die offenen Aufrufe erschöpft ist.

fakultät(0) ist als 1 definiert, fakultät(n) als n mal fakultät(n − 1). Welchen Wert liefert fakultät(4)?

  • ✓ 24
  • 12
  • 10
  • 4

Unterscheide Syntaxfehler, Laufzeitfehler und Logikfehler. Welche Klasse ist die tückischste?

Ein Syntaxfehler verstößt gegen die Grammatik der Sprache — das Programm startet gar nicht. Ein Laufzeitfehler tritt während der Ausführung auf, etwa bei einer Division durch 0 oder einem Zugriff hinter das Listenende. Ein Logikfehler ist die tückischste Klasse: Das Programm läuft ohne Fehlermeldung durch, liefert aber ein falsches Ergebnis — es gibt keinen Hinweis, wo der Fehler steckt.

Welche Strategien helfen beim systematischen Eingrenzen eines Logikfehlers?

  • ✓ Zwischenwerte ausgeben und mit der Erwartung vergleichen.
  • ✓ Das Beispiel so weit verkleinern, dass man den Ablauf von Hand durchspielen kann.
  • ✓ Randfälle gezielt testen: leere Liste, ein einzelnes Element, Null, negative Werte.
  • Auf die Fehlermeldung warten — sie zeigt bei Logikfehlern die betroffene Zeile an.

Welche Dezimalzahl entspricht der Binärzahl 1011?

  • ✓ 11
  • 13
  • 9
  • 10

Welche Aussagen zu Bits, Bytes und Überlauf sind richtig?

  • ✓ Ein Byte besteht aus 8 Bits und kann 256 verschiedene Werte darstellen.
  • ✓ Als vorzeichenlose Zahl deckt ein Byte den Bereich 0 bis 255 ab.
  • ✓ Addiert man zum größten darstellbaren Wert 1, entsteht ein Überlauf.
  • Mit mehr Bits sinkt die Anzahl der darstellbaren Werte.

Die Zeichenkette „Informatik“ wird ab 0 indiziert. Welches Zeichen steht an Index 2?

  • ✓ f
  • n
  • o
  • I

Welche Regeln gehören zu gutem Programmierstil?

  • ✓ Sprechende Namen wie anzahlVersuche statt kryptischer Kürzel verwenden.
  • ✓ Kommentare erklären vor allem das Warum — was der Code tut, sieht man ihm an.
  • Eine Funktion sollte möglichst viele Aufgaben gleichzeitig erledigen.
  • ✓ Benennung und Formatierung im gesamten Programm konsistent halten.

Lerne diese Karten mit Spaced Repetition weiter — kostenfrei in deinem Learnboost Account.

Lernkarten übernehmen

Übungsfragen

1. Spiele den folgenden Ablauf Schritt für Schritt durch: Zuerst wird der Variablen x der Wert 7 zugewiesen. Dann wird x = x · 2 ausgeführt, anschließend x = x mod 5, zuletzt x = x + 1. Welcher Wert steht am Ende in x?

  • 5

  • 4

  • 15

  • 8

Lösung:

Nach der ersten Zuweisung enthält x den Wert 7. Die Verdopplung ergibt 14. Der Rest der Division von 14 durch 5 ist 4, denn 14 ist 2 mal 5 plus 4. Die letzte Anweisung erhöht 4 um 1 — am Ende steht 5 in x.

Solche Abläufe prüfen genau eine Fähigkeit: den Zustand einer Variablen über mehrere Zuweisungen hinweg zu verfolgen. Wer 15 erhält, hat den Modulo-Schritt übersprungen; wer 4 erhält, die letzte Erhöhung vergessen. Der Modulo-Operator liefert immer den Rest, nie den Quotienten der Division.

2. Eine Variable summe startet bei 0. Ein Zähler beginnt bei 1, und solange er kleiner oder gleich 4 ist, wird in jedem Durchlauf zuerst summe = summe + zähler ausgeführt und dann der Zähler um 1 erhöht. Welchen Wert hat summe nach dem Ende der Schleife?

  • 10

  • 6

  • 15

  • 4

Lösung:

Die Schleife läuft mit den Zählerwerten 1, 2, 3 und 4. Die Summe wächst dabei von 0 auf 1, dann auf 3, dann auf 6 und schließlich auf 10. Beim Zählerwert 5 ist die Bedingung verletzt, der Rumpf läuft nicht mehr — summe enthält 10.

Die Bedingung „kleiner oder gleich 4“ schließt den Wert 4 ein — die Schleife läuft viermal. Wer 6 erhält, hat den letzten Durchlauf unterschlagen (Off-by-one), wer 15 erhält, einen Durchlauf mit dem Wert 5 zu viel gerechnet. Als Schleifeninvariante gilt: Nach jedem Durchlauf enthält summe die Summe aller bisher besuchten Zählerwerte.

3. Welche Aussagen über Zuweisung und Vergleich sind richtig?

  • Die Anweisung x = x + 1 erhöht den in x gespeicherten Wert um 1.

  • Als mathematische Gleichung gelesen wäre x = x + 1 unlösbar.

  • Das doppelte Gleichheitszeichen == weist einer Variablen einen Wert zu.

  • Bei einer Zuweisung wird zuerst die rechte Seite ausgewertet und das Ergebnis dann in der Variablen links gespeichert.

Lösung:

Richtig sind die Aussagen, dass x = x + 1 den gespeicherten Wert um 1 erhöht, dass dieselbe Zeile als Gleichung unlösbar wäre und dass bei einer Zuweisung erst die rechte Seite ausgewertet und dann gespeichert wird. Falsch ist die Aussage zum doppelten Gleichheitszeichen: == vergleicht zwei Werte und liefert einen Wahrheitswert — zuweisen tut das einfache =.

Die Verwechslung von = und == ist einer der häufigsten Anfängerfehler überhaupt. Merke: Die Zuweisung ist eine Handlung mit Richtung — rechts rechnen, links speichern —, der Vergleich ist eine Frage mit Ja-Nein-Antwort. Deshalb ist x = x + 1 sinnvoll, obwohl es mathematisch widersprüchlich aussieht.

4. Fehlersuche: Ein Ablauf soll alle Elemente einer Liste der Länge n ausgeben. Ein Zähler startet bei 0, und die Schleife läuft, solange der Zähler kleiner oder gleich n ist; in jedem Durchlauf wird das Element am Index des Zählers ausgegeben und der Zähler um 1 erhöht. Was passiert?

  • Ein Off-by-one-Fehler: Beim Index n greift der Ablauf hinter das Listenende, denn der letzte gültige Index ist n − 1 — es kommt zu einem Laufzeitfehler.

  • Kein Fehler: Eine Liste der Länge n hat die Indizes 0 bis n.

  • Ein Syntaxfehler: Die Schleifenbedingung ist grammatikalisch falsch formuliert.

  • Eine Endlosschleife, weil der Zähler nie verändert wird.

Lösung:

Die Liste hat die gültigen Indizes 0 bis n − 1. Die Bedingung „kleiner oder gleich n“ lässt die Schleife aber auch mit dem Zählerwert n laufen — dieser Zugriff liegt hinter dem Listenende und löst einen Laufzeitfehler aus. Korrekt wäre die Bedingung „kleiner als n“: Dann läuft die Schleife genau n-mal über die Indizes 0 bis n − 1.

Das ist der Off-by-one-Fehler in seiner häufigsten Form. Bei 0-basierter Indizierung gilt immer: Länge n bedeutet letzter Index n − 1. Ein Syntaxfehler scheidet aus, weil der Ablauf startet, und eine Endlosschleife scheidet aus, weil der Zähler in jedem Durchlauf erhöht wird — der Fehler zeigt sich erst zur Laufzeit beim Zugriff auf den ungültigen Index.

5. Eine Variable x startet bei 0. Eine kopfgesteuerte Schleife läuft, solange x ungleich 10 ist, und führt in jedem Durchlauf x = x + 3 aus. Welche Aussagen sind richtig?

  • Die Schleife terminiert nie: x nimmt die Werte 0, 3, 6, 9, 12 und so weiter an und ist nie exakt 10.

  • Mit der Bedingung „solange x kleiner als 10“ würde die Schleife terminieren.

  • Die Schleife endet nach dem vierten Durchlauf, weil x dann 12 ist.

  • Endlosschleifen entstehen ausschließlich dann, wenn die Laufvariable überhaupt nicht verändert wird.

Lösung:

Richtig ist: Die Schleife terminiert nie, denn x durchläuft 0, 3, 6, 9, 12, 15 und so weiter — der Wert 10 wird übersprungen, die Bedingung „ungleich 10“ bleibt für immer wahr. Richtig ist auch, dass die Bedingung „kleiner als 10“ das Problem behebt: Nach den Durchläufen mit x gleich 0, 3, 6 und 9 steht x auf 12, die Bedingung ist verletzt, die Schleife endet. Falsch sind die beiden übrigen Aussagen: Mit „ungleich 10“ endet die Schleife gerade nicht bei 12, und eine Endlosschleife entsteht nicht nur bei unveränderter Laufvariable, sondern auch — wie hier — wenn die Abbruchbedingung übersprungen wird.

Die Aufgabe zeigt die zweite große Ursache für Endlosschleifen neben der unveränderten Laufvariable: eine Gleichheits- oder Ungleichheitsbedingung, deren Zielwert übersprungen wird. Robuste Schleifenbedingungen formulieren deshalb einen Bereich („kleiner als“) statt eines exakten Werts („ungleich“).

6. Fehlersuche: Ein Ablauf soll das Maximum der Liste −4, −9, −2 bestimmen. Er initialisiert eine Merkvariable mit 0 und ersetzt sie beim Durchlaufen immer dann, wenn das aktuelle Element größer ist. Spiele den Ablauf durch, benenne den Fehler und beschreibe die korrekte Fassung samt Ergebnis.

Lösung:

Durchspielen des fehlerhaften Ablaufs: Die Merkvariable startet bei 0. Der Vergleich fragt jeweils, ob das Element größer als die Merkvariable ist: −4 ist nicht größer als 0, −9 nicht, −2 nicht — kein Element ersetzt die Merkvariable, das Ergebnis ist 0. Das ist ein Logikfehler: 0 kommt in der Liste gar nicht vor, das echte Maximum ist −2.

Korrekte Fassung: Die Merkvariable wird mit dem ersten Element initialisiert, also mit −4, und die Schleife beginnt beim zweiten Element. −9 ist nicht größer als −4, die Merkvariable bleibt; −2 ist größer als −4, die Merkvariable wird zu −2. Ergebnis: −2 — garantiert ein Wert aus der Liste.

Volle Punktzahl verlangt drei Bestandteile: das durchgespielte falsche Ergebnis 0, die Einordnung als Logikfehler durch falsche Initialisierung — das Programm läuft ja fehlerfrei durch — und die Korrektur mit dem ersten Element als Startwert samt Ergebnis −2. Der Startwert 0 scheitert immer dann, wenn alle Werte negativ sind; bei der Minimumsuche scheitert er entsprechend bei rein positiven Werten.

7. Die Fakultät ist rekursiv definiert: fakultät(0) ist 1, und fakultät(n) ist n mal fakultät(n − 1). Beschreibe Schritt für Schritt, wie der Aufruf fakultät(4) abgearbeitet wird, und erkläre, warum die Rekursion ohne den Basisfall nicht terminieren würde.

Lösung:

Abstieg: fakultät(4) braucht fakultät(3), das braucht fakultät(2), das braucht fakultät(1), das braucht fakultät(0). Erst dort greift der Basisfall und liefert direkt 1, ohne weiteren Selbstaufruf.

Rückweg: fakultät(1) ist 1 mal 1, also 1; fakultät(2) ist 2 mal 1, also 2; fakultät(3) ist 3 mal 2, also 6; fakultät(4) ist 4 mal 6, also 24.

Ohne Basisfall würde die Kette bei fakultät(0) nicht stoppen, sondern mit fakultät(−1), fakultät(−2) und so weiter endlos absteigen. Jeder offene Aufruf belegt Speicher, bis das Programm mit einem Laufzeitfehler abbricht — die Rekursion terminiert nie.

Bewertet werden die vollständige Aufrufkette bis zum Basisfall, die korrekten Zwischenergebnisse 1, 1, 2, 6 und 24 auf dem Rückweg und die Begründung der Terminierung: Der Basisfall ist die einzige Stelle, die ohne Selbstaufruf auskommt — fehlt er, reißt die Kette nie ab. Jede Rekursion ließe sich auch als Schleife formulieren; die rekursive Fassung spiegelt hier direkt die mathematische Definition.

8. Rechne um: Welche Binärdarstellung hat die Dezimalzahl 22?

  • 10110

  • 10101

  • 11010

  • 1011

Lösung:

Über die Wertigkeiten: 22 ist 16 plus 4 plus 2 — also eine 1 bei den Wertigkeiten 16, 4 und 2 und eine 0 bei 8 und 1: 10110. Oder über wiederholtes Teilen: 22 durch 2 ist 11 Rest 0, 11 durch 2 ist 5 Rest 1, 5 durch 2 ist 2 Rest 1, 2 durch 2 ist 1 Rest 0, 1 durch 2 ist 0 Rest 1. Die Reste rückwärts gelesen ergeben 10110.

Beide Wege müssen dasselbe liefern — das ist eine gute Selbstkontrolle in der Klausur. Zur Probe rückwärts rechnen: 10110 ist 16 plus 4 plus 2, also 22. Die Verwechslungsgefahr liegt beim Ablesen der Reste: Sie fallen von der niederwertigsten Stelle her an und müssen rückwärts notiert werden.

9. Eine lineare Suche durchläuft die Liste 8, 3, 12, 3, 7 von vorn nach hinten und bricht beim ersten Treffer ab. Welchen Index liefert sie für den Zielwert 3, und wie viele Vergleiche braucht sie dafür? Was liefert sie für den Zielwert 5, und wie viele Vergleiche fallen dann an? Erkläre außerdem, warum die zweite 3 in der Liste keine Rolle spielt.

Lösung:

Zielwert 3: Erster Vergleich am Index 0 — 8 ist nicht 3. Zweiter Vergleich am Index 1 — 3 ist 3, Treffer. Die Suche liefert den Index 1 und braucht 2 Vergleiche.

Zielwert 5: Alle fünf Elemente werden verglichen — 8, 3, 12, 3 und 7 sind alle ungleich 5. Nach 5 Vergleichen ist das Ende erreicht, die Suche meldet „nicht gefunden“, üblicherweise über einen speziellen Rückgabewert wie −1.

Die zweite 3 am Index 3 wird nie erreicht, weil die Suche beim ersten Treffer abbricht — sie liefert immer den Index des ersten Vorkommens.

Bewertet werden drei Punkte: der Index 1 mit 2 Vergleichen — nicht Index 2, die Zählung beginnt bei 0 —, der erfolglose Fall mit 5 Vergleichen und einem klaren „nicht gefunden“-Ergebnis sowie die Abbruchlogik, die das erste Vorkommen liefert. Im schlechtesten Fall wächst die Zahl der Vergleiche mit der Listenlänge; wie man Suchen bei großen Datenmengen beschleunigt, behandelt das Thema Datenstrukturen und Algorithmen.

10. Welche Aussagen über Division und Gleitkommazahlen sind richtig?

  • 7 ganzzahlig geteilt durch 2 ergibt 3, und der Rest 7 mod 2 ist 1.

  • Die Gleitkommadivision von 7 durch 2 ergibt 3,5.

  • Der Vergleich, ob 0,1 + 0,2 gleich 0,3 ist, liefert mit == den Wert wahr.

  • Eine ganze Zahl n ist genau dann gerade, wenn n mod 2 gleich 0 ist.

Lösung:

Richtig sind die Aussagen zur Ganzzahldivision mit Rest (2 passt dreimal in 7, es bleibt 1), zur Gleitkommadivision mit dem Ergebnis 3,5 und zum Geradheitstest über n mod 2 gleich 0. Falsch ist die Aussage zum Gleichheitsvergleich: 0,1 + 0,2 ergibt binär gespeichert 0,30000000000000004, der Vergleich mit 0,3 liefert deshalb falsch — Gleitkommazahlen prüft man über eine kleine Toleranz.

Ganzzahl- und Gleitkommadivision sind zwei verschiedene Operationen mit verschiedenen Ergebnissen — welche ausgeführt wird, hängt von Operator und Datentypen ab. Der Modulo-Operator liefert den Rest und ist das Standardwerkzeug für Geradheit, letzte Ziffern und zyklische Muster. Und für Gleitkommazahlen gilt die eiserne Regel: keine exakten Gleichheitsvergleiche.

Übe diese Probeklausur interaktiv — kostenfrei in deinem Learnboost Account.

Probeklausur übernehmen

Alles auf dieser Seite kannst du kostenfrei in deinen Learnboost Account übernehmen — und dort deutlich mehr daraus machen:

  • Nichts mehr vergessen: Spaced Repetition wiederholt jede Karte genau dann, wenn du sie sonst vergessen würdest — und der Lernplan verteilt den Stoff bis zur Klausur.
  • Rückfragen stellen: Der KI-Tutor erklärt dir alles, was unklar geblieben ist — so lange, bis es sitzt.
  • Mehr Formate aus demselben Stoff: ausführliche Zusammenfassungen, Mindmaps und Probeklausuren — je nachdem, wie du am besten lernst.
  • Eigene KI-Podcasts und Hörbücher: Lass dir jedes Thema vorlesen oder als Podcast-Dialog erklären — so lernst du auch in der Bahn, beim Sport oder beim Kochen weiter.
  • Eigene Unterlagen dazu: Lade dein Skript oder deine Vorlesungsfolien hoch und erzeuge daraus dieselben Lernmaterialien.

Bessere Noten beginnen bei Learnboost.

Erstellt von Learnboost-Redaktion. KI-gestützt erstelltes Originalwerk, redaktionell geprüft.

Inhalte melden: content@learnboost.tech