3 Algorithmen Algorithmen sind eine der ältesten ...
3 Algorithmen Algorithmen sind eine der ältesten ...
3 Algorithmen Algorithmen sind eine der ältesten ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Peter Hubwieser Ablaufmodellierung WS 2002/03<br />
KAPITEL 3: <strong>Algorithmen</strong> LERNINHALTE V 1.0 Seite 1<br />
3 <strong>Algorithmen</strong><br />
<strong>Algorithmen</strong> <strong>sind</strong> <strong>eine</strong> <strong>der</strong> <strong>ältesten</strong> Modellierungsformen für Abläufe. Bereits in <strong>der</strong> Antike<br />
kannte man informelle Beschreibungen für Rechenverfahren, wie den berühmten<br />
Euklidischen Algorithmus zur Bestimmung <strong>der</strong> Primzahleigenschaft:<br />
„Nimmt man beim Vorliegen zweier ungleicher Zahlen abwechselnd immer die kl<strong>eine</strong>re von<br />
<strong>der</strong> größeren weg, so müssen, wenn niemals ein Rest die vorangehende Zahl genau misst, bis<br />
die Einheit übrigbleibt, die ursprünglichen Zahlen gegeneinan<strong>der</strong> prim sein“ (aus Euklids<br />
Buch VII, §1, zitiert nach Gericke H.: Mathematik in Antike und Orient – Mathematik im<br />
Abendland. Fourier, Wiesbaden, 3. Aufl. 1994). In §2 wird nach dieser Methode <strong>der</strong> größte<br />
gemeinsame Teiler <strong>der</strong> zweier Zahlen ermittelt (nämlich <strong>der</strong> o.g. Rest). Von diesem<br />
Algorithmus wird im Folgenden noch mehrfach die Rede sein. Der Name „Algorithmus“<br />
weist (wie schon in Kapitel 1 erwähnt) auf Al-Khwarizmi hin, <strong>der</strong> viele Elemente <strong>der</strong> antiken<br />
und altindischen Mathematik im Nahen Osten verbreitete, u.a. auch viele solcher<br />
Rechenverfahren.<br />
Dem hohen Alter dieser Entwicklung gemäß gibt es <strong>eine</strong> Vielzahl von unterschiedlichen<br />
Methoden, <strong>Algorithmen</strong> darzustellen, wie etwa Zustandsdiagramme, Textersetzungssysteme,<br />
Termersetzungssysteme, Programme für abstrakte Maschinen (Turingmaschinen,<br />
Registermaschinen), Programme für reale Maschinen (Programmiersprachen), z.B. im<br />
funktionalen o<strong>der</strong> im imperativen Stil o<strong>der</strong> Pseudosprachen („wenn A dann B“).<br />
Wir werden in diesem Kurs u.a. die letztgenannten zwei Methoden kennen lernen.<br />
3.1 Der Begriff „Algorithmus“<br />
„Ein Algorithmus ist ein Verfahren mit <strong>eine</strong>r präzisen (d.h. in <strong>eine</strong>r genau festgelegten<br />
Sprache abgefassten) endlichen Beschreibung unter Verwendung effektiver (d.h. tatsächlich<br />
ausführbarer) elementarer (Verarbeitungs-) Schritte.“ (nach Broy, M.: Informatik: Eine<br />
grundlegende Einführung, Band 1. Springer-Verlag, Berlin, 2. Auflage, 1998 )<br />
Beispiel (Bubblesort): Alphabetische Sortierung <strong>eine</strong>r endlichen Liste von Namen:<br />
Algorithmus „Bubblesort“:<br />
Wie<strong>der</strong>hole (Anzahl <strong>der</strong> Elemente <strong>der</strong> Liste – 1) mal<br />
Wie<strong>der</strong>hole für alle Namen vom ersten bis zum vorletzten<br />
Falls <strong>der</strong> betrachtet Name alphabetisch hinter den folgenden gehört<br />
Vertausche die beiden Namen<br />
Ende Falls<br />
Ende Wie<strong>der</strong>hole<br />
Ende Wie<strong>der</strong>hole<br />
Ende Algorithmus<br />
Dieses Verfahren ist allerdings mit Vorsicht zu genießen, da es ziemlich ineffizient ist. Eine<br />
nähere Betrachtung verschiedener Sortieralgorithmen und ihrer Effizienz erfolgt übrigens im<br />
Modul „<strong>Algorithmen</strong> und Datenstrukturen“ des 2. Ausbildungsjahres.
Peter Hubwieser Ablaufmodellierung WS 2002/03<br />
KAPITEL 3: <strong>Algorithmen</strong> LERNINHALTE V 1.0 Seite 2<br />
Ein exemplarischer Ablauf von „Bubblesort“ könnte so aussehen:<br />
Erste äußere Wie<strong>der</strong>holung<br />
Hans Emma Yuri Anna Erste innere Wie<strong>der</strong>holung<br />
Emma Hans Yuri Anna<br />
Emma Hans Yuri Anna Letzte innere Wie<strong>der</strong>holung<br />
Emma Hans Anna Yuri Ergebnis <strong>der</strong> ersten äußeren Wie<strong>der</strong>holung<br />
Zweite äußere Wie<strong>der</strong>holung<br />
Emma Hans Anna Yuri Erste innere Wie<strong>der</strong>holung<br />
Emma Hans Anna Yuri<br />
Emma Anna Hans Yuri Letzte innere Wie<strong>der</strong>holung<br />
Emma Anna Hans Yuri Ergebnis <strong>der</strong> zweiten äußeren Wie<strong>der</strong>holung<br />
Dritte äußere Wie<strong>der</strong>holung<br />
Emma Anna Hans Yuri Erste innere Wie<strong>der</strong>holung<br />
Anna Emma Hans Yuri<br />
Anna Emma Hans Yuri Letzte innere Wie<strong>der</strong>holung<br />
Anna Emma Hans Yuri Ergebnis <strong>der</strong> dritten äußeren Wie<strong>der</strong>holung<br />
Ende des Algorithmus<br />
Ein Algorithmus stellt <strong>eine</strong> bestimmte Lösung für <strong>eine</strong> ganze Klasse von Aufgaben dar, in<br />
unserem Fall die Sortierung <strong>eine</strong>r endlichen Reihe von Namen. Zu dieser Klasse gehört meist<br />
<strong>eine</strong> Vielzahl konkreter Aufgaben, hier z.B.:<br />
• Sortiere („Emil“, „Anna“, „Theo“) o<strong>der</strong><br />
• Sortiere („Kokodil“, „Falter“, „Pferd“, „Elefant“).<br />
Für die Anwendung auf <strong>eine</strong> konkrete Aufgabe müssen die entsprechenden Daten (hier die<br />
Liste <strong>der</strong> Namen) dem Algorithmus als Eingabe übergeben werden. Das En<strong>der</strong>gebnis wird<br />
vom Algorithmus dann wie<strong>der</strong>um in Form <strong>eine</strong>r Ausgabe an den Benutzer zurückgeliefert.<br />
Diesen Vorgang kann man mit Hilfe <strong>eine</strong>r Funktion Bubblesort, die jeweils <strong>eine</strong> Liste von<br />
Namen (Eingabe) auf <strong>eine</strong> an<strong>der</strong>e Liste (Ausgabe) abbildet, beschreiben:<br />
Bubblesort(“Hans”, “Emma“, “Yuri”, “Anna”) = („Anna“, “Emma”, “Hans”, “Yuri”).<br />
Eine nähere Beschreibung dieser Sichtweise (<strong>Algorithmen</strong> als Funktionen) finden Sie in <strong>der</strong><br />
mathematischen Fundierung.<br />
Eine solche Beschreibung durch <strong>eine</strong> Funktion ist übrigens nur dann zulässig, wenn <strong>der</strong><br />
Algorithmus zu je<strong>der</strong> Eingabe <strong>eine</strong> eindeutige Ausgabe liefert (s.a. mathematische Fundierung<br />
zu diesem Kapitel). Ab Kapitel 6 werden wir uns eingehen<strong>der</strong> mit dieser funktionalen<br />
Sichtweise beschäftigen.<br />
An<strong>der</strong>erseits gibt es für <strong>eine</strong> bestimmte Klasse von Aufgaben meist auch <strong>eine</strong> Vielzahl<br />
verschiedener <strong>Algorithmen</strong>, für die Sortierung <strong>eine</strong>r Liste von Namen z.B.: Bubblesort,<br />
Sortieren durch Einfügen, Quicksort, usw. Im Lauf dieses Weiterbildungskurses wird im<br />
Modul „<strong>Algorithmen</strong> und Datenstrukturen“ (im 2. Jahr) davon noch ausführlich die Rede sein.<br />
Einen bestimmten Algorithmus kann man auf <strong>eine</strong> Vielzahl verschiedener Arten darstellen.<br />
Wir haben zur Beschreibung von „Bubblesort“ oben z.B. <strong>eine</strong> informelle Notation in<br />
Pseudocode verwendet. Dabei symbolisiert die Einrückung <strong>eine</strong> Blockbildung, d.h. alle<br />
innerhalb <strong>eine</strong>s zusammengesetzten Verarbeitungsschrittes (Wie<strong>der</strong>holung, bedingter<br />
Verarbeitungsschritt) auszuführenden elementaren Verarbeitungsschritte stehen auf <strong>der</strong>selben
Peter Hubwieser Ablaufmodellierung WS 2002/03<br />
KAPITEL 3: <strong>Algorithmen</strong> LERNINHALTE V 1.0 Seite 3<br />
Einrückungsebene. Wir könnten denselben Algorithmus „Bubblesort“ aber auch mit Hilfe<br />
<strong>eine</strong>s Struktogramms darstellen (s. Abschnitt 3.5).<br />
3.2 Struktur von <strong>Algorithmen</strong><br />
Alle <strong>Algorithmen</strong> weisen gewisse strukturelle Gemeinsamkeiten auf (die allerdings in den<br />
verschiedenen Darstellungsarten oft sehr unterschiedlich beschrieben werden). Alle durch<br />
<strong>Algorithmen</strong> beschreibbaren Berechnungen kann man durch elementare<br />
Verarbeitungsschritte, bedingte Verarbeitungsschritte sowie Folgen bzw. Wie<strong>der</strong>holungen<br />
von elementaren Verarbeitungsschritte darstellen. Diese Klassen von Baust<strong>eine</strong>n werden<br />
daher auch oft als Strukturelemente von <strong>Algorithmen</strong> bezeichnet.<br />
3.2.1 Elementare Verarbeitungsschritte<br />
Es gibt elementare, unteilbare Verarbeitungsschritte, die unbedingt ausgeführt werden.<br />
Beispiel:<br />
schalte rotes Licht aus<br />
Neben elementaren Verarbeitungsschritten benötigt man zur Beschreibung von Abläufen drei<br />
Arten von zusammengesetzten Verarbeitungsschritten: Sequenzen, bedingte<br />
Verarbeitungsschritte, Wie<strong>der</strong>holungen.<br />
3.2.2 Sequenzen<br />
Hintereinan<strong>der</strong> auszuführende elementare Verarbeitungsschritten können zu Sequenzen<br />
zusammengefasst werden (je<strong>der</strong> Schritt übernimmt dabei das Ergebnis s<strong>eine</strong>s Vorgängers),.<br />
Beispiel:<br />
schalte gelbes Licht aus<br />
schalte grünes Licht ein<br />
Für die Trennung <strong>der</strong> einzelnen Komponenten <strong>eine</strong>r solchen Sequenz wird ein festes<br />
Trennzeichen vereinbart, z.B. ein Strichpunkt und/o<strong>der</strong> ein Zeilenwechsel.<br />
In Programmiersprachen ergibt sich oft <strong>der</strong> Bedarf, Sequenzen mit Hilfe von<br />
Begrenzungssymbolen zu <strong>eine</strong>m Block zusammenzufassen. Gebräuchlich <strong>sind</strong> z.B. begin<br />
und end bei Pascal-ähnlichen Sprachen o<strong>der</strong> geschweifte Klammern { und } in C, C++ o<strong>der</strong><br />
Java. An vielen Stellen können solche Blöcke anstatt einzelner Verarbeitungsschritte<br />
verwendet werden.<br />
3.2.3 Bedingte Verarbeitungsschritte<br />
Es existiert die Möglichkeit, Verarbeitungsschritte nur unter <strong>eine</strong>r bestimmten Bedingung<br />
auszuführen. Oft kann man zusätzlich <strong>eine</strong> alternative Verarbeitung angeben, die auszuführen<br />
ist, falls die Bedingung nicht erfüllt ist.<br />
Beispiel 1:<br />
Falls <strong>der</strong> betrachtet Name alphabetisch hinter den folgenden gehört<br />
Vertausche die beiden Namen<br />
Ende Falls<br />
Ebenso wie elementare können auch zusammengesetzte Verarbeitungsschritte <strong>eine</strong>r bedingten<br />
Verarbeitung unterzogen werden.<br />
Beispiel 2:
Peter Hubwieser Ablaufmodellierung WS 2002/03<br />
KAPITEL 3: <strong>Algorithmen</strong> LERNINHALTE V 1.0 Seite 4<br />
Falls die PIN akzeptiert wurde<br />
Wie<strong>der</strong>hole bis die Netzverbindung steht<br />
Warte<br />
Ende Wie<strong>der</strong>hole<br />
Sonst<br />
Meldung „Abbruch: 3x falsche PIN!“<br />
Schalte das Telefon aus<br />
Ende Falls<br />
3.2.4 Wie<strong>der</strong>holung<br />
Sequenzen von Verarbeitungsschritten können wie<strong>der</strong>holt werden. Die Anzahl <strong>der</strong><br />
Wie<strong>der</strong>holungen wird wie<strong>der</strong>um durch <strong>eine</strong> bestimmte Bedingung geregelt. Auch die<br />
Wie<strong>der</strong>holung von zusammengesetzten Verarbeitungsschritten ist möglich.<br />
Beispiel:<br />
Wie<strong>der</strong>hole für alle Namen vom ersten bis zum vorletzten<br />
Falls <strong>der</strong> betrachtet Name alphabetisch hinter den folgenden gehört<br />
Vertausche die beiden Namen<br />
Ende Falls<br />
Ende Wie<strong>der</strong>hole<br />
Dabei macht es <strong>eine</strong>n erheblichen Unterschied, ob die Anzahl <strong>der</strong> Wie<strong>der</strong>holungen schon vor<br />
dem ersten Durchlauf feststeht o<strong>der</strong> ob sie sich erst im Lauf <strong>der</strong> einzelnen Wie<strong>der</strong>holungen<br />
ergibt, da es im zweiten Fall nicht unbedingt klar ist, ob die Wie<strong>der</strong>holung auch irgendwann<br />
wie<strong>der</strong> abbricht („terminiert“, s. Abschnitt 3.4). Diese Unterscheidung ist sogar so wesentlich,<br />
dass man die Menge <strong>der</strong> Funktionen, die überhaupt maschinell berechenbar <strong>sind</strong>, nach diesem<br />
Merkmal unterscheidet. Wir unterscheiden daher zwischen<br />
1. Wie<strong>der</strong>holungen mit Anfangs- (bzw. End-)bedingung und<br />
2. Wie<strong>der</strong>holungen mit fester Wie<strong>der</strong>holungszahl.<br />
Erstere <strong>sind</strong> flexibler und erlauben die Berechnung <strong>eine</strong>r größeren Vielfalt von Funktionen,<br />
letztere terminieren sicher.<br />
3.3 Umsetzung in Programmiersprachen<br />
Die im letzten Abschnitt beschriebenen Strukturelemente von <strong>Algorithmen</strong> werden in den<br />
zahlreichen Programmiersprachen auf unterschiedliche Weise umgesetzt. Insbeson<strong>der</strong>e kann<br />
man zwei wichtige Programmierstile unterscheiden: den imperativen (zuweisungsorientierten)<br />
und den funktionalen.<br />
Strukturelement Typische imperative<br />
Umsetzung<br />
El. Verarbeitungsschritte Zuweisung (von Werten an<br />
Variable), Ein- und<br />
Ausgabeoperationen.<br />
Sequenz Anweisungsfolgen, wobei die<br />
Datenübergabe zwischen<br />
aufeinan<strong>der</strong>folgenden<br />
Anweisungen durch<br />
Zwischenspeicherung von<br />
Ergebnissen in Variablen erfolgt.<br />
Typische funktionale<br />
Umsetzung<br />
Funktionsanwendung<br />
(-applikation)<br />
Verkettung von Funktionen,<br />
das Ergebnis <strong>der</strong> aufgerufenen<br />
Funktion wird als Argument<br />
an die aufrufende Funktion<br />
übergeben.
Peter Hubwieser Ablaufmodellierung WS 2002/03<br />
KAPITEL 3: <strong>Algorithmen</strong> LERNINHALTE V 1.0 Seite 5<br />
Auswahl Bedingte Anweisung<br />
Wie<strong>der</strong>holung Iteration<br />
Bedingter Term<br />
Rekursion<br />
Auf diese beiden Programmierstile gehen wir in Kapitel 5,6 (imperativ) und 7 (funktional)<br />
näher ein.<br />
3.4 Eigenschaften von <strong>Algorithmen</strong><br />
Für die Umsetzung und Beurteilung von <strong>Algorithmen</strong> <strong>sind</strong> einige Eigenschaften von<br />
beson<strong>der</strong>em Belang:<br />
Ein Algorithmus heißt<br />
terminierend, wenn s<strong>eine</strong> Ausführung für jede mögliche Eingabe nach <strong>eine</strong>r endlichen<br />
Anzahl von Schritten endet,<br />
deterministisch, wenn jede Eingabe für jede s<strong>eine</strong>r auszuführenden Anweisungen jeweils<br />
eindeutig die Folgeanweisung festlegt (mit Ausnahme <strong>der</strong> letzten Anweisung, nach <strong>der</strong> er<br />
endet),<br />
determiniert, wenn er für <strong>eine</strong> bestimmte Eingabe bei allen Abläufen immer dieselbe<br />
Ausgabe liefert.<br />
Ein Beispiel zur (sicher nicht unbedingt empfehlenswerten) Personalführung soll diese<br />
Eigenschaften verdeutlichen:<br />
Algorithmus „Personalführung1“:<br />
Wie<strong>der</strong>hole solange Mitarbeiter vorhanden<br />
Wie<strong>der</strong>hole für alle Mitarbeiter<br />
Führe willkürlich <strong>eine</strong>n <strong>der</strong> folgenden Verarbeitungsschritte aus:<br />
Belobige den Mitarbeiter<br />
Tadle den Mitarbeiter<br />
Entlasse den Mitarbeiter<br />
Ende Willkür<br />
Ende Wie<strong>der</strong>hole<br />
Gib <strong>eine</strong> Liste aller Mitarbeiter aus mit allen Lob- und Tadelvorgängen aus<br />
Ende Wie<strong>der</strong>hole<br />
Ende Algorithmus<br />
Dieser Algorithmus ist offensichtlich nichtdeterministisch („Führe willkürlich <strong>eine</strong> <strong>der</strong><br />
folgenden Anweisungen aus:“). Er terminiert auch nicht unbedingt, da evtl. (sehr<br />
unwahrscheinlich, aber möglich) immer <strong>eine</strong> <strong>der</strong> ersten beiden willkürlichen Anweisungen<br />
ausgeführt werden könnte und sich so die Zahl <strong>der</strong> Mitarbeiter niemals verringern würde.<br />
Eine kl<strong>eine</strong> Än<strong>der</strong>ung sorgt für sichere Terminierung (vermutlich gegen den berechtigten<br />
Protest <strong>der</strong> Gewerkschaften):<br />
Algorithmus „Personalführung2“:<br />
Wie<strong>der</strong>hole solange Mitarbeiter vorhanden<br />
Wie<strong>der</strong>hole für alle Mitarbeiter<br />
Führe willkürlich <strong>eine</strong>n <strong>der</strong> folgenden Verarbeitungsschritte aus:<br />
Belobige den Mitarbeiter<br />
Tadle den Mitarbeiter
Peter Hubwieser Ablaufmodellierung WS 2002/03<br />
KAPITEL 3: <strong>Algorithmen</strong> LERNINHALTE V 1.0 Seite 6<br />
// Hier entfernt: Entlasse den Mitarbeiter<br />
Ende Willkür<br />
Ende Wie<strong>der</strong>hole<br />
Entlasse <strong>eine</strong>n beliebigen Mitarbeiter<br />
Gib <strong>eine</strong> Liste aller Mitarbeiter aus mit allen Lob- und Tadelvorgängen aus<br />
Ende Wie<strong>der</strong>hole<br />
Ende Algorithmus<br />
Nun wird die Anzahl <strong>der</strong> Mitarbeiter bei jedem Durchlauf um eins verringert, damit ist das<br />
Ende <strong>der</strong> äußeren Wie<strong>der</strong>holung „Wie<strong>der</strong>hole .. solange Mitarbeiter vorhanden“ gesichert.<br />
Die innere Wie<strong>der</strong>holung terminiert ja aufgrund <strong>der</strong> von vorneherein festgelegten Anzahl von<br />
Mitarbeitern auf jeden Fall. Insgesamt terminiert dieser Algorithmus also.<br />
Hier wird auch <strong>der</strong> in Abschnitt 3.2.4 bereits beschriebene Unterschied zwischen den beiden<br />
Typen von Wie<strong>der</strong>holungen nochmals deutlich: Bei <strong>der</strong> ersten Wie<strong>der</strong>holungsstruktur<br />
(„solange Mitarbeiter vorhanden“) in „Personalführung2“ wird die Anzahl <strong>der</strong><br />
Wie<strong>der</strong>holungen erst während ihres Ablaufs festgelegt (je nachdem, wann alle Mitarbeiter<br />
entlassen <strong>sind</strong>), bei <strong>der</strong> zweiten („für alle Mitarbeiter“) steht sie vor dem ersten Durchlauf<br />
bereits fest (Anzahl <strong>der</strong> Mitarbeiter zu diesem Zeitpunkt).<br />
Natürlich ist unser Algorithmus „Personalführung 2“ immer noch nichtdeterministisch und<br />
auch nichtdeterminiert, da er sehr unterschiedliche Folgen von Listen liefern kann. Mit <strong>der</strong><br />
dritten Än<strong>der</strong>ung wird <strong>der</strong> Algorithmus determiniert, da er immer nur die leere Liste ausgibt:<br />
Algorithmus „Personalführung3“:<br />
Wie<strong>der</strong>hole solange Mitarbeiter vorhanden<br />
Wie<strong>der</strong>hole für alle Mitarbeiter<br />
Führe willkürlich <strong>eine</strong>n <strong>der</strong> folgenden Verarbeitungsschritte aus:<br />
Belobige den Mitarbeiter<br />
Tadle den Mitarbeiter<br />
Ende Willkür<br />
Ende Wie<strong>der</strong>hole<br />
Entlasse <strong>eine</strong>n beliebigen Mitarbeiter<br />
// Hier entfernt: Gib <strong>eine</strong> Liste aller Mitarbeiter ..<br />
Ende Wie<strong>der</strong>hole<br />
Gib <strong>eine</strong> Liste aller Mitarbeiter aus<br />
Ende Algorithmus<br />
Alternativ zur letzten Än<strong>der</strong>ung können wir unseren Algorithmus Nr. 2 auch deterministisch<br />
machen:<br />
Algorithmus „Personalführung4“:<br />
Wie<strong>der</strong>hole jeden Freitag solange Mitarbeiter vorhanden<br />
Wie<strong>der</strong>hole für alle Mitarbeiter<br />
Falls Mitarbeiter im Büro anwesend<br />
Belobige den Mitarbeiter<br />
Sonst<br />
Tadle den Mitarbeiter<br />
Ende Falls<br />
Ende Wie<strong>der</strong>hole<br />
Entlasse <strong>eine</strong>n beliebigen Mitarbeiter<br />
Gib <strong>eine</strong> Liste aller zum gegenwärtigen Zeitpunkt noch beschäftigten<br />
Mitarbeiter mit allen Lob- und Tadelvorgängen aus<br />
Ende Wie<strong>der</strong>hole
Peter Hubwieser Ablaufmodellierung WS 2002/03<br />
KAPITEL 3: <strong>Algorithmen</strong> LERNINHALTE V 1.0 Seite 7<br />
Ende Algorithmus<br />
Allerdings ist Personalführung damit immer noch nicht determiniert, da die ausgegebenen<br />
Listen bei jedem Durchlauf unterschiedlich ausfallen können (je nachdem, welche Mitarbeiter<br />
entlassen werden).<br />
3.5 Pseudocode und Struktogramme<br />
Wie oben bereits mehrfach ausgeführt, gibt es <strong>eine</strong> Vielzahl von Möglichkeiten, <strong>eine</strong>n<br />
bestimmten Algorithmus darzustellen. Da wir im nächsten Kapitel <strong>eine</strong> bestimmte Art <strong>der</strong><br />
Programmierung kennen lernen wollen, führen wir hier zwei Techniken <strong>der</strong><br />
Algorithmusdarstellung ein, die dafür beson<strong>der</strong>s geeignet ist: Programmiersprachenähnlicher<br />
Pseudocode und Struktogramme (Nassi/Shnei<strong>der</strong>man, 1973).<br />
Strukturelement Pseudocode Struktogramm-Element<br />
elementarer<br />
Verarbeitungsschritt<br />
Sequenz<br />
<br />
<br />
;<br />
<br />
;<br />
...<br />
;<br />
<br />
...<br />
<br />
Bedingter<br />
Verarbeitungsschritt<br />
Wie<strong>der</strong>holung<br />
Wenn <br />
Dann<br />
Sonst<br />
Ende Wenn<br />
Wie<strong>der</strong>hole solange <br />
< Verarbeitungsschritt ><br />
Ende Wie<strong>der</strong>hole<br />
<br />
wahr (erfüllt) falsch (nicht erfüllt)<br />
<br />
Wie<strong>der</strong>hole solange <br />
Peter Hubwieser Ablaufmodellierung WS 2002/03<br />
KAPITEL 3: <strong>Algorithmen</strong> LERNINHALTE V 1.0 Seite 8<br />
Ein Beispiel:<br />
Wie<strong>der</strong>hole solange Mitarbeiter vorhanden<br />
Wie<strong>der</strong>hole für alle Mitarbeiter<br />
Mitarbeiter anwesend<br />
wahr falsch<br />
Belobige den Mitarbeiter<br />
Entlasse <strong>eine</strong>n beliebigen Mitarbeiter<br />
Tadle den Mitarbeiter<br />
Gib <strong>eine</strong> Liste aller zum gegenwärtigen Zeitpunkt noch<br />
beschäftigten Mitarbeiter mit allen Lob- und Tadelvorgängen<br />
aus<br />
Abbildung 1: Der Algorithmus „Personalführung 4“ als Struktogramm