Мустахкамлаш учун саволлар
1. Тўплам типи нима.
2. Ёзув типи нима.
Таянч тушунчалар: тўпламлар, тўплам устида амаллар, set of …, ёзув типлар, ёзув майдони, record.
Адабиётлар [1],[2],[3],[6].
15мавзу
Процедуралар
Режа:
1. Процедуралар ҳақида тушунча.
2. Параметрсиз процедуралар.
3. Ўзгарувчи параметрли процедуралар
4. Қийматли параметрли процедуралар
5. Аралаш параметрли процедуралар
1. Программалашда шундай холатлар кузатиладики, унда дастурнинг турли жойларида мазмуни жихатидан бир хил алгоритмни бажаришга тўғри келадики, у мустақил қийматга эга, яъни ечилаётган асосий масаланинг бирор бир қисм масаласини ечишга мўлжалланган, масалан иккита натурал соннинг энг катта умумий бўлувчисини топиш, векторнинг компоненталарини усиш ёки камайиш кўринишда тартиблаш ва бошқа масалалар. Агар бу хусусий алгоритм ҳажм жихатидан катта ва мураккаб бўлса, у холда бу алгоритмни ҳар сафар қайта ёзиш дастурни мураккаблаштириш билан бир қаторда уни ёзиш жараёнида грамматик хатоларга йўл қуйиш эхтимолини оширади. Юқоридаги камчиликларни олдини олиш мақсадида, ҳамда унинг ихчамлигини ва тушунарли кўринишини таъминлаш учун Pascal тили ҳар қандай хусусий алгоритмни асосий дастурни матнидан ажратиб, уни мустақил дастур объекти кўринишда, фақат бир марта ёзиш имконини беради. Бу дастур объекти процедура (кисм-дастур) дейилади.
Процедура - процедура ва функциялар бўлимида процедурани эълон қилиш ёрдамида ишга туширилади.
Процедуранинг сарлавхаси рrоcedure хизматчи сўзидан, процедуранинг номи ва қавс ичида баъзи бир қўшимча маълумотларни ўз ичига олган бўлиши мумкин.
Берилган процедурани фаоллаштириш, яъни ишга тушириш учун дастурни зарур жойида процедура операторни ёзиш керак:
<процедура оператор> := <процедура номи> ёки <процедура номи> (<фактик параметрлар рўйхати>);
Процедура параметри сифатида (агар у мавжуд бўлса) шундай қийматлар ишлатиладики, уларсиз процедура ишлай олмасин, яъни улар бу процедура учун бошланғич берилганлари аниқланади.
Процедуранинг икки хил кўринишини ишлатиш мумкин: параметрли процедура ва параметрсиз.
2. Параметрсиз процедураларда берилганлар асосий дастурнинг блокидан олинади, яъни глобал қиймат ҳисобланади. Бу эса рационал ҳисобланмайди. Мисол сифатида қуйидаги дастурни келтириш мумкин:
рrоgram max1;
var
x,y,u,v:real;
a,b,s:real;
begin
read(x,y);
a:=x+y;
b:=x*y;
if a>b then s:=a else s:=b;
u:=s;
a:=0. 5; b:=u;
if a>b then s:=a else s:=b;
v:=s;
writeln(u,v)
end.
Юқоридаги дастурни процедуралар ёрдамида тузиб чиқайлик.
рrоgram max2;
var
x,y,u,v:real; a,b,s:real;
рrоcedure max;
if a>b then s:=a else s:=b;
end;
begin
read(x,y);
a:=x+y;
b:=x*y;
max;
u:=s;
a:=0. 5 ;
b:=u;
max;
v:=s;
writeln(u,v)
end.
3. Процедуралар билан ишлашда дастурлашнинг қулай усули бу - параметрли процедуралар ҳисобланади. Параметрлар икки хил бўлиши мумкин: параметр қийматли ва параметр ўзгарувчили.
Параметр қийматлар ҳақидаги масалани кўрайлик. Юқоридаги ёзилган дастурда процедуранинг берилганлари ( a ва b ) олдиндан фиксирланмаган, бу чегаралашдан воз кечайлик. Бунинг учун процедурада бошқа мақсадларда ишлатилмайдиган қийматларни ажратиб рамзий равишда уларни r1 ва r2 деб белгилаймиз. Шу белгилашдан фойдаланиб процедурани қуйидаги кўринишда ёзамиз:
рrоgram max3;
var
x,y,u,v: real;
s:real;
рrоcedure maxx(r1,r2:real);
if r1>r2 then s:=r1 else s:=r2
end;
begin
read(x,y);
maxx(x+y,x*y);
u:=s;
maxx(0. 5,u);
v:=s;
writeln(u,v)
end.
r1 ва r2 идентификаторлар процедуранинг рамзий параметрлари дейилади ва улар процедуранинг аниқ қийматлари эмас, балки умуман қийматлар сифатида қаралади. Процедурага ҳар бир мурожаат бўлганда, унинг рамзий параметрлари аниқлаштирилади, шунинг учун кейинги мурожаатлар осон бўлиши учун рамзий параметрлар процедуранинг сарлавхасида аниқ кўрсатилади. Программанинг ишончлилигини ошириш учун рамзий параметрларни билан бирга уларнинг тури ҳам кўрсатилади.
Бундай процедураларга мурожаат қилишда унга мос процедура операторида унинг номидан кейин қавс ичида фактик параметрларнинг рўйхатини кўрсатиш керак. Процедурага мурожаат бўлганда рамзий параметрларнинг бу фактик параметрлар қийматлари билан алмаштирилади. Рамзий ва фактик параметрлар тури ва санаб ўтилиш тартиби бўйича бир-бирига мос келиши керак.
Юқорида кўриб чиқилган процедуранинг рамзий параметрлари унинг параметр қийматлари дейилади, чунки бундай параметрлар процедурага мурожат қилингандаги унга мос фактик параметрларни қийматларини ифодалайди. Бундай холда фактик параметрлар рамзий параметрларнинг турига мос келган ихтиёрий ифода бўлиши мумкин, хусусан унинг турига мос келувчи ўзгарувчи ёки ўзгармас бўлиши мумкин.
Шуни қайд қилиш керакки фактик параметрлар процедуранинг рамзий параметрларига мос келувчи унинг ички ўзгарувчиларига қийматларни узатиш учунгина хизмат қилади. Уни бошқа мақсадларда ишлатиб бўлмайди.
Юқорида кўрилган maxx процедура ҳисобланган қийматни хар доим s ўзгарувчига беради. Бу эса дастурни ишлатишни қийинлаштиради,, чунки процедурани ишлатишдан мақсад бирор бир алгоритмни бир туркум берилганлар учун ҳисоблаб, натижани эса бошқа туркум
ўзгарувчига узатади. Бу камчиликни йукотиш учун натижа узатилаётган ўзгарувчини ҳам процедуранинг параметри сифатида киритиш керак. Аммо бу рамзий параметрнинг хусусияти юқорида кўрилган процедура параметр қийматидан фарқ қилади: у фақат процедурага узатилган қиймат сифатида эмас, балки процедурадан ташқарида мавжуд бўлган ўзгарувчини ифодалайди. Бу ўзгарувчига процедура ичида қиймат берилиши, яъни процедурани ичида бундай ўзгарувчига мурожат қилиш мумкин. Процедуранинг бундай рамзий параметрига параметр -ўзгарувчи дейилади.
Параметр-ўзгарувчини параметр қийматдан фарқлаш учун процедуранинг сарлавхасида рамзий параметрлар рўйхатида параметр-ўзгарувчининг олдига var хизматчи сўз ёзилади. Рамзий параметр-ўзгарувчидан кейин унинг тури кўрсатилади. Параметр-ўзгарувчига мос келувчи фактик параметр фақат ўзгарувчи бўлиши мумкин.
Ушбу холда юқорида келтирилган дастурни қуйидаги кўринишда ёзиш мумкин:
рrоgram max4;
var
x,y,u,v: real;
рrоcedure maxxx(r1,r2:real; var res:real);
if r1>r2 then res:=r1 else res:= r2;
end;
begin
read(x,y);
maxxx(x+y,x*y,u);
maxxx(0. 5,u,v);
writeln(u,v)
end.
Агарда процедура параметрлари ҳосилавий тур бўлса, масалан, жадвал катталиклар, бу турларни асосий дастурнинг турлар эълон қилиш бўлимида эълон қилиш керак. Процедура эълонида эса эълон қилинган турдан фойдаланиш керак. ўлчами катта бўлган ўзгарувчиларни пара
метр- ўзгарувчи кўринишда эълон қилиш машина хотирасини ва машина вақтини тежаш нуқтаи-назаридан афзаллик беради, айниқса жадвал катталиклар катта ўлчамли бўлган холда.
Параметрли процедураларда процедура дастурсини ёзишда формал параметрлар рўйхати, процедурадан фойдаланишда эса фактик параметрлар рўйхати келтирилади, улар уч хил типли бўлади:
1. ўзгарувчи параметрлар,
2. қийматли параметрлар
3. аралаш параметрлар
Ўзгарувчи формал параметрлар рўйхат ичида var сўзи билан ёзилади, бу сўз биринчи нуқтали вергулгача таъсир қилади: процедура номи(...var <руйхат>: <тип>;...)
Қийматли формал параметрларни олдида эса var сўзи ёзилмайди;
процедура номи(... <руйхат>: <тип>;...)
5. Аралаш параметрлар. Формал параметрлар рўйхати ичида ҳам ўзгарувчи параметрлар, ҳам қийматли параметрлар фойдаланилади
процедура номи(...var <руйхат>: <тип>;...; <руйхат>: <тип>;...)
Процедурадан фойдаланишда ўзгарувчи формал параметр ўрнида мос типдаги фактик ўзгарувчи ёзилади, қийматли формал параметр ўрнида эса мос типда қиймат берувчи ихтиёрий ифода ёзиш мумкин.
Мисол
procedure akt1(f,r:integer);
.......................................
procedure fak2(a;real);
........................................
akt1(2+s,50);
fak2(sin(a)-exp(3.444));
Масала
Қуйидаги ифодани ҳисоблаш учун уч турда дастур ёзинг
1+2!+3!+...+N!
1. Ўзгарувчи параметрли процедура ёрдамидаги дастур.
program param;
var
p1,s,n,m:integer;
procedure faktor(var p:integer);
var
i;byte;
begin
p:=1;
for i:=1 to m do p:=p*i;
end;
begin
writeln(‘n ни киритинг); read(n);
s:=0;
for m:=1 to n do
begin
faktor(p1);
s:=s+p1;
end;
writeln(‘жавоб=,s);
end.
2.Кийматли параметрли процедура ёрдамидаги дастур.
program param;
var
p,s,n,k:integer;
procedure faktor(m:integer);
var
i;byte;
begin
p:=1;
for i:=1 to m do p:=p*i;
end;
begin
writeln(‘n ни киритинг’); read(n);
s:=0;
for k:=1 to n do
begin
faktor(k);
s:=s+p;
end;
writeln(‘жавоб',s);
end.
3. Ўзгарувчи ва қийматли параметрли процедура ёрдамидаги дастур.
program param;
var
p1,s,n,k:integer;
procedure faktor(var p:integer; m:integer);
var
i;byte;
begin
p:=1;
for i:=1 to m do p:=p*i;
end;
begin
writeln(‘n ни киритинг'); read(n);
s:=0;
for k:=1 to n do
begin
faktor(p1,k);
s:=s+p1;
end;
writeln(‘жавоб' ,s);
еnd.
Do'stlaringiz bilan baham: |