Zur Themenübersicht     

Werte und Referenzparameter

Wir interpretieren den Aufruf einer Prozedur als Erteilung eines Auftrages. Die für die Erfüllung eines Auftrages benötigten Daten werden bei der Auftragserteilung über Parameter weitergegeben. Gehört zur Erfüllung eines Auftrages die Berechnung neuer Daten, werden auch diese Daten über Parameter ausgetauscht.

Bei der Festlegung, wie ein Auftrag erfüllt wird (Prozedurdeklaration), werden die Parameter hinter dem Prozedurnamen in einer Parameterliste aufgezählt; die hier auftretenden Namen heißen formale Parameter. Sie übernehmen die bei der Auftragserteilung (Aufruf der Prozedur) übergebenen sog. aktuellen Parameter.

Man unterscheidet

Die Zuordnung zwischen formalen und aktuellen Parametern ist durch ihre Reihenfolge in den Parameterlisten bestimmt. Die aktuellen Parameter müssen hinsichtlich Anzahl, Reihenfolge und Typ mit den formalen Parametern in der Prozedurdeklaration übereinstimmen. Zwei formale Parameter verschiedenen Typs werden in der Parameterliste durch ein Semikolon getrennt, aktuelle Parameter dagegen durch ein Komma.

Mechanismus der Parameterübergabe:

Formale Parameter sind - wie lokale Variablen - nur innerhalb der zugehörigen Prozedur bekannt. Sie können beliebig umbenannt werden, ohne die Wirkung der Prozedur zu ändern. Beispielsweise haben die Prozeduren

     PROCEDURE vertausche (VAR x,y: integer); 
      VAR merke:integer;
      BEGIN 
         merke :=x; x :=y; y:=merke 
      END
     PROCEDURE vertausche (VAR a, b: integer)
      VAR c : integer;
      BEGIN 
          c := a; a := b; b := c
      END

gleiche Wirkung.

Besonderheiten beim Prozeduraufruf:

Beispiel
Deklaration  der Prozedur berechneggt

Hier wird festgelegt,wie die Prozedur 
den ihr erteilten Auftrag ausführt. 


Die Liste der formalen Parameter lautet:

      (var ggtwert:Integer; 
        alok,blok :Integer)
procedure TForm1.berechneggt 
         (var ggtwert:Integer; 
          alok,blok :Integer);
var rest :Integer;
begin
   while blok <> 0 do 
     begin
       rest := alok mod blok;
       alok := blok;
       blok := rest
     end;
   ggtwert := alok
end;
Das Folgende ist übrigens auch eine 
Prozedurdeklaration. In ihr wird 
festgelegt, wie das Formular reagiert, 
wenn das Ereignis "Klicken auf den Button 
Btggt" eintritt.
...

lokale Datenobjekte dieser Prozedur  ->

Die aktuellen Parameter a und b 
besitzen hiernach konkrete Werte

Erteilung eines Auftrages durch
Aufruf der Prozedur berechneggt

Ausgabe des Prozedurergebnisses
Kontrollausgabe
Kontrollausgabe
procedure TForm1.BtggTClick(Sender: TObject);
var a,b,ergebnis:Integer;       
begin
   a := StrToInt (EdA.text);     
   b := StrToInt (EdB.text);     
   
   berechneggt(ergebnis, a, b);  


   Edggt.text := IntToStr(ergebnis);
   EdA.text   := IntToStr(a);
   EdB.text   := IntToStr(b);
end;
Hier für das obige Beispiel eine Tabelle der verschiedenen Parameterarten:

aktuell formal
Referenzparameter ergebnis ggtwert
Werteparameter a und b alok und blok