Безплатен стил на Pascal

Функцията е специален тип процедура, резултатът от която е единично значение. Обичайно е да го наричат стойността, върната от функцията. Този резултат позволява функцията да се използва като операнд за всяка формула от съответния тип:

Декларацията за функция започва с хедър, който обикновено изглежда така:

функция name_fun [(list_arg)]: съвет; [директиви];

В сравнение със заглавката на директивата тук има нов задължителен компонент: tip - тип връщане.

Като пример за оформяне на функция, Листинг 9.2 показва фрагмента,

прилагане на изчислението на точковото произведение на вектори в традицията на ранните версии на Pascal.

Листинг 9 .2. Изчисляване на калоричния продукт

vecN = масив [1.N] на double;

a, b: vecN; c: двойно

функция vec_mult (A, B: vecN): двойно; вар

i: байт; s: двойно;

Допълнителна специфичност на дизайна на функциите е начинът за връщане на изчисления резултат: той трябва да бъде присвоен на „променлива“, чието име съвпада с името на функцията.

Object Pascal и всички версии на Delphi вече имат по-удобен начин за връщане на стойност на функция: специална системна променлива с име

Резултат. Не е необходимо да се декларира, а типът на тази „променлива“ винаги е същият като типа на функцията. Следователно в предишния пример операторът vec_mul: = s; може да бъде заменен с Резултат: = s;. Всъщност възможностите на променливата Result са малко по-широки: тя може да се използва както отляво, така и отдясно на оператора за присвояване. Следователно дизайнът на функцията vec_mult може да изглежда така: функция vec_mult (A, B: vecN): double;

Резултат: = Резултат + A [i] * B [i];

В езика Free Pascal има друга възможност за връщане на стойността на изчислена функция:

Този формат е заимстван от C, C ++, връща се само функционалната дума

(връщане) заменено тук с изход.

В рамките на една функция можете едновременно да използвате както променлива с име Резултат, така и променлива с име на функция. например

функция qq: цяло число; започнете

функция f1 (x: цяло число): цяло число; започнете

Аргументът на функцията f1 се предава по стойност, така че промяната на параметъра x в тялото на функцията няма ефект върху действителния аргумент, даден в конкретно извикване:

y: цяло число = 2; z: цяло число;

функция f2 (var v: цяло число): цяло число; започнете

Инверсия z: = f2 (y); не само ще промени стойността на променливата z (z = 4), но също така ще промени стойността на променливата y (y = 4). Функцията f2 не може да бъде достъпна с аргумент, представен от формулата.

Листинг 9 .3. Програма с данни от всякакъв тип comp_all

функция Равен (var a1, a2; размер: дума): boolean; Тип

Байтове = масив [0.MaxInt div 2] от байт;

N: цяло число; започнете

while (N Bytes (a2) [N] then exit (False); exit (true);

Параметри на подпрограмата по подразбиране

Във Free Pascal е възможно да декларирате процедура или функция, която има стойностите на няколко последни аргументи list_arg списъците са дадени със стойности по подразбиране:

функция mid3 (x1: дума; x2: дума = 1; x3: дума = 2); започнете

Резултат: = (x1 + x2 + x3) div 3;

1 Ако получите грешки по време на компилацията, изпълнете командата Настроики ® Съставител и в групата Режим на компилатор задайте опцията Разширение на обект Pascal на или Съвместим с Delphi. (Предпочита се първата опция.) - Забележка. изд.

Функцията mid3 може да бъде достъпна с един (задължителен) параметър, с два и три:

mid3 (6) = 3 // еквивалент на инверсия mid3 (6,1,2) mid3 (6,3) = 3 // еквивалент на инверсия mid3 (6,3,2) mid3 (6,3,5) = 4

Във всеки случай параметрите, които не са посочени в повикването, се заменят със съответните стойности по подразбиране.

Източник: Кетков, Ю. Л., Свободен софтуер. БЕЗПЛАТЕН ПАСКАЛ за студенти и ученици, Ю. Л. Кетков, А. Ю. Кетков. - SPb.: BHV-Петербург, 2011. - 384 с.: Ил. + CD-ROM - (IiICT)