Механізмы структуравання праграм Працэдуры і функцыі
Поўная сінтаксічная дыяграма вызначэння працэдуры:
Загаловак працэдуры:
Цела працэдуры ў агульным выглядзе вызначаецца наступнай сінтаксічнай дыяграмай.
Вызначэнне блока глядзіце ў тэме «Агульная структура Pascal-праграмы».
Опцыя INTERRUPT (опцыя – тое, што і рэжым) служыць для вызначэння так званых працэдур перарыванняў, калі ў праграме неабходна вызначыць асабістыя алгарытмы рэакцыі на перарыванні аперацыйнай сістэмы, скасаваўшы пры гэтым стандартныя рэакцыі. Гэта працэдуры спецыяльнага віду.
У мове Pascal, пачынаючы з версій 4.0, інтэрфейс сувязі з мовай Асэмблер прыняў завершаны выгляд: мова дазваляе задаваць цела падпраграмы непасрэдна ў выглядзе паслядоўнасці машынных каманд, выкарыстоўваючы спецыяльную канструкцыю з опцыяй INLINE, ці ў выглядзе серыі асэмблерных інструкцый з выкарыстаннем опцыі ASSEMBLER.
Опцыі NEAR ці FAR вызначаюць, як кампілятару будаваць машыннае ўяўленне падпраграмы: бліжэйшы тып выкліку – NEAR, больш далёкі – FAR. Гэтыя опцыі ўжываюцца ў асноўным пры выкарыстанні падпраграм у якасці фармальных параметраў для дадзеных працэдурных тыпаў.
Опцыя EXTERNAL выкарыстоўваецца тады, калі трэба звярнуцца да падпраграмы, цела якой напісана па-за вашай праграмай і знаходзіцца ў выглядзе аб’ектнага кода (ці было запісана ў машынных камандах, ці пасля трансляцыі з нейкай алгарытмічнай мовы). Гэта так званае знешняе апісанне. У Pascal-праграме паказваецца загаловак знешняй падпраграмы, пасля якога замест цела падпраграмы павінна ісці службовае слова EXTERNAL. Акрамя таго, дзе-небудзь у тэксце праграмы неабходна задаць дырэктыву кампілятара $L, аргументам якой з’яўляецца імя obj-файла, які змяшчае код знешняй падпраграмы.
Але можна і так: {$I імя_файла} – уключыць файл (лакальны). Гэта паведамленне кампілятару аб неабходнасці ўключыць у кампіляцыю названы файл. (Разумеецца імя_файла.Pas.)
Функцыі карыстальніка
Функцыя ў адрозненне ад працэдуры вяртае толькі адно простае скалярнае ці радковае значэнне, якое можна скарыстаць у тым ці іншым выразе.
Сінтаксічная дыяграма вызначэння функцыі:
Цела функцыі аналагічна целу працэдуры, за выключэннем таго, што адсутнічае опцыя INTERRUPT.
У целе функцыі ў раздзеле аператараў павінен знаходзіцца па меншай меры адзін аператар, які надае ідэнтыфікатару функцыі выніковае значэнне.
Кожная працэдура ці функцыя можа мець свае працэдуры ці функцыі – лакальныя.
Параметры
Параметры забяспечваюць механізм замены, які дазваляе выконваць падпраграмы з рознымі данымі.
Працэдуры і функцыі могуць мець (а могуць і не мець) спіс фармальных параметраў. Кожны параметр апісваецца некаторым іменем. Тып жа параметра можа быць любым дазволеным.
Пры выкліку падпраграмы фармальныя параметры замяняюцца фактычнымі данымі. Спісы фармальных і фактычных параметраў павінны мець адну колькасць параметраў, тыпы фармальных і фактычных параметраў павінны быць эквівалентнымі, інакш кампілятар заўважыць памылку: «TYPE mismatch» – несупадзенне ці неадпаведнасць тыпаў.
Спіс фармальных параметраў:
Секцыя фармальных параметраў:
Тып параметра:
Тып функцыі:
Адразу зразумела, што нельга рабіць такія апісанні:
PROCEDURE InCorr(VAR A : ARRAY[1..10] OF Byte);
Трэба тып масіву апісаць асобна і затым выкарыстаць яго:
TYPE mas = ARRAY[1..10] OF Byte;
PROCEDURE InCorr(VAR A : mas);
Сустракаецца кананічная форма секцыі фармальных параметраў, калі кожны параметр – гэта адна секцыя.
У мове Pascal бываюць і фармальныя параметры – «адкрытыя масівы», якія вызначаюцца ў секцыі фармальных параметраў пры дапамозе канструкцыі ARRAY OF тып_элементаў. Напрыклад:
PROCEDURE InCorr(aArray : ARRAY OF Integer)
Масіў aArray толькі аднамерны, індэкс яго заўсёды пачынаецца з 0 і змяняецца да велічыні High(aArray). У падпраграме індэкс так і змяняюць.
Значыць, калі параметры-масівы пажадана ўжываць для аднамерных масіваў рознай даўжыні, можна карыстацца адкрытымі масівамі, у якіх указваецца базавы тып элементаў масіву, але не акрэсліваюцца яго памеры і межы.
High(x) – вяртае максімальнае значэнне тыпу-дыяпазону, да якога належыць пераменная x.
Прыклад.
CONST A : ARRAY[-1..2] OF Integer = (0, 1, 2, 3);
B : ARRAY[ 5..7] OF Integer = (4, 5, 6);
PROCEDURE ArrayPrint(aArr : ARRAY OF Integer; c : char);
VAR k : Integer;
BEGIN
Writeln(c);
FOR k := 0 TO High(aArr) DO Write(aArr[k]:8);
Writeln;
END;
BEGIN
ArrayPrint(A, 'A');
ArrayPrint(B, 'B');
Readln;
END.
У мове Pascal выкарыстоўваюцца і параметры CONST (апісанне аналагічна апісанню VAR з тыпам), а праграмы працуюць з параметрамі-канстантамі так, што ў падпраграме любыя змены з такімі параметрамі не дапускаюцца.