Schweizer Mathematik- und Informatik-Olympiaden starten bald (1. September)

Freifach Programmieren 2025

Strategiespielprogrammierung (Minimax, Alpha-Beta-Suche)

Video zum Minimax-Algorithmus: https://www.youtube.com/watch?v=l-hh51ncgDI

Suchbaum auf Wikipedia, der die $\alpha$-$\beta$-Suche gut erklärt (auch drumherum lesen! Dahinter ist auch der Algorithmus in Pseudocode, den man kopieren mag):

https://de.wikipedia.org/wiki/Alpha-Beta-Suche#Der_Algorithmus

Fragen:

Turtle-Graphik selbst schreiben: Zuerst naiv, dann objektorientiert

(Aus der Vorlage kannst du auch lernen, wie man mit einem Python-Programm etwas in eine Datei schreibt.)

Aufgaben:

Sortieren

Hilfsdatei zur Visualisierung der Listen

listenvisualisierung.py

Nicht so cleveres Sortierverfahren

Wiederhole, bis sortiert:

Animation

Animation

Bubble Sort

(Sortieren durch Aufsteigen (man denkt an Blasen = bubbles, die in einer Flüssigkeit aufsteigen, siehe Animation). Kurzbeschreibung: Man vergleicht nacheinander jedes Element der Liste mit seinem Nachfolger und vertauscht die beiden Elemente, wenn sie in der falschen Reihenfolge stehen. Dies wiederholt man so lange, bis die gesamte Liste sortiert ist.)

Sei $n$ die Länge der zu sortierenden Liste.

Wiederhole $n$ Mal (oder so lange, bis keine Vertauschung mehr stattgefunden hat:

Animation

Animation

Selection Sort

(Sortieren durch Auswählen. Kurzbeschreibung: Man wählt nacheiander das jeweils kleinste Element aus den noch nicht ausgewählten Elementen.)

Sei $n$ die Länge der zu sortierenden Liste.

Suche das kleinste Element der Liste und tausche es an Position 0.

Suche ab Position 1 das kleinste Element der Liste und tausche es an Position 1.

Suche ab Position 2 das kleinste Element der Liste und tausche es an Position 2.

Suche ab Position $n-2$ das kleinste Element der Liste und tausche es an Position $n-2$.

(Unnötig:) Suche ab Position $n-1$ das kleinste Element der Liste und tausche es an Position $n-1$.

Animation

Animation

Insertion Sort

(Sortieren durch Einfügen. Kurzbeschreibung: Man fügt nacheinander alle Elemente an der richtigen Position im bisher sortierten Teil ein.)

Man stelle sich vor, dass die zu sortierende Liste aus (Spiel-)Karten besteht, die verdeckt in einer Reihe liegen.

Man deckt die erste Karte auf. Dann ist die Liste der aufgedeckten Karten offensichtlich sortiert.

Man deckt dann die nächste Karte auf. Man lässt sie durch Vertauschungen so lange jeweils eine Position nach vorne rücken, bis sie an der richtigen Position liegt, so dass die Liste der aufgedeckten Karten sortiert ist.

Man wiederholt den vorherigen Schritt so lange, bis keine Karte mehr verdeckt daliegt.

Animation

Animation

Bilder manipulieren (Bildverarbeitung)

original (RGB): bemalt:

Graustufen: Graustufen, invertiert:

SW-Version: SW-Version, invertiert:

Negativ: RGB-Farbrotation:

gespiegelt: rotiertes Bild:

Verpixelt/unscharf: Laplace-Kantendetektion:

Wärmeleitungsgleichung (mit konstanten Randwerten; gif-Datei):

Bildmanipulation, einige Beispielprogramme

Auftrag 03.06.2025: Weitere Simulationen

Programmiere (aufbauend auf den bisherigen Programmen; eventuell ist es eine gute Idee, alles einmal selbst einzutippen, damit man merkt, welcher Befehl was tut; als Vorlage dürfen natürlich die bisher erstellten Programme verwendet werden):

Für Fortgeschrittene

siehe Abschnitt https://fginfo.ksbg.ch/dokuwiki/doku.php?id=lehrkraefte:snr:informatik:ff25#fuer_fortgeschrittene2 unten

Vorlagen für Grafik- und Spielprogrammierung mit Pygame

Installation von Pygame

In VS Code das Terminal öffnen und dort pip install pygame eingeben.

Vorlagen für Aufgaben im Skript

Game of Life

Wärmeverteilung in beheiztem Raum mit offenem Fenster (Wärmeleitungsgleichung diskret)

Die neue Temperatur $T_{\text{neu}}(x,y)$ an einer Position $(x, y)$ berechnet sich in jedem Zeitschritt wie folgt aus den alten Temperaturen; dabei ist $\gamma$ eine Konstante (siehe Vorlage), die für numerische Stabilität sorgt:

$$T_{\text{neu}}(x,y)=T_{\text{alt}}(x,y) + \gamma \cdot \Big(\big(T_{\text{alt}}(x-1,y)-2T_{\text{alt}}(x,y)+T_{\text{alt}}(x+1,y)\big) + \big(T_{\text{alt}}(x,y-1)-2T_{\text{alt}}(x,y)+T_{\text{alt}}(x,y+1)\big)\Big)$$

(Dies ist die Diskretisierung der Wärmeleitungsgleichung $\frac{\partial u}{\partial t} = \Delta u$.)

Einige Chaos-Game-Programme in Python

Graphen von Funktionen zeichnen

Für Fortgeschrittene

Herausforderung

Vorbereitungen

Für Fortgeschrittene

Erkläre die Ausgabe dieses Programms!

a = [[1,1], [1,1]]
print(a)
print(a[0][0])
a[0][0] = 42
print(a)
 
b = 2 * [2 * [1]]
print(b)
print(b[0][0])
b[0][0] = 42
print(b)