950 likes | 969 Views
Algorithmisches Problemlösen. Klaus Becker 2005. Algorithmisches Problemlösen. Teil 1. Programmgesteuerte Systeme. Automatisierung. Mit Hilfe programmgesteuerter Systeme lassen sich Vorgänge automatisieren. . Gelenkarmroboter mit Schweißbrenner (Foto: H. Weihe, 2000, Lizenz: Public Domain).
E N D
Algorithmisches Problemlösen Klaus Becker 2005
Teil 1 Programmgesteuerte Systeme
Automatisierung Mit Hilfe programmgesteuerter Systeme lassen sich Vorgänge automatisieren. Gelenkarmroboter mit Schweißbrenner (Foto: H. Weihe, 2000, Lizenz: Public Domain)
Karol, der Roboter Als Beispiel eines sehr einfachen programmgesteuerten Systems betrachten wir einen Roboter (Karol oder Karel oder Karl), der seine Arbeit in einer rechteckigen Welt verrichtet. Die Welt, in der sich Karol bewegt, ist in Felder aufgeteilt ist. Auf diesen Feldern können Quader, Ziegel oder Markierungen liegen.
Karol, der Roboter Mit Hilfe von Anweisungen lässt sich Karol steuern. Karol führt dann jeweils bestimmte Aktionen aus. Anweisung: Aktion: Schritt Karol bewegt sich ein Feld weiter (sofern dies möglich ist). LinksDrehen Karol dreht sich um 90° nach links. RechtsDrehen Karol dreht sich um 90° nach rechts. Hinlegen Karol legt einen Ziegel vor sich ab. Aufheben Karol hebt einen vor ihm liegenden Ziegel auf. MarkeSetzen Karol markiert das Feld, auf dem er gerade steht. MarkeLöschen Karol entfernt eine Markierung, auf der er gerade steht.
Aufgabe Steuern Sie Karol zunächst im „Direktmodus“ mit Hilfe der vorgesehenen Schaltflächen. Steuern Sie Karol anschließend mit den entsprechenden Anweisungen. Diese werden in das dafür vorgesehene Fenster geschrieben. Nach einem Programmstart (▶ ) werden die Anweisungen von Karol automatisch ausgeführt. Vorher: Karol steht in der Ausgangsposition. Nachher: Karol hat eine Treppe gebaut. LinksDrehenSchrittLinksDrehen...
Aufgabe Vorher: Karol steht in der Ausgangsposition. Nachher: Karol hat eine Siegerpodest gebaut. Versuchen Sie, direkt ein korrektes Programm zu schreiben. Beachten Sie, dass Karol bei einem Schritt nach vorne maximal einen Ziegel hoch steigen kann.
Karol als programmgesteuertes System Zustand vorher LinksDrehenSchrittLinksDrehen LinksDrehenHinlegen Hinlegen HinlegenLinksDrehen LinksDrehenSchrittLinksDrehen LinksDrehenHinlegen HinlegenLinksDrehen LinksDrehen... Programm (Algorithmus) Roboter(Prozessor) Zustand nachher
Problemspezifikation Zustand vorher Eine Problemspezifikation ist eine vollständige und eindeutige Beschreibung des Ausgangszustands („Zustand vorher“) und Zielzustandes („Zustand nachher“). Roboter(Prozessor) Zustand nachher
Algorithmus LinksDrehenSchrittLinksDrehen LinksDrehenHinlegen ... Programm (Algorithmus) Roboter(Prozessor) Ziel ist es, einen komplizierten Ablauf / Vorgang so zu beschreiben, dass er von einem „Prozessor“ (Mensch oder Maschine, der bzw. die für die Ausführung zuständig ist) ausgeführt werden wird. Eine Algorithmus ist eine endliche Folge eindeutig ausführbarer Anweisungen zur Lösung eines Problems.
Algorithmus LinksDrehenSchrittLinksDrehen LinksDrehenHinlegen ... Programm (Algorithmus) Roboter(Prozessor) Anforderungen an Algorithmen: - Endlichkeit: Die Anweisungsfolge ist durch einen endlichen Text beschrieben. - Ausführbarkeit: Die Anweisungen sind für den „Prozessor“ (Mensch oder Maschine) verständlich formuliert und ausführbar. - Eindeutigkeit: An jeder Stelle ist der Ablauf der Anweisungen eindeutig festgelegt. - Allgemeinheit: Die Anweisungen besitzen Gültigkeit für die Lösung einer ganzen Problemklasse, nicht nur für ein Einzelproblem. (s. Gasper, Leiß, Spengler, Stimm: Technische und theoretische Informatik)
Korrektheit Eine Algorithmus ist korrekt bzgl. einer Spezifikation, wenn er jeden möglichen Ausgangszustand tatsächlich in den festgelegten Zielzustand überführt. Zustand vorher LinksDrehenSchrittLinksDrehen LinksDrehenHinlegen ... Programm (Algorithmus) Roboter(Prozessor) Zustand vorher
Aufgabe Beim Schreiben eines Programms müssen bestimmte Regeln eingehalten werden. Prüfen Sie, welche der folgenden Schreibweisen erlaubt bzw. nicht erlaubt sind: - Anweisungen hintereinander schreiben - Trennsymbole benutzen (z. B. ein Komma) - Groß- / Kleinschreibung nicht beachten - Anweisungsbezeichner ändern oder trennen - ... LinksdrehenSchrittLinksDrehen, LinksDrehenHinlegen Ablegen Hin-legen... Programm (Algorithmus) Roboter(Prozessor)
Syntaxfehler Die Sprache, in der Algorithmen für einen „Prozessor“ formuliert werden, ist (normalerweise) genau festgelegt. Den Aufbau der in dieser Sprache korrekt formulierten „Programme“ wird durch sog. Syntaxregeln beschrieben. Verstößt man gegen eine dieser Syntaxregeln, so kommt es zu einem Syntaxfehler (Fehlermeldung z. B.: unbekannte Anweisung). LinksdrehenSchrittLinksDrehen, Links DrehenHinlegen Ablegen Hin-legen... Anweisungen (Programm) Roboter(Prozessor) Syntaxfehler
Logische Fehler Wenn das Programm nicht korrekt ist, dann liegt ein logischer Fehler vor. Beachte, dass man in der Regel in einem solchen Fall keine Fehlermeldung erhält. Logische Fehler kann man durch Austesten des Programms feststellen. Beabsichtigter Zielzustand LinksDrehenSchrittLinksDrehenLinksDrehenHinlegenHinlegenHinlegenLinksDrehenSchrittLinksDrehenLinksDrehen ... Ausgangs-zustand Tatsächlicher Zielzustand
Teil 2 Wiederholungen
Viel (zu viel) Schreibarbeit! Vorher: Karol steht in der Ausgangsposition. MarkeSetzenSchritt MarkeSetzenSchritt MarkeSetzenSchritt MarkeSetzenSchritt MarkeSetzenSchritt MarkeSetzenSchritt MarkeSetzenSchritt Sequenz: Folge von Anweisungen Nachher: Karol hat den Weg zur Wand markiert.
Algorithmus mit Wiederholung Vorher: Karol steht in der Ausgangsposition. Wiederhole 7 mal MarkeSetzen Schritt *wiederhole Wiederholungs-anweisung Nachher: Karol hat den Weg zur Wand markiert.
Wiederholung mit fester Anzahl Soll eine Sequenz (von Anweisungen) mehrfach ausgeführt werden, wobei die Anzahl der Wiederholungen von Anfang an feststeht, so benutzt man zur Beschreibung eine Wiederholung mit fester Anzahl. Wiederhole <n> mal <Sequenz>*wiederhole Allgemeines Schema Wiederhole 7 mal Schritt MarkeSetzen*wiederhole Beispiel Eine solche Wiederholung mit fester Anzahl kann als Einheit aufgefasst werden und bildet dann eine einzelne (strukturierte) Anweisung.
Schachtelung von Wiederholungen Vorher: Karol steht in der Ausgangsposition. wiederhole 4 mal MarkeSetzen Schritt *wiederholeLinksDrehenwiederhole 4 mal MarkeSetzen Schritt *wiederhole... wiederhole 4 mal wiederhole 4 mal MarkeSetzen Schritt *wiederhole LinksDrehen*wiederhole Nachher: Karol hat seine Welt umrundet und Markierungen hinterlegt.
Schachtelung von Wiederholungen Wiederholungsanweisungen kann man auch ineinander schachteln. Um einen besseren Überblick über die zusammengehörenden Anweisungen zu erhalten, sollte man sie systematisch einrücken (am besten 2 Anschläge). wiederhole 4 mal MarkeSetzen Schritt *wiederholeLinksDrehenwiederhole 4 mal MarkeSetzen Schritt *wiederhole... wiederhole 4 mal wiederhole 4 mal MarkeSetzen Schritt *wiederhole LinksDrehen*wiederhole Programm Struktogramm
Aufgabe Vorher: Karol steht in der Ausgangsposition in einer 10x10-Zellen-Welt. Nachher: Karol hat eine 6 Ziegel hohe Mauer gebaut.
Aufgabe Vorher: Karol steht in der Ausgangsposition in einer 10x10-Zellen-Welt. Nachher: Karol hat ein Schachbrettmuster gelegt. Zusatz: Etwas schwieriger ist das Problem, wenn der äußere „freie Rand“ nicht vorhanden ist.
Teil 3 Fallunterscheidungen
Situationsabhängiges Vorgehen Vorher: Karol steht vor einer Reihe mit Ziegeln. Schritt AufhebenSchrittMarkeSetzen Schritt Schritt AufhebenSchrittMarkeSetzen AufhebenSchrittMarkeSetzen Schritt Nachher: Karol steht am Ende der Reihe, hat alle Ziegel aufgesammelt und ihre Positionen markiert.
Fallunterscheidung wenn IstZiegel dannAufheben Schritt MarkeSetzensonstSchritt*wenn IstZiegel? (f)Schritt wahr falsch IstZiegel? IstZiegel? (w)AufhebenSchrittMarkeSetzen AufhebenSchrittMarkeSetzen Schritt
Algorithmus mit Fallunterscheidung Vorher: Karol steht vor einer Reihe mit Ziegeln. Wiederhole 7 mal wenn IstZiegel dannAufheben Schritt MarkeSetzen sonstSchritt *wenn*wiederhole Nachher: Karol steht am Ende der Reihe, hat alle Ziegel aufgesammelt und ihre Positionen markiert.
Aufgabe Vorher: Karol steht vor eine Reihe von Ziegeln. Nachher: Karol hat die Lücken in der Ziegelreihe geschlossen.
Aufgabe Vorher: Karol steht vor eine Reihe, in der sich genau drei Quader befinden. Es sollen dabei keine zwei Quader nebeneinander stehen. Nachher: Karol hat die Quader auf seinem Weg nach Süden umlaufen.
Ein- / zweiseitige Fallunterscheidung ...wiederhole 9 malwenn NichtIstZiegel dann Hinlegen Schrittsonst Schritt*wenn*wiederhole... ...wiederhole 9 malwenn NichtIstZiegel dann Hinlegen*wenn Schritt*wiederhole... EinseitigeFallunter-scheidung ZweiseitigeFallunter-scheidung wahr falsch NichtIstZiegel? wahr falsch NichtIstZiegel? Hinlegen HinlegenSchritt Schritt Schritt
Darstellungen wenn NichtIstZiegel dann Hinlegen Schrittsonst Schritt*wenn wenn NichtIstZiegel dann Hinlegen*wennSchritt Programm FlussdiagrammProgrammablaufplan wahr falsch NichtIstZiegel? wahr falsch NichtIstZiegel? Hinlegen HinlegenSchritt Schritt Schritt Struktogramm
Teil 4 Wiederholungen mit Abbruchbedingungen
Wiederholung mit fester Anzahl Vorher: Karol steht in der Ausgangsposition. Dieses Programm ist nur dann korrekt, wenn die Welt genau 8 Felder lang ist. Bei beliebig großen Welten benötigt man Wiederholungsanweisungen mit nicht vorher feststehender Anzahl. Wiederhole 7 mal MarkeSetzen Schritt *wiederhole Nachher: Karol hat den Weg zur Wand markiert.
Bedingte Wiederholung Steuerung mit einer Wiederholungsanzahl Steuerung mit einer Abbruchbedingung Vorher: Karol steht in der Ausgangsposition. Wiederhole 7 mal MarkeSetzen Schritt *wiederhole solange NichtIstWand tueMarkeSetzen Schritt*solange Nachher: Karol hat den Weg zur Wand markiert.
Bedingte Wiederholung solange NichtIstWand tueMarkeSetzen Schritt*solange NichtIstWand ?MarkeSetzenSchritt ... falsch NichtIstWand? wahr MarkeSetzen ... Schritt NichtIstWand ?
Aufgabe Testen Sie die folgenden Varianten bedingter Wiederholungen (u. a. auch in einer 1x1-Felder-Welt). Welche Gemeinsamkeiten bzw. Unterschiede gibt es? solange NichtIstWand tueMarkeSetzen Schritt*solange wiederhole MarkeSetzen Schritt*wiederhole solange NichtIstWand wiederhole MarkeSetzen Schritt*wiederhole bis IstWand
Aufgabe Verdeutliche die Ausführung der Programme jeweils mit einen Programmablaufplan. solange NichtIstWand tueMarkeSetzen Schritt*solange wiederhole MarkeSetzen Schritt*wiederhole bis IstWand
Aufgabe Teste das folgende Programm. Erkläre das Verhalten. solange NichtIstMarke tue solange NichtIstWand tue Schritt *solange LinksDrehen LinksDrehen*solange
Varianten von Abbruchbedingungen solange NichtIstWand tueMarkeSetzen Schritt*solange wiederhole MarkeSetzen Schritt*wiederhole bis IstWand Eintrittsbedingung falsch MarkeSetzen NichtIstWand? wahr Schritt MarkeSetzen falsch IstWand? Schritt wahr Austrittsbedingung
Eintrittsbedingung / Austrittsbedingung Vorher: Karol steht in der Ausgangsposition. Vorher: Karol steht in der Ausgangsposition. solange NichtIstWand tueMarkeSetzen Schritt*solange wiederhole MarkeSetzen Schritt*wiederhole bis IstWand Nachher: Karol hat den Weg zur Wand markiert. Abbruch: Karol ist an die Wand gestoßen. Bei einer Wiederholung mit Austrittsbedingung wird die Sequenz (von Anweisungen) mindestens einmal ausgeführt, bei einer Wiederholung mit Eintrittsbedingung kann die Sequenz (von Anweisungen) auch überhaupt nicht ausgeführt werden.
Varianten von Austrittsbedingungen wiederhole MarkeSetzen Schritt*wiederhole bis IstWand wiederhole MarkeSetzen Schritt*wiederhole solange NichtIstWand MarkeSetzen MarkeSetzen Schritt Schritt falsch wahr IstWand? NichtIstWand? wahr falsch Bei einer Wiederholung mit Austrittsbedingung kann überprüft werden, ob die Austrittsbedingung erfüllt bzw. nicht erfüllt ist.
Endlosschleife solange NichtIstMarke tue solange NichtIstWand tue Schritt *solange LinksDrehen LinksDrehen*solange wiederhole immer solange NichtIstWand tue Schritt *solange LinksDrehen LinksDrehen*wiederhole Bei einer Wiederholung mit Abbruchbedingung kann es vorkommen, dass es zu keinem regulären Abbruch der Wiederholungen kommt. Karol gerät dann in eine Endlosschleife.
Aufgabe Vorher: Karol steht in der Ausgangsposition in einer beliebig großen Welt. Nachher: Karol hat eine 6 Ziegel hohe Mauer gebaut.
Aufgabe Vorher: Karol steht in der Ausgangsposition in einer beliebig großen Welt. Nachher: Karol hat eine 1 Ziegel hohe Mauer zur Begrenzung der Welt gebaut.
Aufgabe Vorher: Karol steht in der Ausgangsposition. In der Welt ist eine geschlossene Bahn aus Ziegeln gelegt. Entwickle ein passendes Programm mit Hilfe geeigneter Entscheidungs- und Wiederholungsanweisungen. Nachher: Karol hat die Ziegelbahn umrundet und Markierungen hinterlegt.
Teil 5 Aufbau und Entwicklung von Algorithmen
Ein Komplexer Algorithmus Vorher: solange NichtIstMarke tueMarkeSetzen wenn IstZiegel dannSchritt sonstLinksDrehen wenn IstZiegel dannSchritt sonstRechtsDrehen RechtsDrehenSchritt *wenn *wenn*solange Nachher:
Strukturbetonte Darstellung Programm solange NichtIstMarke tueMarkeSetzen wenn IstZiegel dannSchritt sonstLinksDrehen wenn IstZiegel dannSchritt sonstRechtsDrehen RechtsDrehenSchritt *wenn *wenn*solange Struktogramm
Kontrollstrukturen Sequenz Fallunterscheidung Wiederholung Kontrollstrukturen dienen dazu, den Ablauf der Verarbeitung festzulegen.