Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.pdf
Скачиваний:
37
Добавлен:
07.06.2015
Размер:
672.16 Кб
Скачать

4. ПОДПРОГРАММЫ В ПАСКАЛЕ

Подпрограмма – это повторяющаяся группа операторов, оформленная в виде программной единицы. Она записывается однократно; в соответствующих местах программы обеспечивается лишь обращение к ней по имени.

Преимущества подпрограмм:

1.Сокращение объема программы.

2.Улучшение структуры программы с точки зрения читаемости

инаглядности.

3.Уменьшение вероятности ошибок и облегчение процесса от-

ладки.

В Паскале механизм подпрограмм реализуется в виде процедур и функций. Они различаются назначением и способом их использования.

4.1.Процедуры

Процедуры предназначены для выполнения некоторой последовательности действий. Любая процедура начинается с заголовка, который является ее обязательной частью. Он состоит из служебного слова Procedure, за которым следует имя процедуры, а в круглых скобках – список формальных параметров. После заголовка могут идти те же разделы, что и в программе. Таким образом, общий вид будет следующим:

Procedure <Имя> (список формальных параметров может отсутствовать)

<описательная часть>

begin

<тело процудуры>

end;

Например, процедура для вычисления степени целого числа:

Procedure Degree(x,y:integer;var st:longist); {заголовок процедуры} var i: integer; { описательная часть }

35

begin

{ тело процедуры }

st:=1

for

i=1 to y do st:=st*x;

end;

 

Результат передается в основную программу.

При вызове процедуры ее формальные параметры заменяются фактическими в порядке их следования.

Фактический параметр – это параметр, который передается процедуре при обращении к ней.

Число и тип формальных и фактических параметров должны совпадать.

Формальный параметр – это переменная, фиктивно присутствующая в процедуре и определяющая тип и место подстановки фактических параметров. Все формальные параметры делятся на два вида: параметры-переменные и параметры-значения.

1)Параметры-переменные (st) это формальные параметры, перед которыми стоит служебное слово var. Они передаются по ссылке, когда необходимо передать новые значения в точку вызова процедуры из программы.

2)Параметры-значения (x, y). Перед ними не ставится служебное слово var. Передается только копия значений этих параметров; внутри процедуры можно производить любые действия с данными формальными параметрами, но их изменения никак не отражаются на значениях соответствующих фактических параметров.

Глобальные переменные – это те переменные, которые объявлены в описании основной части.

Локальные переменные – это те переменные, которые объявлены

впроцедурах и функциях.

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

Пример применения подпрограммы нахождения n-степени чис-

ла a (a,n – целые, n>0).

36

Program PR1; var a,n : integer; s : longint;

procedure Degree(x,y : integer; var st : longint) var i : integer;

begin st:=1;

for i:=1 to y do st:=st*x;

end; begin

writeln(‘Введите два числа’); { ввод значений } readln(a,n);

Degree(a,n,s); { обращение к процедуре } writeln(‘Результат’,s); { вывод значения an } readln;

end.

Процедура вызывается как оператор, состоящий из имени процедуры. В круглых скобках передаются фактические параметры. В нашем примере фактические параметры a, n и s передают свои значения соответственно формальным параметрам x, y и st. После завершения работы процедуры переменные a и n имеют те же значения, что и при вызове, а s получает новое значение.

Пусть a=3 и n=4. Когда в программе встречается оператор Degree(a,n,s), то компьютер выполняет следующие действия:

выделяет память для переменных, описанных в процедуре

Degree;

присваивает формальным параметрам значения фактических: x:=a (x=3), y:=n (y=4), st:=s;

выполняет операторы процедуры, то есть вычисляет 34;

присваивает полученное значение переменной s, а переменные a и n остаются прежними; после этого переходит к выполнению следующих действий программы.

На рис. 1 показано распределение памяти между переменными, используемыми в процедуре и в основной программе. Прямоуголь-

37

ники соответствуют ячейкам памяти, каждая из них имеет свой адрес. Пересылка параметров идет по значению () или по ссылке (), в первом случае передается только значение, а во втором – передается адрес ячейки, куда после выполнения процедуры будет записано новое значение. Переменные x, y, st, i – это локальные переменные, для них выделяется память только при обращении к данной процедуре, а после завершения ее работы она освобождается.

Рис. 1

После выполнения операторов (по последнему end) идет возврат в точку вызова, при этом если фактические параметры передавались по значению, то они остаются неизменными, а если передавались по ссылке, то в ячейке с данным адресом появится новое значение (рис. 2).

Рис. 2

38