Pascal - Prosedürler

Procedures tek bir değer döndürmek yerine bir grup sonuç elde etmeyi sağlayan alt programlardır.

Bir Prosedür Tanımlama

Pascal'da, bir prosedür kullanılarak tanımlanır procedureanahtar kelime. Bir prosedür tanımının genel biçimi aşağıdaki gibidir -

procedure name(argument(s): type1, argument(s): type 2, ... );
   < local declarations >
begin
   < procedure body >
end;

Prosedür definition Pascal'da bir header, yerel declarations ve bir bodyprosedürün. Prosedür başlığı anahtar kelimeden oluşurprocedureve prosedüre verilen bir isim. İşte bir prosedürün tüm bölümleri -

  • Arguments- Argüman (lar), çağıran program ile prosedür tanımlayıcıları arasındaki bağlantıyı kurar ve ayrıca biçimsel parametreler olarak da adlandırılır. Prosedürlerde argüman kuralları, fonksiyonlar için olanla aynıdır.

  • Local declarations - Yerel bildirimler, yalnızca prosedürün gövdesi için geçerli olan etiketler, sabitler, değişkenler, işlevler ve prosedürler için bildirimlere atıfta bulunur.

  • Procedure Body- Prosedür gövdesi, prosedürün ne yaptığını tanımlayan bir dizi ifadeler içerir. Her zaman ayrılmış sözcüklerin başlangıcı ve bitişi arasına alınmalıdır. Tüm hesaplamaların yapıldığı bir prosedürün parçasıdır.

Aşağıda findMin () adlı bir prosedürün kaynak kodu verilmiştir . Bu prosedür, 4 x, y, z ve m parametresini alır ve m adlı değişkendeki ilk üç değişken arasındaki minimum değeri saklar. M değişkeni tarafından geçilirreference (geçen argümanları biraz sonra referans alarak tartışacağız) -

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 }

Prosedür Beyanları

Prosedür declarationderleyiciye bir prosedür adı ve prosedürün nasıl çağrılacağını anlatır. Prosedürün gerçek gövdesi ayrı ayrı tanımlanabilir.

Bir prosedür bildirimi aşağıdaki sözdizimine sahiptir -

procedure name(argument(s): type1, argument(s): type 2, ... );

Lütfen unutmayın name of the procedure is not associated with any type. Yukarıda tanımlanan prosedür için findMin () , aşağıdaki bildirimdir -

procedure findMin(x, y, z: integer; var m: integer);

Prosedürü Çağırma

Bir prosedür oluştururken, prosedürün ne yapması gerektiğine dair bir tanım verirsiniz. Prosedürü kullanmak için, tanımlanan görevi gerçekleştirmek için bu prosedürü çağırmanız gerekecektir. Bir program bir prosedürü çağırdığında, program kontrolü çağrılan prosedüre aktarılır. Çağrılan bir prosedür, tanımlanan görevi gerçekleştirir ve son bitiş ifadesine ulaşıldığında, kontrolü çağıran programa geri döndürür.

Bir prosedürü çağırmak için, aşağıda gösterildiği gibi prosedür adıyla birlikte gerekli parametreleri iletmeniz yeterlidir -

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.

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Enter three numbers:
89 45 67
Minimum: 45

Yinelemeli Alt Programlar

Bir programın veya alt programın başka bir alt programı çağırabileceğini gördük. Bir alt program kendisini çağırdığında, buna özyinelemeli arama denir ve süreç özyineleme olarak bilinir.

Kavramı açıklamak için bir sayının faktöriyelini hesaplayalım. Bir sayının faktöriyeli n olarak tanımlanır -

n! = n*(n-1)!
   = n*(n-1)*(n-2)!
      ...
   = n*(n-1)*(n-2)*(n-3)... 1

Aşağıdaki program kendini yinelemeli olarak arayarak belirli bir sayının faktöriyelini hesaplar.

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.

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Enter a number:
5
Factorial 5 is: 120

Aşağıdaki başka bir örnek, Fibonacci Series kullanarak belirli bir sayı için recursive işlev -

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.

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

0 1 1 2	3 5 8 13 21 34

Bir Alt Programın Argümanları

Bir alt program (function or procedure) argümanları kullanmaktır, argümanların değerlerini kabul eden değişkenleri bildirmelidir. Bu değişkenlereformal parameters alt programın.

Biçimsel parametreler, alt program içindeki diğer yerel değişkenler gibi davranır ve alt programa girişte oluşturulur ve çıkışta yok edilir.

Bir alt programı çağırırken, argümanların alt programa aktarılmasının iki yolu vardır:

Sr.No Çağrı Tipi ve Açıklaması
1 Değere göre ara

Bu yöntem bir bağımsız değişkenin gerçek değerini alt programın biçimsel parametresine kopyalar. Bu durumda, alt program içindeki parametrede yapılan değişikliklerin bağımsız değişken üzerinde hiçbir etkisi yoktur.

2 Referansla arayın

Bu yöntem, bir argümanın adresini biçimsel parametreye kopyalar. Alt programın içinde adres, çağrıda kullanılan gerçek argümana erişmek için kullanılır. Bu, parametrede yapılan değişikliklerin bağımsız değişkeni etkilediği anlamına gelir.

Pascal, varsayılan olarak call by valueargümanlar iletmek için. Genel olarak bu, bir alt program içindeki kodun, alt programı çağırmak için kullanılan argümanları değiştiremeyeceği anlamına gelir. 'Pascal - Fonksiyonlar' bölümünde kullandığımız örnek program, şunu kullanarak max () adlı fonksiyonu çağırdıcall by value.

Burada sağlanan örnek program ( exProcedure ) ise findMin () prosedürünü kullanarakcall by reference.