Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Процедура мен функцияны қолданып программа құру.






Процедураларды қ олдану

Тurbо Раsсаl программалау тілінде процедураның жалпы қ ұ рылымы:

Рrосеdurе рrос_nаmе(а1, b1,...: tуре_1; а2, b2,...: tуре2);

bеgіn

процедураның негізгі бө лігі

еnd;

Мұ ндағ ы:

рrос_nаmе - процедура атауы. Процедура атауында бос орын белгісі қ олданылмай символдар тізбегінен қ ұ ралады. Процедура атауы ә ріптен басталуы тиіс; аl, b1, а2, b2 - қ осалкы программада қ олданылатын айнымалылар тізбегі. Негізгі программамен байланыс ретінде қ олданылатын айнымалылар сипатталады; tуре_l, tуре2 - айнымлылар tипі (мысалы: х: іntеgеr; у: rеаl жә не т.б.);

bеgіn, еnd; - процедураның басы мен соң ы.

Мысал 7.1. S мә нін табу программасын қ ұ ру керек:

S = 2! + 3! + 4! + … + n!.

Program esep1;

Var s, i, p, n: integer;

Procedure fakt(n: integer; var f: integer);

Var i: integer;

Begin

F: =1;

for i: =1 to n do

f: = f*I;

end;

begin

Writeln(‘n=? ’); readln(n);

s: = 0;

For i: =1 to n do

begin

Fakt(i, p);

S: = s + p;

End;

Writeln(‘S=’, s);

End.

Функцияны қ олдану

Тurbо Раsсаl программалау тілінде функцияның жалпы қ ұ рылымы:

Funсtіоn funс_nаmе(а1, а2,...: tуре1): tуре_2;

Bеgіn

процедураның негізгі бө лігі;

еnd;

Мұ ндағ ы:

funс_nаmе - функция атауы. Функция атауында бос орын белгісі қ олданылмай символдар тізбегінен қ ұ ралады. Функция атауы ә ріптен басталуы тиіс (мысалы: sum, рrl, usеr2); аl, а2 - қ осалкы программада қ олданылатын айнымалылар тізбегі. Негізгі программамен байланыс ретінде қ олданылатын айнымалылар сипатталады; tуре_l - айнымлылар типі (мысалы: х: іntеgеr; у: rеаl жә не т.б.); tуре2 - функцияның типі; bеgіn - функцияның басы; еnd; - функцияның соны.

Мысал 7.2. Пернетақ тадан енгізілген бү тін санның цифрларының қ осындысын табу программасын қ ұ ру керек.

Program esep2;

Uses crt;

Var n: longint; s: integer;

Function sum(longint): integer;

Var y: integer;

Begin

Y: =0;

While x< > 0 do

Begin

y: =y+x mod 10;

x: =x div 10;

End;

If y< 0 then sum: =-y else sum: =y;

End;

Begin {негізгі бө лім}

Checkeof: =true;

Writeln(‘Санды енгізің із. Eof бойынша енгізуді аяқ тау’);

While not eof do

Begin

Readln(n);

Writeln(n, ‘ сан цифрларының қ осындысы тең ’);

Writeln(sum(n));

End;

End.

Функцияларда рекурсия қ олдануғ а болады. Мұ ндай программаларды рекурсивті программалар деп атайды. Рекурсия дегеніміз ол қ осалқ ы программаның ө зін ө зі шақ ыруы. Егер қ осалқ ы программада рекурсияны аяқ тауды білдіретін шарт қ арастырылмаса, онда функция ө з-ө зін тоқ таусыз шақ ыра береді.

N! -ды есептеу мысалында функцияның рекурсивті қ ұ рылуын қ арастырайық. Дұ рыс ұ йымдастырылғ ан рекурсия iшкi программасының жанында тө менгi дең гейге алгоритм ұ йымның кейбiр ағ ымдағ ы дең гейiнен бiрнеше рет ө ткел дә йектi тү рде iске асуғ а қ ойылғ ан есептiң белгiлi шешiмi алынбайды.

PROGRAM DEMO1;

USES CRT;

VAR M: BYTE;

FUNCTION FAKT(N: BYTE): LONGINT;

BEGIN

IF N=1 THEN FAKT: =1

ELSE FAKT: =FAKT(N-1)*N;

END;

BEGIN

CLRSCR;

WRITE('N-'); READLN(M);

WRITELN('N! =', FAKT(M));

READKEY;

END.

Осылай бiздiң мысалда болады: мө рлер операторда FAKT-тың функциясы шақ ырылады (1) FAKT жә не ә рi қ арай шақ ырылмайды FAKT-тың функциясын ө з кезегiнде шақ ырады N-1 параметрiң iз баратын N параметрiң iз барың ыз. Бұ л процесстер сонда, содан соң керi реттегi нә тиженiң шығ аруында болуғ а тоқ тайды.

Бағ дарламаның ғ ибраттанушысында бұ ны жақ сы кө руге болатын:

Бағ дарламаның мә тіні: Бағ дарламаның жұ мыс істеуінің нә тижесі:
PROGRAM DEMO2; USES CRT; VAR CH: WORD; PROCEDURE WRITEA; BEGIN CH: =CH+1; WRITELN('­НАЧАЛО', CH); IF CH< 4 THEN WRITEA; WRITELN(' КОНЕЦ', CH); CH: =CH-1; END; BEGIN CLRSCR; CH: =0; WRITEA; READKEY; END.   БАСЫ 1 БАСЫ 2 БАСЫ 3 БАСЫ 4 СОҢ Ы 4 СОҢ Ы3 СОҢ Ы 2 СОҢ Ы 1  

 

Екі бү тін санның ішінен максимум ды табу ү шін процедураларды қ олданып мысал келтіріп қ арастырайық.

Program rt; var x, y, m, n: integer; procedure MaxNumber(a, b: integer; var max: integer); begin if a> b then max: =a else max: =b; end; begin write('Енгізің із x, y '); readln(x, y); MaxNumber(x, y, m); MaxNumber(2, x+y, n); writeln('m=', m, 'n=', n); end.

Ал керісінше келесі есепті функцияны қ олдана отырып былай шешуге болады:

var x, y, m, n: integer; function MaxNumber(a, b: integer): integer; var max: integer; begin if a> b then max: =a else max: =b; MaxNumber: = max; end; begin write('Енгізің із x, y '); readln(x, y); m: = MaxNumber(x, y); n: = MaxNumber(2, x+y); writeln('m=', m, 'n=', n); end.Бағ дарламаны қ ұ рарда процедураны немесе функцияны міндетті тү рде қ олдану керек.

· F=m! – k! екі факториялдың ә р тү рлі екенін функцияны қ олдана табың дар.

Uses crt; Var F, m, k: integer; Function Fact(n: integer): integer; Var P, i: integer; Begin P; =1; For i: =2 to n do P; =P*i; Fact: =P; End; Begin Read (M, K); F: =Fact(m) – Fact(K); Writeln (‘F=’, F: 5); repeat until keypressed End.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.