Kurs:Algorithmen und Datenstrukturen (hsrw)/Vorlesung/Pseudocode

Aus Wikiversity
Zur Navigation springen Zur Suche springen

Pseudocode ist eine neutrale Sprache, die verständlicher und kürzer ist als reale Programmiersprachen. Die Syntax des hier verwendeten Pseudocodes ist an Pascal angelehnt. Darüberhinaus werden einzelne Sprachelemente von Java (z. B. return) verwendet.

Blöcke[Bearbeiten]

Auf die in Java verwendeten geschwungenen Klammern wird verzichtet. Blöcke sind eingerückt. Auf Semikola zum Abschließen von Anweisungen wird verzichtet.

<Kopf des Blocks>
    <Anweisung>
    <Anweisung>
<Anweisung hinter dem Block>

Bedingte Ausführung[Bearbeiten]

Auch if Bedingungen mit optionalem else Zweig gibt es analog zu Java. Die Spitzen Klammern haben die Bedeutung, dass es sich bei dem entsprechenden Text nicht um ein Schlüsselwort, sondern um einen Ausdruck (Bedingung oder Anweisung) handelt.

if <Bedingung>
    <Anweisung>*
[else
    <Anweisung>*]

Schleifen[Bearbeiten]

Es gibt die bekannten kopf- und fußgesteuerten Schleifen sowie Schleifen mit fester Anzahl von Durchläufen.

Kopfgesteuerte Schleifen werden mit while realisiert. Im eingerückten Block stehen eine oder mehrere Anweisungen. Dies wird durch den aus der Vorlesung "Grundlagen der Informatik" bekannten Kleene Stern angezeigt, welcher null bis beliebig viele Wiederholungen des vor ihm stehenden Ausdrucks bedeutet.

while <Bedingung>
    <Anweisung>*

Schleifen mit fester Anzahl der Durchläufe werden mit for realisiert. Dort wird eine Zählvariable von einem Initialwert in Einerschritten entweder aufwärts oder abwärts bis zum festgelegten Endwert gezählt. Auch hier gibt es einen eingerückten Block mit Anweisungen.

for <Initialwert> to | downto <Endwert>
    <Anweisung>*


Weiterhin gibt es eine fußgesteuerte Schleife. Hier in Form der repeat until Schleife. Wir beginnen mit repeat anschließend folgt ein eingerückter Block mit Anweisungen und schließlich das Schlüsselwort until mit der Endbedingung, mit deren Erfüllung die Schleife verlassen wird.

repeat
    <Anweisung>*
until <Endbedingung>

Kommentar[Bearbeiten]

Kommentare leiten wir mit dem doppelten Querstrich ein, sie reichen jeweils bis zum Ende der Zeile.

<Anweisung>
// <Kommentar>
<Anweisung>

<Anweisung> // <Kommentar>

Zuweisungen[Bearbeiten]

Bei Zuweisungen orientieren wir uns an der Syntax von Pascal x := 42. Alternativ findet man in der Literatur häufig die Schreibweise x <- 42.

  • Zuweisung x := 42

Vergleichsoperatoren[Bearbeiten]

Weiterhin haben wir Vergleichsoperatoren. Hier verwenden wir ein einzelnes Gleichheitszeichen für die Gleichheit und auch in den weiteren Fällen die üblichen mathematischen Symbole.

  • Vergleich = < >

Für boolesche Ausdrücke haben wir die Schüsselwörter and, or, not und xor.

Boolesche Operatoren[Bearbeiten]

  • Boolsche Ausdrücke and or not xor

Typangaben[Bearbeiten]

Typisierung geben wir nur an, sofern sie nicht aus dem Kontext klar wird. Wir orientieren uns hier auch an der Pascalsyntax x : int.

  • Typisierung x : int

In Abweichung zur Literatur verwendeten wir nullbasierte Arrays. Der kleinste Index eines Arrays ist bei uns 0, weil wir dies von Java bereits kennen.

Arrays[Bearbeiten]

  • Arrays nullbasiert

Als Buch empfehlen wir Ottmann und Widmeyer: Algorithmen und Datenstrukturen.

Beispielhaft geben wir die Maximumsbestimmung im Pseudocode an. Hierzu legen wir einen Zwischenspeicher an, welchen wir mit jedem Element des Arrays vergleichen und auf das aktuelle Element hochsetzen, falls es größer ist als der aktuelle Wert des Zwischenspeichers. Schlussendlich geben wir den Zwischenspeicher zurück.

max(a : array) : int
    m := a[0]
    for i := 0 to a.length - 1
        if a[i] > m
            m := a[i]
    return m

Die Länge des Arrays a bezeichnen wir analog zu Java mit a.length.