Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методички по информатике / Конспект лекций (Delphi).pdf
Скачиваний:
63
Добавлен:
27.05.2015
Размер:
1.2 Mб
Скачать

26

Average := Temp/CountPositive; Result := True;

end else

Result := False;

end;

begin

Count1 := ???;

for i := 1 to Count1 do Mas1[i] := ???;

Count2 := ???;

for i := 1 to Count2 do Mas2[i] := ???;

Sum := Summa(Mas1,Count1);

<вывод 'Сумма элементов первого массива: '+IntToStr(Sum)>; Sum := Summa(Mas2,Count2);

<вывод 'Сумма элементов второго массива: '+IntToStr(Sum)>; if AveragePositive(Mas1,Count1,Average) then

<вывод 'Среднее из положительных элементов первого массива: '+ FloatToStr(Average)>

else

<вывод 'В первом массиве положительных элементов нет'>; if AveragePositive(Mas2,Count2,Average) then

<вывод 'Среднее из положительных элементов второго массива: '+ FloatToStr(Average)>

else

<вывод 'Во втором массиве положительных элементов нет'>;

end;

1.18 Локализация имен

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

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

Рассмотрим пример:

unit Main; interface

...

27

implementation var

A,B : integer;

procedure P1; var

A,B : integer;

procedure P1_1; var

A,C : integer; begin

{Доступные переменные}

A := 1; {переменная процедуры P1_1} C := 2; {переменная процедуры P1_1} B := 3; {переменная процедуры P1}

Main.A := 4; {переменная модуля Main} Main.B := 5; {переменная модуля Main} {Недоступные переменный}

A из процедуры P1 A,D из процедуры P1_2 E,F из модуля Main

end; {P1_1}

procedure P1_2; var

A,D : integer; begin

{Доступные переменные}

A := 1; {переменная процедуры P1_2} D := 2; {переменная процедуры P1_2} B := 3; {переменная процедуры P1}

Main.A := 4; {переменная модуля Main} Main.B := 5; {переменная модуля Main} {Недоступные переменный}

A из процедуры P1 A,С из процедуры P1_1 E,F из модуля Main

end; {P1_2} begin

{Доступные переменные}

A := 1; {переменная процедуры P1} B := 2; {переменная процедуры P1}

Main.A := 3; {переменная модуля Main} Main.B := 4; {переменная модуля Main} {Недоступные переменный}

A,С из процедуры P1_1

A,D из процедуры P1_2 E,F из модуля Main

end; {P1}

var

E,F : integer;

28

begin

{Доступные переменные}

A := 1; {переменная модуля Main} B := 2; {переменная модуля Main} E := 3; {переменная модуля Main} F := 4; {переменная модуля Main} {Недоступные переменный}

A,B из процедуры P1

A,С из процедуры P1_1

A,D из процедуры P1_2 end. {модуля Main}

Таким образом, в передах видимости оказываются только переменные, описанные выше в основной программе, либо в текущей процедуре.

1.19 Модули

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

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

Каждый модуль описывается в отдельном файле. Формат модуля:

unit <идентификатор модуля>; interface

<описание типов, констант, переменных, подпрограмм> implementation

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

[begin

<раздел инициализации>] end.

<идентификатор модуля> должен совпадать с именем файла, в котором хранится данный модуль.

Все компоненты, описанные в разделе interface, являются доступными для всех программ и модулей, использующих данный модуль.

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

29

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

Примечание: в среде Delphi раздел инициализации можно начать используя ключевое слово initialization. Кроме того, после данного раздела может идти раздел завершения (ключевое слово finalization).

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

При использовании одного модуля другим, подключение модулей с использованием ключевого слова uses может производиться как в разделе interface, так и в разделе implementation. Однако не допускается взаимное подключение модулей через разделы interface. При необходимости взаимного подключения модулей, как минимум одно из подключений должно располагаться в разделе implementation. Выбор вариантов подключения производится на основе того, в каком из модулей необходим доступ к ресурсам другого модуля в разделе interface. В случае, когда обоим модулям требуется подключение в разделе interface, создается третий модуль, в который переносятся взаимно-зависимые части.

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

<идентификатор модуля>.<идентификатор компонента>

Пример:

unit Modul1; interface type

Mas : array[1..100] of integer; var

X : integer;

procedure InputMas(var A : Mas; n : integer); implementation

procedure InputMas(var A : Mas; n : integer); begin

...

end; begin

X := 1; end.

program Program1; uses Modul1;