Unterprogrammtechnik in Pascal
Allgemein:
Wenn bestimmte Vorgänge mehrfach benutzt werden, kann der Arbeitsaufwand durch Prozeduren oder Funktionen erleichtert werden. Diese Funktionen / Prozeduren nennt man dann Unterprogramme.
Allgemeine Programmierregeln:
1. Jedes Unterprogramm sollte mit einem einleitenden Kommentar versehen werden, wo beschrieben wird, was das Unterprogramm mit den Parametern macht. Weiters sollten die Ein – und Ausgangsschnittstellen beschrieben werden.
2. Prozeduren können auch innerhalb von Prozeduren deklariert werden. Sie können dann aber nur innerhalb der umschließenden Prozeduren aufgerufen werden. Wir nutzen diese Möglichkeit im Unterricht nicht.
3. Prozeduren können nur aufgerufen werden, wenn sie textuell vorher im Programm deklariert wurden. Eine Prozedur kann in Prozeduren nicht aufgerufen werden, wenn diese im Deklarationsteil einer anderen Prozedur deklariert wurde.
4. Jedes Unterprogramm sollte mit einem einleitende
Kommentar versehen werden, wo beschrieben wird,
was das Unterprogramm mit den Parametern macht.
Weiters sollten die Ein – und Ausgangsschnittstellen
beschrieben werden.
Funktion / Prozedur:
Funktion |
Prozedur |
1. Funktionen geben einem Aufrufer immer nur einen Wert zurück. |
1. Prozeduren können keinen oder mehrere geänderte Werte als Parameter zurückliefern. |
2. Funktionsaufrufe müssen in einem Ausdruck stehen, der Teil einer
Wertzuweisung, einer Bedingung oder einer Ausgabeanweisung ist, u. damit ihr Resultat sofort weiterverarbeitet wird |
2. Prozeduren müssen das nicht, sie stellen eigenständige Anweisungen dar. |
3. Der Typ des Ergebnisses der Funktion darf nur ein elementarer Datentyp sein. Lediglich Zeichenketten können als Ergebnis der Funktion zurückgeliefert werden. |
|
Rekursive Unterprogramme:
1. Zu einem Speicher – bzw. Stack – Überlauf führen Rekursionen, die nie abbrechen, d.h. bei welchen entweder die Abbruchbedingung vollständig fehlt oder diese nie zutrifft. Solche Rekursionen werden Endlosrekursionen genannt.
2. Rekursive Unterprogramme müssen in ihrem Anweisungsteil zuerst die Abbruchbedingung erhalten, und erst nachher den rekursiven
Unterprogrammaufruf.
Parameter:
1. Führe bei der Deklaration des Prozedurkopfes immer zuerst die Ein – Ausgangs-Parameter vor den Eingangs-Parametern an.
z.B.: wenn zu folgender Rechnung eine Prozedur erstellt werden soll:
c:= a + b
Prozedur P1(c,a,b)
Es wird dieselbe Reihenfolge wie bei der Rechnung beachtet
2. Im Prozedurkopf kann keine Zeichenketten-Deklaration folgender Art
(z.B. STRING[30]) geschrieben werden. Weiter kann auch kein Array geschrieben werden. Hierfür müssen eigene Typen definiert werden.
3. Halte möglichst viele Variablen lokal entweder innerhalb des Hauptprogrammes oder innerhalb der jeweiligen Prozedur. Übergib nur jene Variablen an die Prozeduren, welche wirklich von ihr benötigt werden.
4. Verwende möglichst wenig Ein – Ausgangs – Parameter. Es sollen nur jene Parameter als solche deklariert werden, deren Ergebnis aus der Prozedur hinausfliest. Die anderen Parameter sollen als Eingangs – Parameter deklariert werden.
Werteparameter:
Wird ein Parameter als Werteparameter deklariert, so kann innerhalb der Prozedur/ Funktion der Wert des Parameters zwar verändert werden. Dies hat aber keine Außenwirkung in die Umgebung des Aufrufers, da ein Wertparameter eine Kopie des übergebenen Wertes darstellt.
z.B.: Procedure Test (x: INTEGER);
x = Werteparameter
Referenzparameter:
Wird ein Parameter als Referenzparameter deklariert, so kann innerhalb der Prozedur/ Funktion der Wert des Parameters verändert werden. Dies hat nun im Gegensatz zum Wertparameter eine Außenwirkung.
z.B.: Procedure Test (VAR x: INTEGER);
x = Referenzparameter
Aktueller Parameter:
Ein Parameter wird beim Aufruf einer Prozedur/Funktion aktueller Parameter genannt
z.B.: Test (x, y);
x,y = aktuelle Parameter
Formale Parameter:
Ein Parameter wird bei der Definition einer Prozedur/ Funktion formaler Parameter genannt.
z.B.: Procedure Test (VAR x: INTEGER; y: INTEGER);
x, y = formale Parameter
Ein – Ausgabeparameter:
Ist ein Referenzparameter (siehe oben)
Eingabeparameter:
Ist ein Werteparameter (siehe oben)
Ausgabeparameter:
Ist der Rückgabewert einer Funktion
z.B.: FUNCTION Test (x: INTEGER): BOOLEAN;
: BOOLEAN = der Rückgabewert
Ausnahmefälle:
Wenn sehr große Arrays als Werteparameter übergeben werden sollen, ist es Ratsam diese als Referenzparameter zu deklarieren, weil dadurch Speicherplatz gespart wird. Aber nur wenn das keine Außenwirkungen hat.
Autoren:
Ulrich R. Gewerbeoberschule 'Max Valier' Bozen Kl. 3IA
Julian F. |