- Wintersemester 2023/24

Der Stundenplan dient als Tagebuch, um festzuhalten, was wir tatsächlich in den Vorlesungen gemacht haben. Hier kündige ich auch an, welche Übungsaufgaben Sie bis zum nächsten Termin anschauen sollten.


15. Januar 2024

Graphen: Grundbegriffe, Repräsentierung als Elm-Datenstruktur. Suche und Pfade.

Hier ist mein Code: session-2024-01-15.zip und ein Beispielaufruf im Repl-Fenster:

elm repl
import Digraph exposing (..)
import BuildGraph exposing (..)
usedEdges = Tuple.second (search gridGraph (1,1))
pathTo usedEdges (2,1)
[(2,1),(1,2),(2,3),(1,1)] : List ( Int, Int 
8. Januar 2024 Zustände und Nachrichten in Web-Apps: Model und Msg. Zufall mit Cmd in Elm. Beispielcode ist in session-2023-12-18.zip.
18. Dezember 2023 Wie man Web-Apps mit Elm baut. Mein Beispielcode ist in session-2023-12-18.zip.
11. Dezember 2023 Boolesche Formeln, Wahrheitsbelegungen, Auswertung, Wahrheitstabellen. Schaltkreis versus Formel. Vorstellung des zweiten Programmierprojekts.
4. Dezember 2023 Nochmal map, filter, fold. Currying. Kombinatorik (Potenzmengen, cartesisches Produkt).
27. November 2023 map, fold, filter: session-2023-11-27.zip.
20. November 2023 Nochmal Rekursion versus Endrekursion, jetzt am Beispiel firstK; danach haben wir einen Sortieralgorithmus (hier: Insertionsort) implementiert und dabei immer auf Endrekursion geachtet. Wir haben auch "per Hand" die Auswertung der Ausdrücke simuliert und den Unterschied zwischen Endrekursion und Nichtendrekursion gesehen. Den Code finden Sie in session-2023-11-20.zip.
13. November 2023

Nachtrag zum Geometrieprojekt. Die Abgabefrist ist Sonntag, der 3. Dezemeber 2023. Zur Klärung: ein Punkt auf dem Rand eines Dreiecks (oder auf einer Ecke), zählt zum Dreieck dazu. insideTriangle sollte also True ausgeben.

Für die Testinputs: beschränken Sie sich bitte auf "vernünftige" Werte wie (50.5, -2.7) und vermeiden Sie extreme Zahlen wie (6.123233995736766e-17, 3e+200). Bei solchen Zahlen führen nämlich bereits Addition und Subtraktion zu Rundungsfehlern.

Damit Sie Ihre Funktionen für Rotation testen können, habe ich eine Test-App geschrieben:

Den Quelltext meiner Rotierfuntion gebe ich Ihnen natürlich nicht. Ich stelle Ihnen aber eine Dummy-Implementierung zur Verfügung, die es falsch macht, aber so, dass Sie die App zum Laufen kriegen und rumexperiemntieren können: project-1-geometry.zip.

Inhalt der Vorlesung: Listen (Kapitel 4). Konstruktion, Dekonstruktion. Unterschied zwischen "naiver" Rekursion, die irgendwann bei Überbelastung mit einer Fehlermeldung abstürzt, und Endrekursion. Den gesamten Code finden Sie in session-2023-11-13.zip.

6. November 2023 Custom Types mit Ladegut/Payload (Kapitel 3.4). Datenkonsistenz. Typenvariable (Kapitel 3.5). Rekursive Datentypen (Kapitel 3.6).

Den gesamten Code finden Sie in session-2023-11-06.zip.

30. Oktober 2023

Zusammengesetzte Daten: Records. Beispiel Kalenderdaten type alias Date = {year : Int, month : Int, day : Int}. Die (unvollständige) Implementierung finden Sie in Date.elm.

Vorstellung des Geometrie-Programmierprojekts in Kapitel 3.2.

Custom types (auch Union Types genannt), am Beispiel type CivilStatus = Single | Maried | Divorced | Widowed | CivilUnion. Den Code finden Sie in CivilStatus.elm.

23. Oktober 2023

Inhalt. Rekursion. Verzweigte Rekursion (Fib). Zwischenergebnis mit let ... in ... . Schnelle Fibonacci-Zahlen mit Tuple.

Hier das Modul von Herrn Schellenberger zum Messen der Laufzeit.

Installation. Entpacken Sie die .zip-Datei und verschieben Sie den Ordner schellenberger-measure-time in Ihr Elm-Verzeichnis. Öffnen Sie dann die Datei elm.json und fügen dann folgendes hinzu:

    "source-directories": [
        "src", /* das sollte bereits drinstehen */
        "schellenberger-measure-time" /* das müssen Sie jetzt hinzufügen
      ],

Die Zeitmessungs-App: gehen Sie in Ihr Elm-Verzeichnis und starten elm reactor:.

elm reactor                
Go to http://localhost:8000 to see your project dashboard.

Geben Sie jetzt http://localhost:8000 in die Adresszeile Ihres Browsers ein. Sie sehen nun den Inhalt Ihres Elm-Verzeichnisses. Gehen Sie in den Ordner schellenberger-measure-time und klicken dann auf Benchmark.elm Sie sollten nun eine Webseite sehen, die ungefähr so aussieht:

Eventuell sehen Sie aber folgende Fehlermeldung:

Falls Sie die Fehlermeldung sehen, dann liegt das daran, dass das Modul Time noch nicht installiert ist. Gehen Sie mit einer Shell in den Elm-Ordner und tippen

elm install elm/time

und tippen dann Y. Dann wird dieses Modul installiert. Gehen Sie nun zurück in den Browser und laden die Seite neu. Jetzt sollte es funktionieren.

Ihre eigenen Implementierungen messen. Um Ihre eigene Implementierung zu testen, öffnen Sie Fib.elm und ändern Zeile 8 und Zeile 17.

Meine Beispielimplementierungen finden Sie in der Datei Examples.elm, die auch in der obigen Zip-Datei ist.

16. Oktober 2023 Die ganze "Papierprogrammierung" aus der letzten Woche, jetzt mit Elm. Fallunterscheidungen (if ... then ... else ...). Der Datentyp Bool. Rekursion
9. Oktober 2023 Programmieren ohne Rechner: Ausdrücke auswerten; Funktionen definieren; Fallunterscheidungen.