378
prosedur və funksiyalarda formal parametr kimi istifadə olunur.
Prosedur tipi
aşağıdakı kimi elan olunur:
Type
=procedure(
);
və ya
Type
<
identifikator
>=function(
):
;
Qeyd edək ki, prosedur tipindən istifadə etmək üçün aşağıdakı qaydalara əməl
etmək zəruridir:
•
Proqramın səhvsiz yerinə yetirilməsi üçün {$F+} kompilyator açarı
verilməlidir;
•
Prosedur tipinin təyin etdiyi prosedur və funksiyalar standart tipli
olmamalıdır;
•
Prosedur tipinin təyin etdiyi prosedur və funksiyalar digər prosedur və ya
funksiyanın təsvir etmə bölməsində elan olunmamalıdır.
Məsələn, vurma cədvəlinin yaradılması proqramına baxaq.
Program P_22;
Uses Crt;
Type f = Function(x,y: Integer): Integer;
Var a,b: Integer;
{$f+} Function Mult(x,y: Integer): Integer; Begin
Mult:= x * y;
end;
{$f-}
Procedure Print(a,b: Integer; Oper: f);
Var i, j: Integer; Begin
For i:=1 To a Do
Begin
For j:= 1 To b Do Write(Oper(i, j):5);
WriteLn
End;
WriteLn
End;
Begin
Write(’Setir ve sutunların sayıni daxil edin’);
ReadLn(a, b);
Print(a, b, Mult);
End.
2.16. Rekursiyalar
Əgər prosedur və ya funksiyanın gövdəsində cari prosedura və ya dövrü
olaraq funksiyaya müraciət olunarsa, onda həmin prosedura və ya funksiyaya
379
rekursiv prosedur və ya funksiya deyilir
1
. Qeyd edək ki, bir çox riyazi funksiyaları
rekursiv olaraq təyin etmək mümkündür. Məsələn
x
y
=
funksiyasının
hesablanması rekursiv funksiya vasitəsilə yerinə yetirilə bilər.
Var
m: integer;
x,y:real;
Function XN (X:real;N:integer):real;
begin
if N=0 then XN:=1
else
XN:=X*XN(X,N-1);
end;
begin
readln (m);
readln(x);
y:=XN(x,m);
Write('y=',y);
end.
Proqramdan göründüyü kimi,
m
x
y
=
funksiyasının hesablanması üçün
XN
funksiyasında m qədər özünə müraciət olunur.
2.16.1. Forward__direktivi_ilə_əvvəlcədən_elan_etmək_lazımdır._Bu_məqsədlə_prosedur_və_ya_funksiyanın_başlığından_sonra_Forward__sözü_yazılır._Məsələn,_var'>Forward direktivi
Praktikada
ola bilər ki, birinci altproqramdan, müraciət anına qədər hələ
təyin olunmayan ikinci altproqrama müraciət olunsun. Belə vəziyyət əsasən
vasitəçi rekursiyalarda – prosedurlar və funksiyalar qarşılıqlı olaraq bir-birinə
müraciət etdikdə baş verir. Bu problemi həll etmək üçün uyğun prosedur və
funksiyaları
Forward
direktivi ilə əvvəlcədən elan etmək lazımdır.
Bu məqsədlə
prosedur və ya funksiyanın başlığından sonra
Forward
sözü yazılır. Məsələn,
var
n,l:integer;
procedure Turqut(i: integer; var l:integer); forward;
procedure Azad(i: integer; var l:integer);
begin
Turqut(i-1,l);
end;
procedure Turqut(i: integer; var l:integer);
begin
l:=i*5;
end;
begin
read(n);
Azad(n,l);
write(l)
end.
1
Başqa sözlə funksiya və ya prosedurun özündən özünə müraciət olunduqda onda həmin prosedura
və ya funksiyaya rekursiv prosedur və ya funksiya deyilir.
380
P
roqram yerinə yetirildikdə əsas proqramdan
Azad
proseduruna müraciət
olunur.
Azad
prosedurundan
isə öz növbəsindən
Turqut
proseduruna müraciət
olunur.
Turqut
proseduru
Azad
prosedurundan sonra gəldiyinə gorə o, əvvəlcədən
Forward
direktivilə elan olunmuşdur.
2.17. Fayl tipli dəyişənlər. Fayllarla əməliyyatlar
Böyük həcmli verilənlərlə işlədikdə fayl tipli verilənlərdən istifadə etmək
məqsədəuyğundur. Əks halda hər dəfə ilkin verilənləri klaviaturadan daxil etmək
lazım gəlir. Bu
isə çox yorucu iş olub, xeyli vaxt itkisi tələb edir. Fayl tipli
verilənlər konkret informasiya daşıyıcısında (məsələn, bərk disklərdə, disketlərdə,
CD, DVD disklərdə, fleş yaddaşında və s.) proqram və ya istifadəçi tərəfindən fayl
şəklində saxlanılır.
Fayl-mətn və ikilik formatda verilənləri saxlamaq üçün ada
malik xarici yaddaş sahəsidir. Hər bir fayl unikal ünvana malik olur. Fayla
verilənlər klaviatura vasitəsilə istifadəçi tərəfindən və ya proqram yerinə
yetirildikdə əməliyyatların nəticəsi olaraq avtomatik daxil oluna bilər. Bu səbəbdən
faylları giriş və çıxış faylı kimi fərqləndirirlər. Proqram giriş faylından ilkin
verilənləri alır, çıxış faylına isə yerinə yetirdiyi əməliyyatın son nəticəsini yazır.
Turbo Pascalda fayllarla işləmək üçün fayl tipli dəyişəndən istifadə olunur.
Fayl tipli dəyişən ifadələrdə istifadə oluna bilməz və onun vasitəsilə fayla müraciət
olunur. Faylda saxlanılan verilənlərin tipinə uyğun olaraq proqramda fayl dəyişəni
fərqli elan olunur. Belə ki, mətn fayllarına uyğun fayl dəyişəni aşağıdakı kimi elan
olunur:
Var
: Text
;
Ikilik formatlı fayllar öz növbəsində tipli və tipsiz
növ fayllara bölünür
1
və
hər bir növ fərqli formada elan edilir. Tipsiz fayllara uyğun fayl dəyişəni aşağıdakı
kimi elan olunur:
Var
: file
;
Tipli fayllara uyğun fayl dəyişəni isə aşağıdakı kimi elan olunur:
Var
: file of
;
Proqramda fayl tipli dəyişən elan olunduqdan sonra onunla informasiya
daşıyıcısında yerləşən faylın ünvanı arasında birqiymətli əlaqə yaradılmalıdır.
Bunun üçün standart
Assign (, )
prosedurundan istifadə olunur. Bu prosedur yerinə yetirilən andan başlayaraq fayl
tipli dəyişən üzərində aparılan bütün əməliyyatlar, prosedurda ünvanı göstərilmış
fayl üzərində aparılan əməliyyatlarla ekvivalentdir. Məsələn,
1
Tipli
fayllar eynitipli verilənləri, tipsiz fayllar sadəcə olaraq baytlar toplusu olub ixtiyari tipli
verilənləri saxlayır.