Pascal - Verfahren
Procedures sind Unterprogramme, die es ermöglichen, eine Gruppe von Ergebnissen zu erhalten, anstatt einen einzelnen Wert zurückzugeben.
Prozedur definieren
In Pascal wird eine Prozedur mit dem definiert procedureStichwort. Die allgemeine Form einer Prozedurdefinition lautet wie folgt:
procedure name(argument(s): type1, argument(s): type 2, ... );
< local declarations >
begin
< procedure body >
end;
Eine Prozedur definition in Pascal besteht aus a header, lokal declarations und ein bodydes Verfahrens. Der Prozedurheader besteht aus dem Schlüsselwortprocedureund einen Namen für die Prozedur. Hier sind alle Teile einer Prozedur -
Arguments- Die Argumente stellen die Verknüpfung zwischen dem aufrufenden Programm und den Prozedurkennungen her und rufen auch die formalen Parameter auf. Die Regeln für Argumente in Prozeduren sind dieselben wie für die Funktionen.
Local declarations - Lokale Deklarationen beziehen sich auf die Deklarationen für Bezeichnungen, Konstanten, Variablen, Funktionen und Prozeduren, die nur für den Hauptteil der Prozedur gelten.
Procedure Body- Der Prozedurkörper enthält eine Sammlung von Anweisungen, die definieren, was die Prozedur tut. Es sollte immer zwischen den reservierten Wörtern Anfang und Ende stehen. Es ist der Teil einer Prozedur, in dem alle Berechnungen durchgeführt werden.
Es folgt der Quellcode für eine Prozedur namens findMin () . Diese Prozedur verwendet 4 Parameter x, y, z und m und speichert das Minimum unter den ersten drei Variablen in der Variablen mit dem Namen m. Die Variable m wird übergebenreference (Wir werden die Übergabe von Argumenten etwas später durch Bezugnahme diskutieren) -
procedure findMin(x, y, z: integer; var m: integer);
(* Finds the minimum of the 3 values *)
begin
if x < y then
m := x
else
m := y;
if z <m then
m := z;
end; { end of procedure findMin }
Verfahrenserklärungen
Eine Prozedur declarationinformiert den Compiler über einen Prozedurnamen und wie die Prozedur aufgerufen wird. Der tatsächliche Hauptteil des Verfahrens kann separat definiert werden.
Eine Prozedurdeklaration hat die folgende Syntax:
procedure name(argument(s): type1, argument(s): type 2, ... );
Bitte beachten Sie, dass die name of the procedure is not associated with any type. Für die oben definierte Prozedur findMin () folgt die Deklaration -
procedure findMin(x, y, z: integer; var m: integer);
Prozedur aufrufen
Beim Erstellen einer Prozedur definieren Sie, was die Prozedur zu tun hat. Um die Prozedur verwenden zu können, müssen Sie diese Prozedur aufrufen, um die definierte Aufgabe auszuführen. Wenn ein Programm eine Prozedur aufruft, wird die Programmsteuerung auf die aufgerufene Prozedur übertragen. Eine aufgerufene Prozedur führt die definierte Aufgabe aus und gibt die Steuerung an das aufrufende Programm zurück, wenn ihre letzte end-Anweisung erreicht ist.
Um eine Prozedur aufzurufen, müssen Sie lediglich die erforderlichen Parameter zusammen mit dem Prozedurnamen übergeben, wie unten gezeigt -
program exProcedure;
var
a, b, c, min: integer;
procedure findMin(x, y, z: integer; var m: integer);
(* Finds the minimum of the 3 values *)
begin
if x < y then
m:= x
else
m:= y;
if z < m then
m:= z;
end; { end of procedure findMin }
begin
writeln(' Enter three numbers: ');
readln( a, b, c);
findMin(a, b, c, min); (* Procedure call *)
writeln(' Minimum: ', min);
end.
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Enter three numbers:
89 45 67
Minimum: 45
Rekursive Unterprogramme
Wir haben gesehen, dass ein Programm oder Unterprogramm ein anderes Unterprogramm aufrufen kann. Wenn sich ein Unterprogramm selbst aufruft, wird es als rekursiver Aufruf bezeichnet, und der Prozess wird als Rekursion bezeichnet.
Um das Konzept zu veranschaulichen, berechnen wir die Fakultät einer Zahl. Faktor einer Zahl n ist definiert als -
n! = n*(n-1)!
= n*(n-1)*(n-2)!
...
= n*(n-1)*(n-2)*(n-3)... 1
Das folgende Programm berechnet die Fakultät einer bestimmten Zahl, indem es sich selbst rekursiv aufruft.
program exRecursion;
var
num, f: integer;
function fact(x: integer): integer; (* calculates factorial of x - x! *)
begin
if x=0 then
fact := 1
else
fact := x * fact(x-1); (* recursive call *)
end; { end of function fact}
begin
writeln(' Enter a number: ');
readln(num);
f := fact(num);
writeln(' Factorial ', num, ' is: ' , f);
end.
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Enter a number:
5
Factorial 5 is: 120
Es folgt ein weiteres Beispiel, das das generiert Fibonacci Series für eine gegebene Zahl mit a recursive Funktion -
program recursiveFibonacci;
var
i: integer;
function fibonacci(n: integer): integer;
begin
if n=1 then
fibonacci := 0
else if n=2 then
fibonacci := 1
else
fibonacci := fibonacci(n-1) + fibonacci(n-2);
end;
begin
for i:= 1 to 10 do
write(fibonacci (i), ' ');
end.
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
0 1 1 2 3 5 8 13 21 34
Argumente eines Unterprogramms
Wenn ein Unterprogramm (function or procedure) Um Argumente zu verwenden, muss es Variablen deklarieren, die die Werte der Argumente akzeptieren. Diese Variablen werden als bezeichnetformal parameters des Unterprogramms.
Die formalen Parameter verhalten sich wie andere lokale Variablen innerhalb des Unterprogramms und werden beim Eintritt in das Unterprogramm erstellt und beim Beenden zerstört.
Beim Aufrufen eines Unterprogramms gibt es zwei Möglichkeiten, wie Argumente an das Unterprogramm übergeben werden können:
Sr.Nr. | Anruftyp & Beschreibung |
---|---|
1 |
Call by value
Diese Methode kopiert den tatsächlichen Wert eines Arguments in den formalen Parameter des Unterprogramms. In diesem Fall haben Änderungen am Parameter im Unterprogramm keine Auswirkungen auf das Argument. |
2 |
Rufen Sie als Referenz an
Diese Methode kopiert die Adresse eines Arguments in den formalen Parameter. Innerhalb des Unterprogramms wird die Adresse verwendet, um auf das tatsächliche Argument zuzugreifen, das im Aufruf verwendet wird. Dies bedeutet, dass Änderungen am Parameter das Argument beeinflussen. |
Standardmäßig verwendet Pascal call by valueArgumente übergeben. Im Allgemeinen bedeutet dies, dass Code in einem Unterprogramm die zum Aufrufen des Unterprogramms verwendeten Argumente nicht ändern kann. Das Beispielprogramm, das wir im Kapitel 'Pascal - Funktionen' verwendet haben, hat die Funktion max () using verwendetcall by value.
Während das hier bereitgestellte Beispielprogramm ( exProcedure ) die Prozedur findMin () mit aufruftcall by reference.