Pseudocode
DerPseudocodeist ein Programmcode, der nicht zur maschinellen Interpretation, sondern lediglich zur Veranschaulichung einesParadigmasoderAlgorithmusdient. Meistens ähnelt erhöheren Programmiersprachen,gemischt mitnatürlicher Spracheund mathematischer Notation. Mit Pseudocode kann ein Programmablauf unabhängig von zugrunde liegender Technologie beschrieben werden. Er ist damit oft kompakter und leichter verständlich als realer Programmcode.[1]Andererseits ist er formaler und damit klarer und weniger missverständlich als eine Beschreibung in natürlicher Sprache.
Verwendung
[Bearbeiten|Quelltext bearbeiten]Um einenAlgorithmuszu verstehen, kann man ihn als Programm untersuchen. Das wird aber erschwert durch die Eigenheiten der Programmiersprache, vor allem ihrerSyntax.Zudem haben verschiedene Programmiersprachen unterschiedliche Syntaxen. Jede Formulierung als Programm in einer bestimmten Programmiersprache schließt alle Leser aus, die dieser Sprache nicht mächtig sind. Deshalb formuliert man den Algorithmus zwar ähnlich einem Programm, aber ohne auf eine bestimmte Programmiersprache einzugehen: in Pseudocode.
Pseudocode wird dann eingesetzt, wenn die Funktionsweise eines Algorithmus erklärt werden soll und Einzelheiten der Umsetzung in eine Programmiersprache stören würden. Ein typisches Beispiel sind dieFelder,die etwa inPascalvon Eins an indiziert werden, in anderen Sprachen wieJavadagegen von Null an. In Lehrbüchern werden deshalb Algorithmen gelegentlich in Pseudocode wiedergegeben.
Man kann ein Programm durch Pseudocodespezifizieren.Das sollte allerdings eher vermieden werden, denn die Formulierung als Pseudocode ist bereits eine Programmiertätigkeit, die von der Konzentration auf die Anforderungen ablenkt.[2]
Auch bei der Entwicklung von Algorithmen und der Umformung von Programmen (Programmtransformation,Refactoring) wird Pseudocode eingesetzt.
Aussehen und Stilrichtungen
[Bearbeiten|Quelltext bearbeiten]Pseudocode hat den Anspruch, intuitiv klar zu sein. GeeigneteMetaphernaus der Umgangssprache geben einen Verfahrensschritt prägnant wieder, ohne dass dazu eine Erklärung nötig ist, zum Beispiel „durchlaufe das Feld a mit Index i “oder „vertausche die Inhalte der Variablen x und y “. Solche Stilmittel verbessern die Übersicht.
Pseudocode kann sich in seinem Stil an eine bestimmte höhere Programmiersprache anlehnen, zum Beispiel anPascaloder anC.Ein an die ProgrammierspracheJavaangelehnter Pseudo-Code nennt sichJana.Im Pascal-Stil werdenSchlüsselwörterwiebegin
,end
,then
,do
,repeat
,until
benutzt. Im C-Stil werden stattdessen geschweifte Klammern{
,}
gesetzt und das Schlüsselwortthen
wird ausgelassen. Dieser Stil wird oft von Programmierern benutzt, die solche Sprachen verwenden. Beide Stile findet man in Lehrbüchern.
Die Blockstruktur wird gelegentlich auch nur durch Einrücken wiedergegeben.
Eine Liste häufig verwendeter Schlüsselwörter:
Module
programProgrammname... endProgrammname
klasseKlassenname{... }
Fallunterscheidungen
if... then... else... end if/exit
wenn... dann... sonst... wenn_ende
falls... dann... falls_nicht... falls_ende
Schleifen
wiederhole... solange/bis... wiederhole_ende
while... do...
repeat... until...
for... to... stepSchrittweite... next
Kommentare
// kommentar
# kommentar
/* kommentar */
Definition von Funktionen
function()... begin... end
funktion()... start... ende
Zusicherungen
assert
jetzt gilt
Beispiele
[Bearbeiten|Quelltext bearbeiten]Pseudocode im Stil von Pascal
[Bearbeiten|Quelltext bearbeiten]programNameundKurzbeschreibung
LiesDatenStruktur
LiesDatenInhalt
...
ifDatenUnvollständigthen
FehlerMelden
exit
endif
HauptstatistikBerechnen
ZusammenstellungBerechnen
ResultateinHTML-Dateischreiben
endprogramName
Pseudocode im BuchAlgorithmen – Eine Einführung
[Bearbeiten|Quelltext bearbeiten]Im BuchAlgorithmen – Eine Einführung[3](englischer OriginaltitelIntroduction to Algorithms,übersetzt vonPaul Molitor) werden Konventionen für einen Pseudocode definiert. Dabei werden keine Fehlerbehandlungen und andere Ausnahmen behandelt. Das folgende Beispiel (angelehnt an das erwähnte Buch[3]:18) zeigt denInsertionsort-Algorithmus in dieser Pseudocode-Variante.
INSERTION-SORT(A)
forj=2toA.länge
schlüssel=A[j]
// Setze A[j] in das sortierte Teilfeld A[1.. j - 1] ein
i=j-1
whilei>0undA[i]>schlüssel
A[i+1]=A[i]
i=i-1
A[i+1]=schlüssel
Es gelten in dieser Pseudocode-Variante folgende Konventionen:
- Einrückungen kennzeichnen die Blockstruktur. So werden im Beispiel die Zeilen 2 bis 9 der Prozedur
INSERTION-SORT
zugeordnet, die Zeilen 3 bis 9 derfor
-Schleife und die Zeilen 7 und 8 derwhile
-Schleife. - Feldelemente werden mit 1 beginnend durchnummeriert.
Schleifen
[Bearbeiten|Quelltext bearbeiten]Es gibt die dreiSchleifenkonstrukte:
while
-Schleife mit folgender Syntax:
while<Bedingung>
<eingerückte Anweisung>*
for
-Schleife mit folgender Syntax:
for<Initialisierung>to|downto<Endebedingung>[by<delta>]
<eingerückte Anweisung>*
Die Laufvariable einer for-Schleife behält ihren Wert auch nach dem Durchlauf der Schleife. Sie enthält dann den Wert des letzten Schleifendurchlaufs. Bei for-Schleifen wird das Schlüsselwortto
verwendet, wenn die Laufvariable in jedem Schleifendurchlauf umdelta
bzw. eins erhöht wird, oder das Schlüsselwortdownto
,wenn die Laufvariable bei jedem Durchlauf umdelta
bzw. eins verringert wird.
repeat-until
-Schleife mit folgender Syntax:
repeat
<eingerückte Anweisung>*
until<Endebedingung>
Verzweigungen
[Bearbeiten|Quelltext bearbeiten]Verzweigungen werden durchif-else
gekennzeichnet:
if<Bedingung>
<eingerückte Anweisungen im If-Teil>*
[else
<eingerückte Anweisung im Else-Teil>*]
Sonstiges
[Bearbeiten|Quelltext bearbeiten]- Kommentare werden durch
//
gekennzeichnet. - Mehrfachzuweisung wie
i = j = k
werden von rechts nach links interpretiert:j = k
undi = j
- Variablen sind ohne explizite Kennzeichnung immer nur lokal verwendbar.
- Auf Elemente in einem Feld wird über einen Index in eckigen Klammern zugegriffen:
A[3]
gibt das Element mit dem Index3
zurück. - Zusammenhängende Daten werden in Objekte gekapselt, auf deren Attribute mit dem Punktoperator zugegriffen werden kann, z. B. die Variablen
Vorname
undNachname
werden in ein ObjektPerson
gekapselt. MitPerson.Vorname
kann auf das AttributVorname
zugegriffen werden. - Bei Prozeduraufrufen werden Basistypen als Werte übergeben ( "call by value" ), Objekte und Felder mit einer Referenz ( "call by reference" ).
- Das Schlüsselwort
return
kennzeichnet das Ende einer Prozedur und kann einen optionalen Rückgabewert enthalten. - Die Booleschen Operatoren „und “und „oder “sind träge Operatoren, das heißt für „x und y “wird zunächst x ausgewertet. Wenn x falsch ist, wird y nicht mehr ausgewertet.
- Das Schlüsselwort
error
wird verwendet, wenn ein Fehler aufgetreten ist. Die Fehlerbehandlung übernimmt die aufrufende Prozedur und muss nicht weiter spezifiziert werden.
Alternativen
[Bearbeiten|Quelltext bearbeiten]Anstelle von Pseudo-Code können auchAblaufdiagrammewie dasNassi-Shneiderman-Diagramm,dasJackson-Diagrammoder der normierteProgrammablaufplanverwendet werden.
Einzelnachweise
[Bearbeiten|Quelltext bearbeiten]- ↑Kurt MehlhornundPeter Sanders:Algorithms and Data Structures.Springer, Berlin Heidelberg 2008,ISBN 978-3-540-77977-3,S.26.
- ↑Johannes Siedersleben (Hrsg.):Softwaretechnik.Hanser, München 2003,ISBN 3-446-21843-2,S.44ff.
- ↑abThomas H. Cormen, Charles E. Leiserson, Ronald Rivest, Clifford Stein:Algorithmen – Eine Einführung.3. Auflage. Oldenbourg Wissenschaftsverlag, München 2010,ISBN 978-3-486-59002-9,S.21ff.