21.07.2013 Aufrufe

3 Algorithmen Algorithmen sind eine der ältesten ...

3 Algorithmen Algorithmen sind eine der ältesten ...

3 Algorithmen Algorithmen sind eine der ältesten ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!