19.07.2013 Aufrufe

Die Unterprogrammtechnik - lehrer

Die Unterprogrammtechnik - lehrer

Die Unterprogrammtechnik - lehrer

MEHR ANZEIGEN
WENIGER ANZEIGEN

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);

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!