parametr – o‘zgaruvchi
deb ataladi.
Parametr-o‗zgaruvchini parametr-qiymatdan farq qilish uchun
protsedurani aniqlashdagi parametrlar ro‗yxatida o‗zgaruvchi
oldidan var xizmatchi so‗zi yoziladi. Parametr – o‗zgaruvchidan
so‗ng albatta, uning tipi ko‗rsatib qo‗yiladi. Yuqorida
aytganimizdek, formal parametr – qiymat o‗rniga protseduraga
murojaat vaqtida shu tipli ifoda yozish mumkin bo‗lsa, parametr –
o‗zgaruvchi uchun bu hol mutlaqo mumkin emas.
Protsedurani mukammallashtirib borish dinamikasini his etish
uchun yana, yuqorida ko‗rilgan maksimum topish misolining
dasturini parametr – o‗zgaruvchi ishlatgan holda ko‗rib chiqamiz:
var
x, y, u, v: real;
procedure max3 (a, b: real; var S: real); begin
if a > b then S := a else S := b;
end;
begin
x := StrToFloat (Edit1.Text); y := StrToFloat (Edit2.Text);
max3(x + y, x * y, u); {x+y va x*y ifodalarining kattasi u
o‗zgaruvchisiga o‗zlashtirilmoqda} max3(0.5, u, v); {0.5 va u
ifodalarining kattasi V o‗zgaruvchisiga o‗zlashtirilmoqda}
ShowMessage (FloatToStr(u)+‘ ‗+FloatToStr(v)); end;
Shunday qilib, bitta dasturni protseduraning uch xil varianti
uchun tuzib chiqib, natijada ixcham va sodda dasturga ega
bo‗ldik.
Protseduralarni aniqlashda shu paytgacha oddiy tipli
parametrlardan foydalanib keldik. Lekin, biz shuni yaxshi
bilamizki, Delphi tilida hosilaviy tiplar ham mavjud. Parametr –
o‗zgaruvchiga hosilaviy, yangi tiplar berish xuddi oddiy skalyar
tip berish kabi amalga oshirilaveradi. Ammo, parametr –
qiymatlarda yangi tiplar masalasiga batafsilroq yondashish kerak.
Biz yuqorida eslatib o‗tdikki, faktik parametr formal parametr
– qiymatga mos tipli ixtiyoriy ifoda bo‗lishi mumkin. Lekin
Delphi tilida ixtiyoriy tipli qiymatlar uchun shu tipdagi natija
beruvchi hech qanday amal ko‗zda tutilmagan. Shuning uchun, bu
tiplar uchun faktik parametrlar faqat shu tipga mos o‗zgaruvchilar
bo‗lishi mumkin xolos. Bunday hol, xususiy holda massivlar
uchun ham o‗rinlidir.
Faraz qilaylik, dasturda o‗zgaruvchilar quyidagicha e‘lon
qilingan bo‗lsin: const n = 20;
type vector = array [1..N] of real; var
u, v: real; x, y: vector;
Bu yerda u=max{xi}, v=max {y;} larni aniqlash talab
qilinayotgan bo‗lsin.
Vektorning eng katta hadini topishni, albatta, protsedura
ko‗rinishida tashkil qilamiz:
procedure max1(A:vector; var S: real);
var
i: integer;
begin
S := A[1];
for i:=2 to n do
if A[i] > S then S:= A[i]
end;
Bu protseduraga asosiy dasturda murojaat max1(x, u);
max1(y, v); ko‗rinishida amalga oshiriladi. Protseduradagi A
vektorini parametr – qiymat sifatida yozib qo‗yganimiz uchun,
protseduraga qilinayotgan har bir murojaatda A vektorga mos
ravishda X va Y vektorlari ko‗chirib yoziladi va so‗ng protsedura
o‗z ishini bajaradi. Biz bilamizki, bir tarafdan, massivlarning
sirtida ko‗chirish amalini bajarishga ancha vaqt ketadi, ikkinchi
tarafdan, har safar yangidan protseduraga qilingan murojaatda A
vektor uchun xotiradan qo‗shimcha joy ajratiladi. SHuning uchun,
protseduraning sarlavhasida quyidagicha almashtirish qilsak,
yuqoridagi ikki kamchilikni bartaraf qilgan bo‗lamiz: procedure
max1(var A: vector; var S: real);
Endi protsedurani e‘lon qilish, undan foydalanib dastur
yaratish malakasini hosil qilganimizdan so‗ng, uni e‘lon
qilishning sintaksis qoidalarini ko‗rib chiqaylik.
Protsedurani aniqlash (e‘lon qilish) quyidagicha amalga
oshiriladi:
:=
;
Bu yerda tushunchasi to‗liqligicha
tushunchasi bilan bir xil sintaksis qoida asosida aniqlangani
uchun, bu tushunchaga ortiq qaytib o‗tirmaymiz.
Endi esa
ga ta‘rif beramiz:
:=Procedure
|
Procedure
()
Protsedura ismi dasturchi tomonidan tanlanadigan oddiy
identifiqator hisoblanadi.
Formal parametrlar ro‗yxati quyidagicha aniqlanadi:
:= seksiyasi> {; }
Formal
parametrlar
seksiyasi
deganda
protsedura
parametrlarining parametr-qiymat va parametr-o‗zgaruvchilardan
iborat bo‗lishligi tushuniladi:
:={ {, }: tipi> | var {, }:
bu yerda – formal parametrlar sifatida ishlatiladigan
identifiqator.
Endi yuqoridagi aniqlashlarga tushuntirishlar berib o‗tamiz.
Yuqoridagi Bekus-Naur formulalaridan ko‗rinib turibdiki,
formal parametrlar ro‗yxati (agar u mavjud bo‗lsa) bitta yoki bir
nechta
o‗zaro nuqta-vergul (;) belgisi bilan ajratilgan
seksiyalardan tashkil topgan. Har bir seksiyada esa o‗z navbatida,
bitta yoki bir nechta o‗zaro nuqta-vergul bilan ajratilgan formal
parametrlar
qatnashishi
mumkin.
Protseduradagi
formal
parametrlar sonini, dasturchining o‗zi protsedurani aniqlash
moxiyatidan kelib chiqqan holda tanlaydi.
Do'stlaringiz bilan baham: |