Unterprogramme

Prozeduren und Funktionen 

Vorüberlegung

Quelltexte sollten übersichtlich, strukturiert und kommentiert geschrieben werden. Generell sollten Algorithmen gegliedert und schrittweise entwickelt werden. Bei größeren Programmen verliert man schnell die Übersicht. Um Programme überschaubar zu gestalten, wird mit Unterprogrammen gearbeitet. Dabei bedient man sich der Methode der schrittweisen Verfeinerung ( Top-Down-Methode) zur algorithmischen Lösung komplexer Aufgaben: Schrittweise Zerlegung der zu lösenden Aufgabe in logisch zusammenhängende Teilaufgaben; Zerlegung der Teilaufgaben in kleine überschaubare Einheiten (Unterprogramme). 

Einführungsbeispiel

Von zwei Zahlen soll mit Hilfe des Euklidischen Algorithmus  der größte gemeinsame Teiler gefunden werden.

Beispiel:

gesucht : ggt von 42 und 98

Lösung nach Euklid

    42 mod 98 = 42

    98 mod 42 = 14

    42 mod 14 = 0         Lösung 14 ist der größte gemeinsame Teiler (ggt = 14)        

 Die Operation mod ist nur bei ganzen Zahlen möglich und gibt den Rest aus.

Der Algorithmus zur Bestimmung des größten gemeinsamen Teilers (ggt) kommt in vielen weiteren  Programmen vor, deshalb ist es sinnvoll diesen Algorithmus in einem Unterprogramm zu schreiben.

Struktogramm für das Unterprogramm ggt

 

Quelltext

program g_g_t;                {+++größter gemeinsamer Teiler nach EUKLID+++}
uses crt;
var a, b, x, y  :  integer;
procedure eingabe;
begin
     gotoxy(10,8); write('Die 1. Zahl  a =  ');readln(a);
     gotoxy(10,10);write('Die 2. Zahl  b =  ');readln(b);
end;
procedure  ggt;
var rest :integer;
begin
     x := a; y := b;
     repeat
           rest := x mod y;
           x := y; y := Rest;
     until Rest = 0;
end;
{+++++++Hauptprogramm++++++++}
begin
     clrscr;
     gotoxy(10,3); write('Der größte gemeinsame Teiler zweier Zahlen');
     gotoxy(20,5); write('ggt');
     eingabe;  {++++++procedure Eingabe wird aufgerufen++++++}
     ggt;      {++++++procedure ggt wird aufgerufen++++++}
     gotoxy(10,14);write('ERGEBNIS   ggt ( ',a,',',b,') =  ',x);
     readln;
end.