Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 70


Рис. 6.5

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

FUNCTION ИмяФункции( Список параметров ) :

ИмяСкалярногоТипаЗначенияФункций;

Что и как может возвращать функция при ее вызове, мы рассмотрим чуть позже.

Нетрудно заметить, что структура подпрограмм копирует структуру программы в целом (не считая заголовка и завершающей точки с запятой вместо точки после END). Порядок следования разделов описаний подчиняется тем же правилам, по которым строится вся программа.

6.9.1. Параметры. Глобальные и локальные описания


Поскольку процедуры и функции должны обладать определенной независимостью в смысле использования переменных (а также типов и констант), при их введении в программу возникает разделение данных и их типов на глобальные и локальные. Глобальные константы, типы, переменные — это те, которые объявлены в программе вне процедур или функций. Наоборот, локальные — это константы, типы и переменные, существующие только внутри процедур или функций, и объявленные либо в списке параметров (только переменные), либо в разделах CONST, TYPE, VAR внутри процедуры или функции.

- 108 -

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


PROGRAM Main;

| VAR

| > Xmain, Ymain : LongInt; {глобальные переменные}

| > Res : Real;

| PROCEDURE Proc1( a,b : Word; VAR Result : Real );

| VAR

| >Res : Real; { локальная Res, закрывающая глобальную }

| BEGIN

| > Res := a*a + b*b; { локальные действия }

| > Result:= Xmain+Ymain*Res; {работают глобальные значения}

| > Xmain := Xmain+1; { модифицируется глобальное значение}

| END;

TYPE

CONST Другие глобальные объявления, уже

VAR недоступные из процедуры Proc1;

BEGIN

> Основной блок, в котором может вызываться Proc1

END.


Рис. 6.6

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

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