Студопедия

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

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

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






Процедуралар, функциялар, сыртқы библиотекалар.






Программа Р30, символдар жолы арқ ылы экранды екі бө лімге бө ліп 1, 2,..., 10 сандар ү шін квадрат тү бірлері кестесін жә не 1, 2,..., 5 сандар ү шін натурал логарифмдерінің кестесін қ ұ рады. Символдар жолын экранғ а шығ ару line процедурасы ретінде ұ йымдастырылғ ан. Процедурадан программағ а ешқ андай ақ паратты жіберу қ ажет болмағ андық тан процедураның аргументтері (символдардың тү рі жә не саны) мә н-параметрлер ретінде сипатталғ ан. Бұ л программада процедура бес рет орындалады.

Программа Р31, берілген тө рт натуральных а, b, с, d сандар ү шін сандардың бірінші жә не екінші паралардың ең ү лкен ортақ бө лгіштерін (ЕҮ ОБ) экранғ а шығ арып оларды мә ні бойынша салыстырады. Программада nod(x, y) рекурсиялы функция анық талғ ан, ол келесі ережені жү зеге асырады:

21 жә не 15 санларғ а nod(x, y) –ті ретімен қ олданып, табамыз:

nod(21, 15) = nod(6, 15) = nod(15, 6) = nod(3, 6) = nod(6, 3) = nod(0, 3) = nod(3, 0) = 3.

 

Сыртқ ы библиотекалар. Ішкі программалар (процедуралар мен функциялар) программаларда оларды қ ұ рылымдау мақ сатында, сонымен қ атар, программаның кейбір бө ліктерін бірнеше рет қ айталау барысында пайдаланылады. Процедуралар мен функциялар программалық бірліктердің ішкі программаларды сипаттау бө лімінде сипатталады. Олар бұ л программалық бірліктер ү шін ішкі болып табылады. Бірдей бір ішкі программалар тү рлі программаларда пайдаланылғ ан жағ дайлар кездеседі. Мұ ндай жағ дайларда оларды қ ажетті моментте кез келген программаларғ а қ осуғ а болатын сыртқ ы ішкі-программаларды қ ұ рғ ан дұ рыс. Ә детте, сыртқ ы ішкі-программаларды жеке пакеттерге біріктіреді, оларды сыртқ ы ішкі-программалардың библиотекалары деп атайды. Кірістірілген библиотекалар компиляциялау барысында кез келген программағ а автоматты тү рде қ осылады.

Сыртқ ы ішкі-программалар жеке файл немесе файлдар тү рінде кә дімгідей қ ұ рылады. Сыртқ ы ішкі-программаларды қ осу ү шін тұ тынушының программасында сипаттау бө лімінде $і файл аталуы директивасы міндетті тү рде қ ойылады. Осы моменттен бастап сыртқ ы файлдың барлық процедуралары мен функциялары программа ү шін ішкі болып қ алады, жә не оның қ ұ рамына кіретін барлық процедуралары мен функцияларына локальды жә не глобальды айнымалылар ережесі таралады.

Келесі мысалда екі процедурадан жә не бір функциядан тұ ратын сыртқ ы библиотека қ ұ рылады. Бірінші процедура privet экранды тазартады, сә лемдемені шығ арады, одан кейін бос орын клавишасы басылғ аннан кейін қ айтадан экранды тазартады. Екінші stepen процедурасы а санды b санғ а дә режелейді. Ү шінші ішкі-программа-функция mexp Тейлор қ атарының негізінде жуық шамамен экспонента мә нін есептейді.

procedure PRIVET;

var a: char;

begin

clrscr; gotoxy(20, 10);

write('Сә леметсіз бе, сау болың ыз! '};

repeat {цикл экранды алмастыруғ а }

gotoxy(35, 50); write('пробел'); {мү мкіндік береді }

read(kbd, a); {бос орынды басу бойынша }

until а=' ';

clrscr;

end;

procedure STEPEN(a, b: real; var y: real);

begin

y: =exp(b*ln(a));

end;

function MEXP(x: real): real;

begin

mexp: =l+x+x*x/2+x*x*x/6+x*x*x*x/24;

end;

Осы ү ш ішкі-программалар lab.pas атаулы файлғ а жазылғ ан болсын.Р32 программасы қ ұ рылғ ан сыртқ ы библиотеканы пайдалану мысалын кө рсетеді:

program Р32;

{$i lab} {библиотеканы қ осу директивасы}

var a, b: real;

begin

PRIVET;

STEPEN(2, 4, a); writeln('2 –нің 4 дә режесі»', a);

b: =MEXP(l);

write('машинаның есептегені exp(1)=', EXP(1): 6: 4, 'менің есептегенім ехр(1)=', b: 6: 4);

end.

Модульдер. Модульдерді библиотекаларды қ ұ ру жә не ү лкен программаларды логиикалы тү рде байланысқ ан бір-біріне тә уелсіз қ ұ рамдас бө ліктерге бө лу ү шін пайдаланады. Модуль деректер типтерін, айнымалыларды жә не басқ а объекттерді сипаттауды, сонымен қ атар, тү рлі программаларда пайдаланылатын ішкі-программаларды қ амтиды. Модульдің сипаттауларына, функциялары мен процедураларына қ ол жеткізуді оның ішінде модульдің аталуы кө рсетілген uses операторы қ амтамасыз етеді. Бұ л оператор тікелей тақ ырыптан кейін программаның сипаттаулар бө лімінде орналасады. Егер программада бір емес бірнеше модульдер пайдаланылатын болса, онда ү тір арқ ылы ажыратып барлық модульдердің атауларын кө рсету керек. System модуліне сілтеу міндетті емес.

Модуль қ ұ рамына келесі бө лімдер кіреді:

· тақ ырып (unit < модуль аталуы> тү рінде) модульге сілтеу ү шін керек. Модульді қ амтитын файл аталуы модуль аталуымен бірдей болуы тиіс;

· интерфейс, ол interfase сө зінен басталады да тақ ырыптар тізімі арқ ылы бейнеленген жә не оларғ а негізгі программа тұ лғ асынан қ ол жеткізуге болатын процедуралар мен функцияларды қ оса жариялауларды қ амтиды;

· жү зеге асыру, ол implementation сө зінен басталады да модульдің интерфейстік бө лімінде санақ тап шығ арылғ ан процедуралар мен функциялардың тұ лғ аларын қ амтиды;

· инициализация, ол бос болып тек end –ты қ амтуы мү мкін немесе модульді инициализациялау бойынша қ ажетті амалдарды орындайтын (мысалы, айнымалыларғ а бастапқ ы мә ндерді меншіктейтін) операторларды қ амтуы мү мкін.

Сонымен, модуль – ол тұ рақ тылар, деректер типтері, процедуралар мен функциялар жиынтығ ы. Ә р модуль жеке компиляцияланады; компиляциялау нә тижесі – кең ейтпесі tpu (Turbo Pascal Unit) файл. Модульдің ә р элементін қ осымша жариялаусыз тұ тынушының программасында пайдалануғ а болады, ол ү шін тақ ырыптан кейін программаның басында пайдаланылатын модуль аталуын Uses директивасында жазғ ан жеткілікті. Стандартты Crt, Graph жә не басқ а модульдерді пайдаланады. Бұ л модульдерде дисплей экранымен, клавиатурамен, графикалық примитивтермен жә не с.с. жұ мыс жасауғ а арналғ ан сервистік процедуралар жә не функциялар қ амтылғ ан.

Кешенді сандарғ а арифметикалық амалдарды қ олданумен Паскальдің математикалық мү мкіндіктерін толық тыратын модульді қ ұ ру мысалын қ арастырайық. Кешенді сандарды нақ ты сандарды (а, b) жұ птары арқ ылы бейнелейміз. Оларғ а амалдар келесі ережелерге сә йкес қ олданылады:

(a, b) + (c, d) = (a+c, b+d),

(a, b)-(c, d) = (a-c, b-d),

(а, b) * (c, d) = (a*c-b*d, a*d+b*c),

(a, b) / (c, d) = ((a*c+b*d)/(c*c+d*d), (b*c-a*d)/(c*c+d*d)).

Қ ұ рылатын модуль тө рт процедураны қ амтиды: Sum - қ осынды, Raz - айырым, Proiz – кө бейтінді, Chastn – бө лінді. Бұ л модуль жеке компиляциялануы мү мкін. Одан кейін кез келген программа Uses CompChisla директива арқ ылы осы модульдің интерфейстік объекттеріне (бұ л жағ дайда – процедураларына) қ ол жеткізе алады. Модульдің интерфейстік бө лімінде процедуралардың тек тақ ырыптары кө рсетіледі, ал «жү зеге асыру» бө лімінде процедуралардың тақ ырыптарынан тек атаулары қ алады.

unit CompChisla;

interface

procedure Sum(a, b, с, d: real; var x, y: real);

procedure Raz(a, b, c, d: real; var x, y; real);

procedure Proiz(a, b, c, d: real; var x, y: real);

procedure Chstn(a, b, c, d; real; var x, y: real);

implementation

procedure Sum; begin x: =-a+c; y: =b+d end;

procedure Raz; begin x: =a-c; y: =b-d end;

procedure Proiz; begin x: =a*c-b*d; y: =a*d+b*c end;

procedure Chastn;

var z: real;

begin z: = c*c+d*d; x: = (a*c-)-b*d) /z; y; = (b*c-a*d) /z

end;

end.

Лекция






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