Sie sind auf Seite 1von 4

Algorithmen Struktogramme

Ein Algorithmus ist eine Handlungsanleitung Algorithmen können auf verschiedene Arten no-
zur Lösung eines Problems, in Form von Ein- tiert werden. Eine Möglichkeit ist ein einfa-
zelschritten, die cher Text, eine andere sind Nassi-Shneiderman-
Diagramme, die auch Struktogramme genannt
• in einem endlichen Text eindeutig beschrie- werden. Diese bestehen aus folgenden Elemen-
ben werden kann. ten, die üblicherweise in Form eines Rechtecks
notiert werden:
• aus tatsächlich ausführbaren Schritten be-
steht.
• eine einfache Anweisung (Zuweisung, Ein-
• nicht unendlich viel Speicherplatz benötigt. gabe, Ausgabe, Programmende, Funktions-
aufruf)
• nach endlich vielen Schritten zum Ende
kommt. • eine Verzweigung
• unter gleichen Bedingungen immer das – eine einfache Verzweigung
gleiche Ergebnis liefert.
– eine Mehrfachverzeigung
• eindeutig festlegt welcher Schritt als
• eine Schleife
nächstes erfolgen muss.
– eine kopfgesteuerte Schleife
Ein Algorithmus macht aus eine Eingabe durch
– eine fußgesteuerte Schleife
Verarbeitung eine Ausgabe (Ergebnis). Das ist
das EVA-Prinzip (Eingabe – Verarbeitung – – eine zählergesteuerte Schleife
Ausgabe).
• eine Folge (Sequenz, Block) von Anwei-
Ein Beispiel für einen Algorithmus ist der eukli- sungen (einfache Anweisung, Verzweigung,
dische Algorithmus, der für zwei natürliche Zah- Schleife)
len den größten gemeinsamen Teiler (GGT) be-
stimmt. Die Eingabe besteht also aus den zwei
Optional (aber sinnvoller Weise) kann ei-
Zahlen, deren größter GGT bestimmt werden
nem Struktogramm ein Kopfelement hinzu-
soll und die Ausgabe (also das Ergebnis) ist der
gefügt werden, in dem der Name des Strukto-
GGT.
gramms (bzw. der darin beschriebenen Funkti-
Die Vorgehensweise ist folgende. on), Übergabeparameter und die verwendeten
Variablen aufgeführt werden.
a) Die beiden Zahlen werden verglichen. Sind
beide Zahlen gleich, sind wir fertig und je-
de der beiden Zalen ist der GGT (also das Einfache Anweisung:
Ergebnis).
Ein Zuweisung wird als Rechteck dargestellt, in
b) Wir ersetzen die größere der beiden Zah- dem rechts ein Ausdruck steht, links eine Varia-
len durch die Differenz der beiden Zahlen ble oder ein Arrayelement und dazwischen :=“.

(größere Zahl minus kleinere Zahl) und er-
halten so wieder zwei Zahlen (kleinere Zahl x := 2*x+4
und Differenz).
Eine Variable ist ein Speicherplatz, dem wir
c) Mit diesen beiden neuen Zahlen fahren wir einen Namen gegeben haben unter dem wir ihn
mit a) fort. ansprechen. Hier heißt der Speicherplatz x“.

Für alle Namen sollten wir die Konvention ein- GGT der beiden vorgegebenen Zahlen, während
halten, dass das erste Zeichen immer ein Buch- der Bubblesort kein Ergebnis besitzt, sondern
stabe sein sollte und nachfolgend nur Buch- einfach die zu sortierende Liste mit geänderter
staben und Ziffern sowie der Unterstreichstrich Reihenfolge hinterlässt.
enthalten sind.
Ein Funktionsaufruf bedeutet, dass eine andere
Ein Array ist eine nummerierte Liste von Spei- Funktion, die in einem anderen Struktogramm
cherplätzen, denen wir zusammen einen Namen beschrieben wird, an dieser Stelle ausgeführt
gegeben haben. Die Nummerierung beginnt mit werden soll.
0. Wenn wir also das erste Element im Array
mit dem Namen autos“ meinen, dann schrei- Bubblesort(a)

ben wir autos[0]“. Die Nummer des gemeinten
” Hier soll eine Funktion Bubblesort“ mit einer
Elements (eine Zahl oder ein Ausdruck, dessen ”
Wert eine Zahl ist), wird in eckigen Klammern Variablen a“ etwas machen (z.B. könnte die

an den Namen des Arrays angehängt. Variable eine Liste von Zahlen enthalten, die
erst sortiert und dann ausgegeben werden sol-
Wenn wir den Wert eines Ausdrucks berechnen len). Ein solcher Funktionsaufruf verwendet ei-
wollen, dann schreiben wir das als Zuweisung, ne Funktion, die kein Ergebnis liefert, oder de-
da der berechnete Wert sofort wieder verges- ren Ergebnis ignoriert wird.
sen wird, wenn wir ihn nicht in einen Speicher
schreiben. Funktionen, die ein Ergebnis haben, können
auch in Ausdrücken verwendet werden.
Bei einer Eingabe wird ein Datum (Einzahl von
Daten“), das von einer externen Quelle kommt,

in einen Speicherplatz (Variable, Arrayelement)
gespeichert. Verzweigung:

Eingabe x Bei einer Verzweigung gibt es mehrere


Möglichkeiten; im einfachsten Fall sind es
Dabei muss der Name der Variablen (bzw. des zwei, dann liegt eine einfache Verzweigung vor.
Arrayelements) angegeben werden. Der Wert,
der eingegeben wird, steht erst zur Laufzeit fest. x=2 ?
Ja Nein
Bei einer Ausgabe wird ein Datum an eine ex-
terne Stelle übergeben. Dabei muss das Datum k k
oc loc
in Form eine Ausdrucks (z.B. auch einer Zei- - Bl in-
B
chenkette) angegeben werden. Ja Ne

Ausgabe "Hallo!"
Die Verzweigung besteht aus einer Bedingung
Hier wird die Zeichenkette Hallo!“ ausgegeben.
” und zwei Anweisungsblöcken. Trifft die Bedin-
Jeder Algorithmus muss zu einem Ende kom- gung zu (ist sie wahr), so wird der Ja-Block
men und dieses wird durch ein eigenes Symbol ausgeführt (nicht aber den Nein-Block. Trifft sie
dargestellt. Falls der Algorithmus ein Ergebnis nicht zu (ist sie nicht wahr), dann wird der Nein-
hat, wird dieses im Symbol angegeben. Block ausgeführt (nicht aber der Ja-Block.

Rückgabe: x+2 Einer der beiden Blöcke darf leer sein, der Fall,
dass beide leer sind, ergibt keinen Sinn.
Besitzt die Funktion kein Ergebnis, dann bleibt Bei einer Mehrfachverzweigung gibt es mehr als
das Symbol einfach leer. Zum Beispiel wäre zwei Möglichkeiten, die je nach Wert der Aus-
das Ergebnis des euklidischen Algorithmus der wahlvariablen (hier: x) ausgeführt werden.
x=? ck
lo r)
B e
g s- rp
n kö
i su fen
e ei
1 2 4 5 sonst nw chl
A S
(
k

k
oc

oc

oc

oc

loc
solange x < 10
l

l
1-B

2-B

4-B

5-B

t-B
ns
Das hat zur Folge, dass bei deiner solchen

so
Schleife der Schleifenkörper immer mindestens
einmal durchlaufen wird.
Je nach dem Wert der Auswahlvariablen wird
der zugehörige Block ausgeführt. Ist der Wert Bei der zählergesteuerten Schleife (auch kurz
von x nicht aufgeführt, wird der sonst-Block Zählschleife) wird eine Zählervariable (Zähler)
ausgeführt. benötigt.
i = 1 .. 22 Schrittweite 3

Schleifen ck
lo r)
-B pe
n gs ör
k
Schleifen dienen der wiederholten Ausführung su n
ei eife
eines Ausführungsblocks. nw l
A Sch
(
Wir unterscheiden kopfgesteuerte Schleifen,
fußgesteuerte Schleifen und zählergesteuerte
Schleifen. Die Zählvariable durchläuft die Werte vom An-
fangswert bis zum Endwert mit der angege-
Bei der kopfgesteuerten Schleife steht im Kopf benen Schrittweite und für jeden Wert der
eine Bedingung, die Abbruchbedingung“ ge- Zählvariablen wird der Schleifenkörper durch-

nannt wird (obwohl Weitermachbedingung“ laufen. Der Wert der Zählvariablen kann im

zutreffender wäre). Schleifenkörper verwendet werden.
solange x < 10 Ist keine Schrittweite angegeben, so ist sie 1.
ck
lo r)
B e
g s- rp
n kö Anweisungsfolge
i su fen
e ei
nw chl
A S
( Eine Anweisungfolge besteht aus einer Folge
von Anweisungen. Diese werden üblicherweise
so untereinander angeordnet, dass sie links- und
Der Kopf der Schleife enthält eine Bedingung rechtsbündig ausgerichtet sind.
und wenn diese erfüllt ist, dann wird der Schlei-
fenkörper (das ist ein Anweisungblock) aus- Ein Struktogramm besteht aus einem optio-
geführt. Ist die Bedingung nicht (nicht mehr) nalen Kopf und einer Anweisungsfolge. In der
erfüllt, dann wird die Schleife beendet. Anweisungsfolge können Anweisungen enthal-
ten sein, die wiederum Anweisungfolgen enthal-
Die Fußgesteuerte Schleife unterscheidet sich ten. Am Ende der äußeren Anweisungsfolge ei-
von der kopfgesteuerten darin, dass die Ab- nes Struktogrammes muss nur dann ein Pro-
bruchbedingung jeweils nach der Ausführung grammendesymbol stehen, wenn ein Ergebnis
des Scheifenkörpers überprüft wird. zurückgegeben werden soll.
Grundsätzlich können Struktogramme sehr B 
kompliziert werden, es lohnt sich aber, dies zu
liste: array ganzer Zahlen (Übergabepara-
vermeiden, indem man Teile der Verarbeitung
meter)
in andere Funktionen (andere Struktogramme) n: Anzahl der Elemente in liste
auslagert. dummy: ganze Zahl (Hilfsvariable)
i = 1..n-1
k = 1..n-1
a[k-1]>a[k] ?
Ja Nein
Beispiele dummy := a[k-1]
a[k-1] := a[k]
a[k] := dummy
Euklidischer Algorithmus

euklidischer Algorithmus
a: positive ganze Zahl
b: positive ganze Zahl
ai: positive ganze Zahl
bi: positive ganze Zahl
Eingabe a
Eingabe b
ai := a
bi := b
solange a != b
a>b?
Ja Nein
a := a-b b := b-a
Ausgabe "Der GGT der Zahlen "
Ausgabe ai
Ausgabe "und "
Ausgabe bi
Ausgabe " ist "
Ausgabe a

Bubblesort

Hier wird die maximal notwendige Anzahl von


Durchläufen der inneren Schleife ausgeführt.
Man könnte, wenn bei einem Durchlauf dieser
Schleife keine Vertauschung stattfindet bereits
abbrechen. Das wäre effektiver, aber auch ein
wenig komplizierter.

Das könnte Ihnen auch gefallen