Лекция

Тема: «Понятие подпрограмм.

Виды и принципы использования подпрограмм в Turbo Pascal»

 

План

1. Понятие и назначение подпрограмм

2. Описание и использование функций

3. Описание и использование процедур

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

5. Понятие локальных и глобальных переменных

 

1. Понятие и назначение подпрограмм

Иногда при написании программ нужно выполнить один блок операторов несколько раз. Если записывать этот блок помногу раз, то текст программы значительно увеличится, а чтение программы будет затруднено. Поэтому разработчики ввели понятие подпрограммы - некоторый блок операторов, который имеет свое имя и может вызываться на выполнение в любом месте основной программы по имени. В Паскале используется два вида подпрограмм: процедуры и функции.

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

 

2. Описание и использование функций

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

FUNCTION имя функции (список параметров) : тип функции;

Раздел описания переменных;

Раздел операторов.

Список параметров - это перечень переменных через запятую, которые являются аргументом функции.

Раздел описания переменных описывает локальные переменные данной функции. Описание осуществляется аналогично разделу описания переменных основной программы.

Раздел операторов содержит все операции, выполняемые данной функцией и создается по аналогии с разделом операторов обычной программы на Паскале.

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

Имя переменной:=имя функции (список параметров)

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

Пример. Написать программу, выполняющую вычисление значения выражения y=tgx/(1-tgz).

Как известно, функции, вычисляющей значение Tg(x), в Паскале нет. Для вычисления данной функции используют выражение Sin(X)/Cos(X). Однако функция Tg(X) в исходном выражении повторяется несколько раз, поэтому для удобства вычисления будет целесообразно описать отдельную функцию для вычисления  Tg(X) и использовать ее в расчетах.

 

{Подключаем модуль по работе с экраном}

Uses Crt;

{Описываем переменные}

Var X, Y, Z: Real;

 

{Описываем подпрограмму-функцию}

Function Tan(A:Real) : Real;

Begin

Tan:=Sin(A*Pi/180)/Cos(A*Pi/180);

End:

 

{Текст основной программы}

Begin

{Очищаем экран}

ClrScr;

{Вводим исходные данные}

Write ('Введите значение аргументов:');

Readln (X,Z);

{Вычисляем значение функции}

Y:=Tan(X)/(1- Tan(Z));

{Выводим результат на экран}

Writeln ('Ответ:', y:3:2);

{Делаем паузу для просмотра}

Readln;

End.

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

 

3. Описание и использование процедур

Hе всегда можно подпрограмму реализовать как функцию (например, работа с массивами, сортировка в памяти и др.). Если по алгоритму требуется  выдача более  чем одного результата, то, как правило, используются подпрограммы­-процедуры.

Для описания процедуры используют запись вида:

Procedure имя процедуры (список параметров) ;

раздел описания переменных;

раздел операторов.

Список параметров - это перечень переменных через запятую, которые являются аргументом процедуры или служат для сохранения в них результатов расчетов.

Раздел описания переменных описывает локальные переменные данной функции. Описание осуществляется аналогично разделу описания переменных основной программы.

Раздел операторов содержит все операции, выполняемые данной функцией, и создается по аналогии с разделом операторов обычной программы на Паскале.

Обращение к процедуре происходит путем вызова имени процедуры с перечислением всех параметров в отдельной строке программы.

Отличия процедур от функций:

Например. Составить программу нахождения суммы максимальных элементов и произведения минимальных элементов 3 массивов.

{Подключаем модуль для работы с экраном}

Uses Crt;

{Описываем пользовательский тип массив}

Type Mas = Array [1..10] Of Real;

{Описываем переменную}

Var A, B, C: Mas;

SUM, PROIZV: Real;

RA, RB, RC: Integer;

MAXA, MAXB, MAXC: Real;

MINA, MINB, MINC: Real;

 

{Процедура для ввода массива}

Procedure Vvod (VAR N:Integer; VAR X:Mas);

Var I: Integer;

Begin

Write ('Введите количество элементов в массиве: ');

Readln (N);

For I:= 1 To N Do

Begin

Write('Введите значение ',i,'-го элемента массива: ');

Readln ( X [I]);

End;

End;

 

{Процедура нахождения максимального значения}

Procedure Max (N:Integer; Var X:Mas; Var Y:Real);

Var I:Integer;

Begin

Y:=X [1];

For I:=1 To N Do

If Y<X [I] Then

Y:=X [I];

End;

 

{Процедура нахождения минимального значения}

Procedure Min (N:Integer; Var X:Mas; Var Y:Real);

Var I:Integer;

Begin

Y:=X [1];

For I:=1 To N Do

If Y>X [I] Then

Y:=X [I];

End;

 

{Текст основной программы}

Begin

{Вызываем процедуры для ввода массивов}

Vvod (RA,A);

Vvod (RB,B);

Vvod (RC,C);

 

          {Вызываем процедуру для нахождения максимального значения}

          Max (RA,A,MAXA);

          Max (RB,B,MAXB);

          Max (RC,C,MAXC);

 

          {Вызываем процедуру для нахождения минимального}

          Min (RA,A,MINA);

          Min (RB,B,MINB);

          Min (RC,C,MINC);

 

{Подсчитываем сумму максимальных элементов}

SUM:=MAXA+MAXB+MAXC;

{Подсчитываем произведение минимальных элементов}

Proizv:=MINA*MINB*MINC;

{Выводим найденную сумму}

Writeln ('Сумма равна:', SUM:6:2);

{Выводим найденное произведение}

Writeln ('Произведение равно: ',PROIZV:6:2)

{Делаем паузу для просмотра}

Readln;

End.

 

4. Виды параметров в процедурах и функциях

В описаниях процедур и функций различаются два типа параметров:

Параметры-значения

Служат для передачи значений в подпрограмму и не могут меняться в процессе работы подпрограммы. Такие переменные описываются в списке параметров просто указанием имени переменной и ее типа через двоеточие:

Function TAN (A:Real):Real;

Procedure PRIM (A:Real; B:Integer);

 

Параметры-переменные

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

Такие переменные используются только при описании процедур (так как функция сама запоминает полученное значение) и перед описанием каждой такой переменной ставится слово VAR.

Procedure PRIM (Var A,B:Integer; Var C:Real; Var STR:String [10]);

Параметры типа «массив» и «файл» всегда описываются как параметры- переменные.