12. Prozeduren
Wir kennen bereits Prozeduren als Metheoden der Delphi-Komponenten, bei denen die Komponente selbst als Parameter Sender übergeben wird.
Die Syntax für Prozeduren ist:
procedure <Prozedurnamen> ( <Parameterliste> );
begin
<Prozedurblock>
end;
|
||
Was dabei mit den Parametern passiert, wollen wir an einem einfachen Beispiel ausprobieren.
Unsere selbstgeschriebene Prozedur verdoppeln macht nichts anderes, als die Zahl, die als Parameter übergeben wird, mit 2 zu multiplizieren.
|
User Interface:
|
1. Variante:
procedure verdoppeln(a:integer);
begin
a := 2*a;
end;
procedure TForm1.Button1Click(Sender:TObject);
var a: integer;
begin
a := StrToInt(Edit1.Text);
verdoppeln(a);
Edit1.Text := IntToStr(a);
end;
|
2. Variante:
procedure verdoppeln(var a:integer);
begin
a := 2*a;
end;
procedure TForm1.Button1Click(Sender:TObject);
var a: integer;
begin
a := StrToInt(Edit1.Text);
verdoppeln(a);
Edit1.Text := IntToStr(a);
end;
|
Bei der ersten Variante wird der Wert der Zahl a an die Prozedur verdoppeln übergeben (Parameterübergabe by value).
Dort wird eine Kopie von a erstellt und diese verdoppelt. Die aufrufende Prozedur bekommt davon nichts mit. Dort hat sich also der Wert von a nicht verändert.
Bei der zweiten Variante wird durch var erreicht, dass die Variable a übergeben wird, genauer gesagt ihre Adresse (Parameterübergabe by reference).
Dabei wird keine Kopie erstellt sondern a an der ursprünglichen Adresse geändert. Für die aufrufende Prozedur hat sich der Wert von a also auch verändert.
Durch den Einsatz von Prozeduren werden Programme wesentlich übersichtlicher und mehrfach verwendete Routinen müssen nur einmal geschrieben und vorallem gepflegt werden.
Beispiel:
Wenn in einem Programm häufig Winkelangaben von Dezimalgraden ind Grad, Minuten und Sekunden umgerechnet werden müssen, empfiehlt es sich, dafür eine Prozedur zu schreiben:
procedure DegToDMS(x:real; var d,m,s:real); begin d := Int(x); x := 60*(x-d); m := Int(x); s := 60*(x-m); end;
Lokale Variablen
Prozeduren und die im nächsten Kapitel beschriebenen Funktionen können ihre eigenen Variablen deklarieren. Diese gelten dann nur lokal, das heißt zwischen dem begin und end der Funktion bzw. Prozedur. Es gibt keine Konflikte, wenn lokale Variablen den gleichen Namen haben, wie globale Variablen im aufrufenden Programm. In diesem Fall gelten in der Prozedur die lokalen, außerhalb die globalen Variablen.
Aufgaben
Schreiben Sie eine Prozedur swap, die zwei ganze Zahlen vertauscht.
Schreiben Sie eine Prozedur smult, die einen Vektor (x1;x2;x3) mit einer Zahl k multipliziert.
Aufgabe 2 des Kapitels "REPEAT-Schleifen" beschreibt einen Algorithmus zur Berechnung des ggT von zwei Zahlen.
Schreiben Sie damit eine Prozedur zum Kürzen eines Bruchs a/b.
Einführung in das Programmieren mit DELPHI
