Подпрограмма - последовательность операторов
языка, предназначенных для решения некоторой
подзадачи. Каждая подпрограмма имеет имя, по
которому можно к ней обратиться.
В Turbo Pascal подпрограммы подразделяются на
процедуры (procedure) и функции (function), они
представляют собой законченный программный
объект и располагаются в разделе описания данных.
Program main;
Var a,b : Integer;
заголовок процедуры или функции
раздел описания переменных
Begin {начало подпрограммы}
Тело подпрограммы
End; {конец подпрограммы}
Begin {начало основной программы}
Тело основной программы
End. {конец основной программы}
Глобальные и локальные переменные
В теле основной программы объявлены переменные,
для которых отводится память на весь период
выполнения программы. Такие переменные
называются глобальными, поскольку их можно
использовать в любой подпрограмме.
Для переменных, которые объявляются в разделе
описания подпрограммы, память отводится на
период выполнения подпрограммы, поэтому они
называются локальными. Основная программа их "не
замечает".
Запомните!
Глобальные переменные доступны любой
подпрограмме, локальные только той, в которой они
объявлены.
Пример,
Program m;
Var a,b,c : Integer;
заголовок подпрограммы
Var a,b,c : Integer;
…
Переменные a,b,c объявленные в основной программе -
глобальные и доступны любой подпрограмме,
переменные a,b,c объявленные в подпрограмме - это
уже другие переменные - локальные, память для них
отводится только на период работы подпрограммы.
В этом примере глобальным и локальным переменным
даны одинаковые имена, но, чтобы не запутаться,
стараются называть их разными именами.
Процедуры
Процедура - это особым образом оформленный
фрагмент программы, имеющий собственное имя.
Упоминание этого имени в тексте программы
приводит к активизации процедуры и называется ее
вызовом. Сразу после активизации процедуры
начинают выполняться входящие в нее операторы,
после выполнения последнего из них управление
возвращается обратно в основную программу и
выполняются операторы, стоящие непосредственно
за оператором вызова процедуры.
Пример,
Procedure p (<служебная информация - параметры>);
Begin
… Тело процедуры
end;
Параметры
Нам остается выяснить, какая служебная
информация находится в круглых скобках рядом с
именем процедуры.
Подпрограмма реализует некоторый частный
алгоритм, который вызывается в основной
программе. Для реализации алгоритма
подпрограммы могут понадобиться некоторые
данные из основной программы. Обработав эти
данные, подпрограмма возвращает результат
основной программе, если в этом есть
необходимость. Передавать информацию из
основной программы в подпрограмму и наоборот мы
можем только через переменные, которые носят
специальное название - параметры.
Переменные, с помощью которых передается
информация из основной программы в подпрограмму,
называются входными параметрами, переменные,
через которые информация поступает из
подпрограммы в основную программу называются
выходными.
Параметры являются локальными и существуют
только на период работы подпрограммы. Эти
переменные указываются рядом с именем процедуры
в круглых скобках. Этого достаточно для их
объявления.
Внимание!
Эти переменные больше не объявляются ни в какой
части программы или подпрограммы.
Параметры - значения
Параметры, с помощью которых информация
поступает в тело подпрограммы, называются
параметрами - значениями.
Рассмотрим заголовок процедуры:
Procedure proc (a,b,c: integer);
Перед каждым обращением к процедуре мы должны
поместить в параметры некоторые значения.
Список параметров задается через запятую,
параметры формально определяют количество
переменных, которое необходимо для обмена
информацией, и их тип.
Пример1.
Описать процедуру, вычисляющую bk , где b -
основание, k - показатель степени (натуральное
число).
Var b : Real; {основание - глобальная переменная}
k: Integer; {показатель}
P: Real; {резульат}
Procedure power (a:real; n:integer); {a,n - локальные
переменные}
Var i:byte; {счетчик цикла, локальная переменная}
Begin
P:=1;
For i:=1 to n do
P:=P*a;
End;
Begin
{зададим значения основания и показателя степени
при вызове процедуры}
{вычислим 34}
{вызов процедуры}
power (3, 4); {3- основание, 4 - показатель степени}
writeln (P:4:2);
{зададим значения основания и показателя степени
с клавиатуры}
readln (b,k); {b- основание, k - показатель степени}
power (b, k);
writeln (b,' в степени', k, ' равно', P);
End.
Классифицируем все переменные, которые
используются в теле основной программы и
процедуры.
Глобальные переменные: b, k, P - доступны всем.
Локальные переменные: a, n (параметры), i (счетчик
цикла) - доступны только процедуре.
Рассмотрим наиболее подробно передачу
параметров.
1. Параметры, перечисленные в скобках
после имени процедуры, называются формальными.
Наша цель - указать количество и тип переменных, с
помощью которых будет передаваться информация в
процедуру.
2. При обращении к процедуре значения
параметров должны конкретизироваться,
необходимо явно указать некоторое значение,
причем список значений идет в том же порядке, как
и список формальных параметров в заголовке
процедуры, либо перечислить имена переменных (опять
же соблюдая порядок и количество параметров),
присвоив им некоторые значения.
3. При вызове процедуры список значений
или переменных в круглых скобках является
списком фактических параметров.
Примечания:
1. Локальные переменные a, n (они же
формальные параметры) могут использоваться в
любых выражениях в теле процедуры.
2. В списке формальных параметров
параметры разного типа отделяются друг от друга
точкой с запятой, параметры одинакового типа
записываются через запятую.
3. Глобальные переменные b, k (они же
фактические параметры) могут быть заданы
некоторым выражением (например, b*2, k+1), но при этом
переменные должны быть известны.
4. Процедура может не иметь параметров.
Задание. Напишите самостоятельно процедуру,
вычисляющую an , без параметров, используя
глобальные переменные.
Параметры - переменные
Информация, которую обрабатывает подпрограмма,
подразделяется на две группы; входная информация
и выходная информация.
Входная информация поступает в подпрограмму
через параметры-значения для обработки. Основная
программа должна получить результат, т.е. другими
словами выходную информацию. С помощью каких
переменных можно получить результат?
1) Результат заносится в некоторую
глобальную переменную (вернитесь к процедуре
power), что не очень удобно: в процессе работы
программы нельзя изменить имя глобальной
переменной, чтобы поместить результат еще в
какую-то переменную.
2) Использование параметров -
переменных. Параметр - переменная обозначает в
списке параметров переменную, в которую должен
быть занесен ответ. Перед параметром-переменой
стоит служебное слово var, т.е. другими словами:
Входная информация Выходная информация
Параметры-значения Параметры-переменные
Необходимо помнить о том, что при вызове
процедуры параметры-переменные пусты, хотя для
них отводится место в памяти. Для того, чтобы они
получили значение, его необходимо занести в
параметры-переменные с помощью оператора
присваивания.
Изменим процедуру power, вычисляющую an, так чтобы
результат вычисления поступал в основную
программу через параметр-переменную.
Var b : Real; {основание}
k: Integer; {показатель}
x,y: Real; {результат}
Procedure power (a:real; n:integer; var c:real);
Var i:byte;
Begin
c:=1;
For i:=1 to n do
c:=c*a;
End;
(или )
Var i:byte;
P:real;
Begin
P:=1;
For i:=1 to n do
P:=P*a;
c:=P;
End;
Begin
power (3, 4, x); {x - фактический параметр-переменная, с
его помощью результат известен основной
программе}
writeln (x:3:4);
readln (b,k);
power (b, k, y);
writeln (y:3:4);
End.