Мустахкамлаш учун саволлар
1. Turbo Pascalда процедура қандай тузилади.
2. Параметрли ва параметрсиз процедуралар.
3. Процедураларга мисол келтиринг.
Таянч тушунчалар: Процедуралар, Ўзгарувчи параметрли процедуралар, Қийматли параметрли процедуралар, Аралаш параметрли процедуралар, Процедура бичими.
Адабиётлар [1],[2],[3],[6].
16мавзу
Функциялар
Режа:
1. Функция ҳақида тушунча.
2. Функциянинг бичими.
3. Функция ва процедура орасидаги фарқлар.
Функция деганда функциянинг қиймати деб аталувчи қийматни функцияни аргументи деб аталувчи бошқа бир қиймат билан боғликлиги тушунилади.
Алгоритмик тилларда эса шундай функциялар қараладики, улар учун функциянинг қийматини аниқловчи алгоритм бериш мумкин бўлиши керак.
Pascal тилида қийматлари фақат оддий турга тегишли бўлган функциялар қаралади. Программалашда ҳар қандай функцияни ҳам формула кўринишда бериш мумкин эмас, баъзан рекурсив кўринишдаги кетма-кетлик орқали функцияни қиймати ҳисобланиши мумкин. Агар бу кетма -кетлик дастурнинг бир нечта жойида келадиган бўлса ҳар сафар уни ёзмасдан фақат бир марта функционал боғликлигини кўрсатиб унга ном бериш, керак бўлса аргументларини кўрсатиш кифоя (процедурада кўрилганидек).
Функционал боғлиқликни аниқлаш учун мўлжалланган процедурага процедура-функция дейилади.
Pascal тилида функцияни аниқлаш учун <функцияни эълон қилиш> тушунчаси хизмат қилади ва булар функция ва процедуралар бўлимига жойлаштирилади.
Функцияни эълон қилиш синтаксиси худди процедурани синтаксисига ўхшаб аниқланади:
<функцияни эълон қилиш>:=<функцияни сарлавхаси>;<блок>
<функцияни сарлавхаси>:functiоn <функция номи>; <турнинг номи>(<рамзий параметр номи>{,<рамзий параметр номи>})
ёки functiоn <функция номи >: <турнинг номи>
Бу қоидадан кўриниб турибдики, процедура функциянинг сарлавхаси процедуранинг сарлавхасига ўхшаш, лекин сарлавханинг охирида функциянинг қийматига мос келувчи турни кўрсатиш лозим.
Шуни такидлаш лозимки, процедура-функцияни параметрсиз, ҳамда параметр-қийматли ва параметр-ўзгарувчили кўринишда ишлатиш мумкин. Процедура-функцияни ташкил этувчи блок одатдагидек аниқланади, аммо функцияни ҳисоблаш жараёнида функцияни қиймати билан бирга оралиқ қийматлар ҳам ҳисобланади. Шунинг учун функция қийматини бу оралиқ қийматлардан фарқлаш учун функцияни ҳисобловчи операторлар кетма-кетлигида камида битта қуйидаги кўринишдаги қиймат бериш оператори қатнашиши керак:
<функция номи>:<ифода>;
бу ёзув функциянинг қиймати сифатида ўнг томондаги ифоданинг қиймати олинишини билдиради. Шуни эслатиб ўтиш зарурки, бу кўринишдаги операторлар фақат функцияни эълон қилишдагина ишлатилади.
Шундай қилиб процедура-функцияни процедурадан учта фарқи бор:
1) процедура-функция functiоn хизматчи сўзидан бошланади;
2) процедура- функциянинг сарлавхасида функция қийматининг тури кўрсатилади;
3) функцияни ҳисобловчи дастурда камида битта чап томонида эълон қилинган функциянинг номи бўлган қиймат бериш оператор кўрсатилиши керак ва бу операторларнинг камида биттаси бажарилиши керак.
Масалан n факториални ҳисобловчи дастурни Pascal тилида қуйидаги кўринишда ёзиш мумкин:
functiоn fact(n:integer):integer;
var
i,k: integer;
begin k:=1;
fоr i:=1 tо n dо k:=k*i;
fact:=k;
еnd.
Шу нарсани эслатиб ўтиш керакки, Pascal тилининг стандарт процедура ва процедура-функциялар синфи мавжудки, уларни дастурда тўғридан-тўғри ишлатиш мумкин.
Процедурани ишга тушириш процедура-оператори ёрдамида амалга оширилар эди, процедура функцияни эса функцияни чақириш билан амалга оширилади. Функцияни чақирувчи ифода алохида оператор сифатида келиши мумкин эмас, у қиймат бериш операторининг ўнг томонида ёки бошқа қисм-дастурга мурожаатда параметр-қиймат сифатида келиши мумкин.
y := fact(7);..... writeln(‘факториал=‘, fact(10));
Мисол.
Қуйидаги ифодани ҳисоблаш учун қисм дастур-функция ёрдамида дастур ёзинг
1+2!+3!+...+N!
program param;
var
s,n,k:integer;
function faktor( m:integer): integer;
var
i;byte;
begin
faktor :=1;
for i:=1 to m do faktor := faktor *i;
end;
begin
writeln(‘n ни киритинг’); read(n);
s:=0;
for k:=1 to n do s:=s+ faktor (k);
end;
writeln(‘жавоб’,s);
end.
Do'stlaringiz bilan baham: |