Objektorientierte Programmierung (ARCHIV)
betreut durch Horst Hildebrecht
Zur Homepage des AngebotsZur Homepage des Angebots
Navigationspfeil rechts
Angebot: Home  |  Mediothek  |  Forum  |  Foyer   |  Suche  |  E-Mail  |  Info

Kontrollstrukturen in Pascal und Struktogramme

Metasprache
Java

In Pascal werden Anweisungen (i.d.R. Nachrichten an Objekte) nicht nur sequentiell aufgelistet. Zur Steuerung komplexer Abläufe verwendet man Kontrollstrukturen (Wiederholungen, Fallunterscheidungen o.ä). Die Realisierung solcher Programmstrukturen in Pascal wird in diesem Dokument erläutert.
Daneben verwenden wir eine heute gebräuchliche Form der grafischen Darstellung von Programmstrukturen, die Nassi-Shneiderman-Diagramme oder auch kurz Struktogramme. Mit ihnen kann man unabhängig von einer konkreten Programmiersprache die Struktur eines Programms deutlich machen.

Sequenz

Die einfachste Form der Programmstruktur ist die Sequenz. Mehrere Anweisungen werden nacheinander ausgeführt. In Pascal werden sie jeweils durch ein Semikolon voneinander getrennt. Durch Klammerung mit den Schlüsselwörtern begin und end werden sie zu einer Anweisung zusammengefasst.

Struktogramm Sequenz

Syntax

begin
  <Anweisung>;
  <Anweisung>;
  <Anweisung>;
end


Auswahlen (Selektionen)

Ein- und zweiseitige Auswahl

Oft müssen Anweisungen nur unter ganz bestimmten Bedingungen ausgeführt werden. Dazu benötigt man eine bedingte Anweisung oder auch Auswahl (Selektion) .

Struktogramm zweiseitige Auswahl

Die Bedingung wird zunächst ausgewertet. Ist sie wahr, so wird die "wahr" - Anweisung ausgeführt. Ist die Bedingung falsch, so wird die "falsch" - Anweisung ausgeführt. Falls man den "falsch" - Teil nicht benötigt, kann dieser auch weggelassen werden. In diesem Fall spricht man statt von einer zweiseitigen von einer einseitigen Auswahl.

Syntax

if <Bedingung> then
  <Anweisung>
else
  <Anweisung>;

Da "if then else" eine Anweisung darstellt, darf vor dem else kein Semikolon stehen.

Mehrfache Auswahl

In der bedingten Anweisung können nur maximal zwei Fälle unterschieden werden. Häufig reicht das allerdings nicht aus. Mit Hilfe der Mehrfach-Auswahl können mehr Fälle behandelt werden.

Struktogramm Fallunterscheidung

Je nachdem mit welcher Konstanten der Selektor übereinstimmt, wird die entsprechende Anweisung ausgeführt. Tritt keiner dieser Fälle ein, wird die "sonst"- Anweisung ausgeführt.

Syntax

case  of
  <Konstante> : <Anweisung>;
  <Konstante> : <Anweisung>;
  ...
else
  <Anweisung>;
end;

Soll im "sonst" - Fall nichts passieren, kann man diesen auch weglassen.

Struktogramm Fallunterscheidung

Syntax

case <Selektor> of
 <Konstante> : <Anweisung>;
 <Konstante> : <Anweisung>;
 ...
end;


Schleifen

Schleife mit Ausgangsbedingung

In vielen Problemstellungen ist es notwendig, bestimmte Teile eines Programms wiederholt auszuführen. Eine Form ist die Schleife mit Ausgangsbedingung.

Struktogramm Schleife mit Ausgangsbedingung

Die Anweisung wird solange wiederholt, bis die Ausgangsbedingung wahr wird. Die Anweisung wird also mindestens einmal ausgeführt.

Syntax

repeat
 <Anweisung>;
until <Bedingung>;

Da durch die Konstruktion in Pascal mit den Schlüsslwörtern "repeat until" die Anweisung bereits geklammert ist, kann man auch im Fall einer Sequenz von Anweisungen (anders als für eine Sequenz vorgesehen) auf die Klammerung mit begin und end verzichten.

Schleife mit Eingangsbedingung

Analog zur Schleife mit Ausgangsbedingung gibt es auch eine Schleife mit Eingangsbedingung. Hier wird vor Ausführung der Anweisung eine Bedingung geprüft.

Struktogramm Schleife mit Eingangsbedingung

Solange die Eingangsbedingung wahr ist, wird die Anweisung wiederholt. Falls die Bedingung schon am Anfang falsch ist, wird die Anweisung überhaupt nicht ausgeführt.

Syntax

while <Bedingung>do
  <Anweisung>;

Zählschleife

Häufig wird die Anzahl der Durchläufe einer Schleife dadurch kontrolliert, dass man sie mitzählt. Diese spezielle Form einer Schleife nennt man Zählschleife.

Struktogramm Zählschleife

Dabei verwendet man einen aufwärts oder abwärts laufenden Zähler. Zunächst wird der Zähler auf seinen Anfangswert gesetzt. Nach der Ausführung der Anweisung wird der Zähler dann automatisch um eins erhöht. Dies geschieht solange, bis der Zähler den angegebenen Endwert überschreitet. Da sowohl Anfangs- als auch Endwert (i. A.) vor Ausführung der Wiederholung bekannt sind, steht auch die Anzahl der Wiederholungen von vornherein fest.

Syntax

for <Zaehler> := <Anfangswert> to <Endwert>
  <Anweisung>;

Bei der anderen Variante der Zählschleife wird nicht bei jedem Durchlauf um eins hoch-, sondern um eins heruntergezählt:

Struktogramm Zählschleife

Syntax

for <Zaehler> := <Anfangswert> downto <Endwert>
 <Anweisung>;
     

null