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 [2024/08/06 16:47] (aktuell) – 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:// |