Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прогр.на_ЯВУ_уч.пос.DOC
Скачиваний:
20
Добавлен:
01.07.2025
Размер:
2.42 Mб
Скачать

Бестиповые параметры

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

Var <имя1>, …

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

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

A := x+SumSqr(5.3,c+d);

§5.2. Процедуры

Описание процедур похоже на описание функций. Более того, функции есть разновидность процедур с возвращаемым результатом, который используется в выражении. Функции просто применяют для упрощения составления программ, в машинном языке присутствуют только процедуры. Описание процедуры имеет вид:

Procedure <имя>[(<список параметров>)];

[<описания>;]

<операторы>

End;

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

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

  2. Обращение осуществляется не в выражении, а отдельной строкой, – оператором обращения к процедуре, – с указанием имени и списка фактических параметров. Например, операторы ввода-вывода имеют полное название «операторы обращения к процедурам ввода или вывода». Правда, они составлены с использованием объектно-ориентированного программирования, поэтому первый пункт правил использования подпрограмм к ним не относится.

Правила использования подпрограмм

  1. В заголовке подпрограммы и при обращении к ней аргументы должны совпадать по типу, количеству и порядку следования.

  2. В подпрограммах допускается наличие вложенных подпрограмм, количество вложений не ограничено.

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

  4. Работа процедуры или функции завершается после выполнения последнего оператора ее тела. Язык Турбо-Паскаль содержит дополнительное средство прерывания выполнения подпрограммы или программы в целом, это системная процедура Exit. Она возвращает управление в точку вызова. Данная процедура является избыточной и предназначена только для устранения безусловного перехода на конец подпрограммы или программы в целом, поэтому, при наличии нескольких вариантов, лучше обходиться без нее. Так, использование второго варианта подпрограммы более предпочтительно.

Procedure P(x,y:real; Var Res:real);

Begin

If x<y Then Exit;

Res:=Sqrt(x*x-y*y)

End;

Procedure P(x,y:real; Var Res:real);

Begin

If x>=y Then Res:=Sqrt(x*x-y*y)

End;