Die Unterprogrammtechnik - lehrer
Die Unterprogrammtechnik - lehrer
Die Unterprogrammtechnik - lehrer
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Von der Möglichkeit der Parameterübergabe sollte der Programmierer immer Gebrauch machen.<br />
Ein sauberer Programmierstil zeichnet sich dadurch aus, daß alle Variablen, die durch das Unterprogramm<br />
bearbeitet werden, als Parameter an das Unterprogramm übergeben werden. Wird<br />
in einem Unterprogramm der Wert einer globalen Variablen geändert, dann spricht man von<br />
einem Nebeneffekt des Unterprogramms. <strong>Die</strong>se Effekte sind schwer zu überblicken und deshalb<br />
fehlerträchtig und unerwünscht.<br />
Es muß zwischen zwei verschiedenen Arten von Parametern, den Wertparametern und den Variablenparametern<br />
unterschieden werden.<br />
Wertparameter<br />
Genügt ein einseitiger Datenaustausch vom Hauptprogramm ins Unterprogramm, so wird dies<br />
durch die Übergabe von Wertparametern an ein Unterprogramm erreicht. Dadurch wird es möglich,<br />
innerhalb eines Programms ein Unterprogramm öfters mit verschiedenen Parametern aufzurufen.<br />
Zur Übergabe der Parameter muß lediglich der Prozedurkopf um die Parameterliste erweitert<br />
werden. <strong>Die</strong>se Art des einseitigen Datenaustauschs heißt 'call by value'.<br />
Beispiel:<br />
program proz_3;<br />
uses crt;<br />
var a,b : integer;<br />
procedure kubik (zahl: integer); <br />
var k : integer;<br />
begin<br />
k:=zahl*zahl*zahl;<br />
writeln;<br />
writeln ('<strong>Die</strong> Kubikzahl ist: ',k);<br />
writeln;<br />
end;<br />
begin<br />
clrscr;<br />
writeln ('1. Berechnung');<br />
kubik (3); <br />
write ('Zahl für die 2.Berechnung? ');<br />
readln (a);<br />
kubik (a); <br />
write ('Zahl für die 3. Berechnung? ');<br />
readln (b);<br />
kubik (b); <br />
readln;<br />
end.<br />
Im Prozedurkopf steht zusätzlich der zu übergebende Parameter mit seinem Datentyp in<br />
einer runden Klammer. Das bedeutet, daß vom Hauptprogramm an das Unterprogramm<br />
kubik genau ein INTEGER-Wert übergeben werden muß.<br />
<strong>Die</strong> Übergabe geschieht, indem beim Aufruf der Prozedur zusätzlich der Parameter in Klammern<br />
angegeben wird. In dieser Zeile wird kubik mit dem Wert 3 aufgerufen.<br />
Prozeduraufruf mit der Variablen a.<br />
Prozeduraufruf mit der Variablen b.<br />
Wolfgang Demel | TP Upro Skriptum Querformat.doc | Seite 3<br />
<strong>Die</strong> Parameter im Prozedurkopf (im Beispiel: zahl) werden als Formalparameter bezeichnet,<br />
weil mit ihnen nicht direkt gerechnet wird. Beim Aufruf der Prozedur im Hauptprogramm werden<br />
die Formalparameter durch die Aktualparameter (im Beispiel: 3,a und b), die die tatsächlichen<br />
Rechenwerte darstellen, ersetzt.<br />
<strong>Die</strong> Formalparameter stehen immer in der Prozedurvereinbarung (im Vereinbarungsteil des<br />
Hauptprogramms), die Aktualparameter im Prozeduraufruf (im Anweisungsteil des Hauptprogramm).<br />
Für Formalparameter und Aktualparameter sollten unterschiedliche Bezeichner<br />
verwendet werden.<br />
Sollen mehrere Parameter übergeben werden, so werden jene gleichen Typs durch Beistriche<br />
voneinander getrennt. Parameter unterschiedlichen Typs müssen durch Strichpunkte voneinander<br />
unterschieden werden:<br />
procedure Prozedurname (ParA1, ParA2, ... : TypA;<br />
ParB1, ParB2, ... : TypB;<br />
...<br />
ParZ1, ParZ2, ... : TypZ);<br />
Beispiel:<br />
procedure probe (a,b:real; i:integer; frage:char);<br />
Der Aufruf der Prozedur probe muß dann<br />
beispielsweise folgendermaßen aussehen:<br />
...;<br />
probe (3.2,4.7,5,'Y');<br />
...,<br />
Dann erfolgt die Zuordnung:<br />
a 3.2<br />
b 4.7<br />
i 5<br />
frage 'Y'<br />
Auf die richtige Reihenfolge und auf den richtigen Datentyp ist bei der Übergabe<br />
unbedingt zu achten!<br />
Auf Wertparameter kann jede Prozedur nur lesend zugreifen, die Parameter können von der Prozedur<br />
nicht verändert werden, d.h. der Informationsfluß führt nur vom Hauptprogramm zum Unterprogramm<br />
und nicht umgekehrt.<br />
Beim Eintritt in das Unterprogramm wird eine Kopie der Variablen im lokalen Datenraum des<br />
Unterprogramms angelegt. <strong>Die</strong>ses Duplikat wird verwendet, solange das Unterprogramm aktiv<br />
ist. Nach der Beendigung des Unterprogramms wird der lokale Datenraum - und damit dessen<br />
Inhalt - vernichtet. Eine Veränderung der Variablen im Hauptprogramm ist daher nicht möglich.<br />
Variablenparameter<br />
Soll der Informationsfluß in beide Richtungen, also vom Hauptprogramm ins Unterprogramm und<br />
vom Unterprogramm wieder zurück ins Hauptprogramm führen, so müssen in der Prozedur Variablenparameter<br />
vereinbart werden. <strong>Die</strong>s geschieht, indem in der Parameterliste vor die Variablennamen<br />
das reservierte Wort VAR geschrieben wird. Der Vorgang des Datenaustausches mit<br />
Variablenparametern heißt auch 'call by reference'.<br />
procedure Prozedurname (var ParA1, ParA2, ... : TypA;<br />
var ParB1, ParB2, ... : TypB;<br />
...<br />
var ParZ1, ParZ2, ... : TypZ);