Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 9 ПП.doc
Скачиваний:
2
Добавлен:
02.11.2018
Размер:
290.3 Кб
Скачать

9.4. Аргументы и параметры

Параметры - данные, с которыми работает подпрограмма. Это внутренние данные для подпрограммы и перечисляются в ее заголовке с указанием типов.

Они связаны с аргументами.

Аргументы - данные, передаваемые в подпрограмму или возвращаемые из нее. Это внешние для подпрограммы данные, с которыми имеет дело вызывающая часть программы. В подпрограмме им соответствуют параметры. Указываются в списке аргументов при обращении к подпрограмме и являются фактическими параметрами.

Синонимы:

Параметры = формальные параметры,

Аргументы = фактические параметры.

------------------------------------------------------

Для аргументов и параметров надо соблюдать:

  • одинаковое количество (An=Pn) ,

  • одинаковый порядок следования (A1-P1, A2-P2..)

  • совместимость типов.

Все формальные параметры разделяются на 4 категории:

  • параметры-значения – в списке параметров указывается их тип, например (x,y : real); передаются через стек в виде копий и остаются неизменными в подпрограмме;

  • параметры-константы – в списке параметров снабжаются служебным словом (const s : real); передаются подпрограмме в виде копий с помощью адресов, изменяться подпрограммой не могут;

  • параметры-переменные – в списке параметров снабжаются служебным словом (x,y:byte; var s1 : real); передаются подпрограмме в виде копий с помощью адресов, инструкции подпрограммы могут изменить значение переменной, являющейся фактическим параметром;

  • параметры процедурного типа – в списке задаются именами и являются параметрами-значениями.

9.5. Области действия имен

Структура подпрограммы идентична структуре программы.

Имена, объявленные в главной программе являются глобальными. Они доступны во всех внутренних точках, в том числе и в подпрограммах.

Имена, объявленные в подпрограмме являются локальными. Они доступны во всех внутренних точках подпрограммы.

Локальное имя во внешней программе недоступно. Память под них выделяется автоматически в момент вызова подпрограммы.

Если используются одинаковые локальное и глобальное имя, то внутри процедуры локальное имя блокирует глобальное.

Формат доступа к глобальному имени:

<имя программы>.<глобальное имя> //имя составное

Чтобы получить доступ к такому глобальному имени в подпрограмме его надо указывать составным.

9.6. Функция

Объявление функции в общем виде

Function <Имя> (p1,p2:T1;...):T; // Заголовок функции: Имя функции

var

//объявление локальных переменных - параметров

begin

------------ // тело функции

Имя :=<выражение>; //или

Result := <выражение>; //глобальное имя

------------

end;

--------------------------------------------------------

Имя - имя функции (имя существительное) используется для ее вызова,

T - тип возвращаемого функцией результата.

p1, p2 - имена формальных параметров, значение которых используются для вычисления значения функции. Объявляется в заголовке функции. Конкретные значения параметры получают во время работы программы в результате вызова функции из основной программы.

T1 - их тип.

Обращение при обычном синтаксисе.

Форма вызова функции:

program Example3;

uses

SysUtils;

var // Объявление аргументов.

a1: integer;

a2,a3: real;

Function MyFunc(p1: integer; p2: real): real; //Заголовок функции

// Разделы локальных определений

begin

//Тело функции

MyFunc:=<выражение>;

. . .

end;

begin //Основная программа

...............

a3:=3+MyFunc(a1,a2); //Вызов функции по имени в выражении

...............

end.

-----------------------------------------------------

Соответствия: p1 - a1, p2 - a2

Задача1 . Написать функцию, проверяющую, является ли целое число, введенное с клавиатуры четным. Программа должна использовать эту функцию, проверять является ли число четным или нет, и выводить соответствующее сообщение.

program Example4;

uses

SysUtils;

var

m: integer; //вводимое с клавиатуры число

function Chet(n:integer): boolean; //Заголовок функции

begin //Тело функции Chet

if n mod 2 = 0 then Chet:=True

else Chet:=False;

end;

begin // Основная программа

repeat

readln (m); // Проверка условия на четность

// числа m с помощью функции Chet

if chet(m) then writeln(m,' - chetnoe chislo')

else writeln(m,' - nechetnoe chislo');

until m=0;

readln

end.