Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m323:learningunits:lu01:tracetable [2024/08/06 16:37] – angelegt kmaurizi | modul:m323:learningunits:lu01:tracetable [2025/11/17 13:37] (aktuell) – alte Version wiederhergestellt (2025/11/13 10:36) kmaurizi | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== LU01d - Trace Table ====== | ====== LU01d - Trace Table ====== | ||
| - | Trace Tables sind ein nützliches | + | Trace Tables sind ein unverzichtbares |
| ===== Was ist ein Trace Table? ===== | ===== Was ist ein Trace Table? ===== | ||
| - | Ein Trace Table, auch Verfolgungstabelle | + | Ein Trace Table, auch als Verfolgungstabelle |
| ===== Aufbau eines Trace Tables ===== | ===== Aufbau eines Trace Tables ===== | ||
| - | Ein typischer | + | Ein Trace Table besteht |
| - | * **Spalten**: Jede Spalte | + | * **Schritt**: Diese Spalte |
| - | * **Zeilen**: Jede Zeile entspricht einem Ausführungsschritt des Programms. | + | * **Anweisung**: |
| - | + | * **Variablen**: | |
| - | In den Zellen der Tabelle wird der Wert der jeweiligen Variable | + | * **Bedingungen**: Wenn das Programm Kontrollstrukturen wie '' |
| + | * **Kommentare**: | ||
| ===== Beispiel eines Trace Tables ===== | ===== Beispiel eines Trace Tables ===== | ||
| - | Nehmen | + | Betrachten |
| <code python> | <code python> | ||
| - | zahlen = [1, 2, 3] | + | zahlen = [4, 3, 1, 2] |
| - | summe = 0 | + | for i in range(len(zahlen)): |
| - | for zahl in zahlen: | + | |
| - | | + | if zahlen[j] > zahlen[j+1]: |
| + | zahlen[j], zahlen[j+1] | ||
| </ | </ | ||
| - | Um diesen Algorithmus mit einem Trace Table zu verfolgen, könnten wir folgende Tabelle erstellen: | + | Ein entsprechender |
| - | ^ Schritt ^ zahl ^ summe ^ | + | ^ Schritt ^ i ^ j ^ zahlen[j] ^ zahlen[j+1] ^ Vergleich (zahlen[j] > zahlen[j+1]) ^ Array-Zustand |
| - | | Initial | + | | 1 | 0 | 0 | 4 | 3 | Ja | [3, 4, 1, 2] | |
| - | | 1 | 1 | 1 | | + | | 2 | 0 | 1 | 4 | 1 | Ja | [3, 1, 4, 2] | |
| - | | 2 | 2 | 3 | | + | | 3 | 0 | 2 | 4 | 2 | Ja | [3, 1, 2, 4] | |
| - | | 3 | 3 | 6 | | + | | 4 | 1 | 0 | 3 | 1 | Ja | [1, 3, 2, 4] | |
| + | | 5 | 1 | 1 | 3 | 2 | Ja | [1, 2, 3, 4] | | ||
| + | | 6 | 2 | 0 | 1 | 2 | Nein | [1, 2, 3, 4] | | ||
| + | | 7 | 3 | - | - | - | - | [1, 2, 3, 4] | | ||
| - | ===== Schrittweise | + | ==== Detaillierte |
| - | * **Initial**: Bevor der Algorithmus startet, hat die Variable '' | + | * **Schritt 1-3**: Während |
| - | * **Schritt | + | * **Schritt |
| - | * **Schritt | + | * **Schritt |
| - | * **Schritt | + | * **Schritt |
| - | Der Trace Table zeigt klar, wie die Variable | + | ===== Rekursives Bubble Sort Beispiel ===== |
| + | |||
| + | Nun erweitern wir das Beispiel mit einer rekursiven Implementierung des Bubble Sort. Der rekursive Ansatz arbeitet, indem er die Liste iterativ sortiert, bis keine weiteren Vertauschungen mehr notwendig sind. | ||
| + | |||
| + | <code python> | ||
| + | def bubble_sort_recursive(zahlen, | ||
| + | if n == 1: | ||
| + | return | ||
| + | |||
| + | for i in range(n - 1): | ||
| + | if zahlen[i] > zahlen[i + 1]: | ||
| + | zahlen[i], zahlen[i + 1] = zahlen[i + 1], zahlen[i] | ||
| + | |||
| + | bubble_sort_recursive(zahlen, | ||
| + | |||
| + | zahlen = [4, 3, 1, 2] | ||
| + | bubble_sort_recursive(zahlen, | ||
| + | </ | ||
| + | |||
| + | Ein Trace Table für diese rekursive Version könnte folgendermaßen aussehen: | ||
| + | |||
| + | ^ Schritt ^ n ^ i ^ zahlen[i] ^ zahlen[i+1] ^ Vergleich (zahlen[i] > zahlen[i+1]) ^ Array-Zustand ^ Rekursionsaufruf ^ | ||
| + | | 1 | 4 | 0 | 4 | 3 | Ja | [3, 4, 1, 2] | Nein | | ||
| + | | 2 | 4 | 1 | 4 | 1 | Ja | [3, 1, 4, 2] | Nein | | ||
| + | | 3 | 4 | 2 | 4 | 2 | Ja | [3, 1, 2, 4] | Nein | | ||
| + | | 4 | 4 | - | - | - | - | [3, 1, 2, 4] | Ja (n=3) | | ||
| + | | 5 | 3 | 0 | 3 | 1 | Ja | [1, 3, 2, 4] | Nein | | ||
| + | | 6 | 3 | 1 | 3 | 2 | Ja | [1, 2, 3, 4] | Nein | | ||
| + | | 7 | 3 | - | - | - | - | [1, 2, 3, 4] | Ja (n=2) | | ||
| + | | 8 | 2 | 0 | 1 | 2 | Nein | [1, 2, 3, 4] | Nein | | ||
| + | | 9 | 2 | - | - | - | - | [1, 2, 3, 4] | Ja (n=1) | | ||
| + | |||
| + | ==== Detaillierte Analyse des Rekursiven Beispiels ==== | ||
| + | |||
| + | * **Schritt 1-3**: In der ersten Iteration werden | ||
| + | * **Schritt 4**: Der erste rekursive Aufruf von '' | ||
| + | * **Schritt 5-6**: In dieser rekursiven Iteration werden die Werte weiter sortiert, bis '' | ||
| + | * **Schritt 7**: Der nächste rekursive Aufruf erfolgt mit '' | ||
| + | * **Schritt 8-9**: Im letzten rekursiven Aufruf mit '' | ||
| ===== Anwendungsfälle von Trace Tables ===== | ===== Anwendungsfälle von Trace Tables ===== | ||
| - | Trace Tables sind besonders | + | Trace Tables sind nützlich in verschiedenen Szenarien: |
| - | * **Fehlerbehebung**: Um herauszufinden, warum ein Programm nicht wie erwartet funktioniert, kann man den Programmablauf Schritt für Schritt nachvollziehen. | + | |
| - | * **Algorithmus-Analyse**: Sie helfen beim Verständnis | + | * **Debugging komplexer Algorithmen**: Sie helfen dabei, den genauen Ablauf eines Algorithmus nachzuvollziehen, |
| - | * **Lehre und Lernen**: Sie sind ein hervorragendes Werkzeug für das Lehren | + | * **Verständnis von Kontrollstrukturen**: |
| + | * **Testen und Verifizieren von Programmen**: Durch das Nachverfolgen der Zustände können Programmierer sicherstellen, | ||
| + | |||
| + | ===== Erweiterte Nutzung von Trace Tables ===== | ||
| + | |||
| + | Neben einfachen Beispielen können Trace Tables auch bei komplexeren Strukturen verwendet werden: | ||
| + | |||
| + | * **Rekursive Funktionen**: | ||
| + | * **Optimierungsalgorithmen**: | ||
| + | * **Nebenläufigkeit | ||
| ===== Schlussfolgerung ===== | ===== Schlussfolgerung ===== | ||
| - | Trace Tables sind ein einfaches, aber mächtiges Werkzeug, um den Ablauf eines Programms nachzuvollziehen. Sie bieten eine klare und strukturierte Methode, um Variablenänderungen | + | Trace Tables sind ein mächtiges Werkzeug, um Programme und Algorithmen systematisch zu analysieren. Sie bieten eine visuelle Darstellung des Programmablaufs |
| + | ---- | ||
| + | {{tag> | ||
| + | [[https:// | ||