Pseudocode

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Pseudocode ist Programmcode, der nicht zur maschinellen Interpretation, sondern lediglich zur Veranschaulichung eines Paradigmas oder Algorithmus dient. Meistens ähnelt er natürlicher Sprache und höheren Programmiersprachen, gemischt mit mathematischer Notation. Mit Pseudocode kann ein Programmablauf unabhängig von zugrunde liegender Technologie beschrieben werden und ist damit oft kompakter und leichter verständlich als realer Programmcode [1].

Verwendung[Bearbeiten]

Um einen Algorithmus zu verstehen, kann man ihn als Programm untersuchen. Das wird aber erschwert durch die Eigenheiten der Programmiersprache, vor allem ihrer Syntax. 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 die Felder, die in Pascal von Eins an indiziert werden, in C dagegen von Null an. In Lehrbüchern werden deshalb Algorithmen gelegentlich in Pseudocode wiedergegeben.

Man kann ein Programm durch Pseudocode spezifizieren. 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]

Pseudocode hat den Anspruch, intuitiv klar zu sein. Geeignete Metaphern aus 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 an Pascal oder an C. Ein an die Programmiersprache Java angelehnter Pseudo-Code nennt sich Jana.

Im Pascal-Stil werden Schlüsselwörter wie begin, end, then, do, repeat, until benutzt. Im C-Stil werden stattdessen geschweifte Klammern {,} gesetzt und das Schlüsselwort then 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

  • program Programmname ... end Programmname
  • klasse Klassenname { ... }

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 ... step Schrittweite ... next

Kommentare

  • // kommentar
  • # kommentar
  • /* kommentar */

Definition von Funktionen

  • function() ... begin ... end
  • funktion() ... start ... ende

Zusicherungen

  • assert
  • jetzt gilt

Beispiele[Bearbeiten]

Pseudocode im Stil von Pascal[Bearbeiten]

program Name und Kurzbeschreibung
   LiesDatenStruktur()
   LiesDatenInhalt()
    ...
   if DatenUnvollständig then
      FehlerMelden 
      exit
   end if
   HauptstatistikBerechnen
   ZusammenstellungBerechnen
   Resultate in HTML-Datei schreiben
end program Name

Pseudocode nach Leiserson et. al.[Bearbeiten]

Leiserson et. al. (2010) definieren einen klaren und knappen Pseudocode. Dabei werden keine Fehlerbehandlungen und andere Ausnahmen behandelt. Das folgende Beispiel zeigt den Insertionsort-Algorithmus in dieser Pseudocode-Variante.

  1. INSERTION-SORT(A)
    
  2.    for j=2 to A.länge
    
  3.       schlüssel=A[j]
    
  4.       //füge A[j] in den sortierten Beginn des Arrays A[1..j-1] ein
    
  5.       i=j-1
    
  6.       while i>0 und A[i]>schlüssel
    
  7.          A[i+1]=A[i]
    
  8.          i=i-1
    
  9.       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 der for-Schleife und die Zeilen 7 und 8 der while-Schleife. Es gibt die drei Schleifenkonstrukte:

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üsselwort to verwendet, wenn die Laufvariable in jedem Schleifendurchlauf um delta bzw. 1 erhöht wird, oder das Schlüsselwort downto, wenn die Laufvariable bei jedem Durchlauf um delta bzw. 1 verringert wird.

repeat-until-Schleife mit folgender Syntax:

repeat
   <eingerückte Anweisung>*
until <Endebedingung>

Verzweigungen werden durch if-else gekennzeichnet:

if <Bedingung> 
   <eingerückte Anweisungen im If-Teil>* 
[else 
   <eingerückte Anweisung im Else-Teil>*]

Kommentare werden wie in Java durch "//" gekennzeichnet.

Mehrfachzuweisung wie i = j = k werden von rechts nach links interpretiert: j = k und i = 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 Index 3 zurück.

Zusammenhängende Daten werden in Objekte gekapselt, auf deren Attribute mit dem Punktoperator zugegriffen werden kann, z. B. die Variablen Vorname und Nachname werden in ein Objekt Person gekapselt. Mit Person.Vorname kann auf das Attribut Vorname 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äger Operatoren, das heißt bei "x und y" wird zunächst x ausgewertet. Wenn x falsch ist, wird y nicht 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]

Anstelle von Pseudo-Code können auch Ablaufdiagramme wie das Nassi-Shneiderman-Diagramm, das Jackson-Diagramm oder der normierte Programmablaufplan verwendet werden.

Einzelnachweise[Bearbeiten]

  1.  Kurt Mehlhorn und Peter Sanders: Algorithms and Data Structures. Springer, Berlin Heidelberg 2008, ISBN 978-3-540-77977-3, S. 26.
  2.  Johannes Siedersleben (Hrsg.): Softwaretechnik. Hanser, München 2003, ISBN 3-446-21843-2, S. 44ff..