§ 3.15. Процедура–функция
Функция деганда функциянинг қиймати деб аталувчи қийматни функцияни аргументи деб аталувчи бошқа бир қиймат билан боғлиқлиги тушинилади.
Алгоритмик тилларда эса шундай функциялар қараладики, улар учун функцияни қийматини аниқловчи алгоритм бериш мумкин бўлиши керак.
Паскал тилида қийматлари фақат оддий турга тегишли бўлган функциялар қаралади. Программалашда ҳар қандай функцияни ҳам формула кўринишда бериш мумкин эмас, баъзан рекурсив кўринишдаги кетма-кетлик орқали функцияни қиймати ҳисобланиши мумкин. Агар бу кетма - кетлик программанинг бир нечта жойида келадиган бўлса, ҳар сафар уни ёзмасдан фақат бир марта функционал боғликлигини кўрсатиб, унга ном бериб, керак бўлса, аргументларини кўрсатиш кифоя (процедурада кўрилганидек).
Программада процедура-функцияни эълони процедурани тасвирлаш билан деарли бир хил. Улар орасидаги фарқлар қуйидагилардан иборат. Процедурани бажарилиши натижасида ҳосил бўлган қиймат эса унинг параметрларини қиймати кўринишида программага узатилади. Процедура-функцияни бажарилиши натижасида ҳосил бўлган қиймат программага функция номини қиймати кўринишда кайтарилади. Функцияни тасвирлаш ҳам процедура тасвиридаги каби сарлавҳадан бошланади ва умумий ҳолда қуйидаги кўринишга эга:
function < функция номи> (<рамзий параметрлар руйхати>):< функция тури>;
<ўзгарувчиларни тасвирлаш бўлими>;
begin
< операторлар бўлими>
end;
Энди процедура – функциянинг синтаксис таърифини беришга ўтамиз.
function <функция номи> (<параметрлар рўйҳати>):<натижа тури>,
бу ерда function қисм-программани функция кўринишида берилаетганини англатувчи хизматчи сўз, <натижа тури> - функция кайтарувчи қиймат тури.
Сарлавҳадан сўнг процедурадагидек унинг эълон кисми ва танаси жойлашади ва унда албатта функция номига қиймат берувчи оператор бўлиши керак (<функция номи>:=<ифода>). Мана шу оператор функциянинг қийматини аниқлайди.
Программада функцияга мурожаат қилиш функция номи кўринишида ёзилади. Ундан сўнг эса қавс ичида фактик параметрлар рўйхати келтирилади. Функцияга мурожаат қилинганда фактик параметрларни узатиш қоидалари процедурадаги қоидалар билан бир хил. Агар функция ўз танасида рамзий ўзгарувчи-параметрни ёки бу функцияга нисбатан глобал бўлган ўзгарувчиларни қийматларини ўзгартирса, у ҳолда бу функция "иккиламчи самара"га эга дейилади. Функцияга мурожаат фақат программа операторининг таркибидагина бўлиши мумкин.
Мисол. 1. Берилган манфий булмаган бутун n сони учун ҳисоблаш учун процедура - функция тузилсин.
Function daraja ( n : integer; x : real ) : real;
var i : integer; y : real;
begin
y : = 1;
for i : =1 to n do y : = y*x;
daraja : = y
end.
2. n факториални ҳисобловчи процедура - функция тузилсин.
function fact(n:integer):integer;
var i,k: integer;
begin k: =1;
for i: =1 to n do k: =k*i;
fact: =k;
end
Шу нарсани эслатиб ўтиш керакки, паскал тилининг стандарт процедура ва процедура-функциялар синфи мавжудки, уларни программада тўғридан - тўғри ишлатиш мумкин.
Процедурани ишга тушириш процедура-оператори ёрдамида амалга оширилар эди, процедура функцияни эса функцияни чақириш билан амалга оширилади. Функцияни чақирувчи ифода алоҳида оператор сифатида келиши мумкин эмас, у қиймат бериш операторининг ўнг томонида ёки бошқа қисм-программага мурожаатда параметр-қиймат сифатида келиши мумкин.
y : = fact(7);..... writeln(‘факториал=’, fact(10));
Процедура ва функциялар танасида уларнинг ўзига мурожаат ҳам бўлиши мумкин, бундай қисм программаларни рекурсив қисм программалар дейилади.
Функционал боғлиқликни аниқлаш учун мўлжалланган процедурага процедура-функция дейилади.
Паскал тилида функцияни аниқлаш учун <функцияни эълон қилиш> тушунчаси хизмат қилади ва булар функция ва процедуралар бўлимига жойлаштирилади.
Шундай қилиб процедура-функцияни процедурадан учта фарқи бор:
1) процедура-функция function хизматчи сўзидан бошланади;
2) процедура - функциянинг сарлавҳасида функция қийматининг тури кўрсатилади;
функцияни ҳисобловчи программада камида битта чап томонида эълон қилинган функциянинг номи бўлган қиймат бериш оператор кўрсатилиши керак ва бу операторларнинг камида биттаси бажарилиши керак.
Мустақил бажариш учун топшириқлар
1..N натурал сонларнинг йиғиндисини ҳисоблайдиган procedure қисм-программаси тузилсин.
S=1!+2!+3!+…+n! йиғинди Procedure-Function қисм программасини тузиш ёрдамида ҳисоблансин.
топадиган ҳисоблайдиган procedure қисм-программаси тузилсин.
Трапециялар формуласи ёрдамида берилган интегрални ҳисоблайдиган программа тузилсин.
Do'stlaringiz bilan baham: |