Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_po_informatike_delphi+++++++.pdf
Скачиваний:
31
Добавлен:
29.02.2016
Размер:
872.19 Кб
Скачать

36

begin inc(CountPositive); Temp := Temp+A[i];

end;

if CountPositive>0 then begin

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

end else

Result := False;

end;

begin

Count1 := Mas1SG.RowCount; for i := 1 to Count1 do

Mas1[i] := StrToInt(Mas1SG.Cells[0,i-1]); Count2 := Mas2SG.RowCount;

for i := 1 to Count2 do

Mas2[i] := StrToInt(Mas2SG.Cells[0,i-1]); ResMemo.Clear;

Sum := Summa(Mas1,Count1);

ResMemo.Lines.Add('Сумма элементов первого массива: '+ IntToStr(Sum));

Sum := Summa(Mas2,Count2);

ResMemo.Lines.Add('Сумма элементов второго массива: '+ IntToStr(Sum));

if AveragePositive(Mas1,Count1,Average) then ResMemo.Lines.Add('Среднее из положительных элементов

первого массива: '+FloatToStr(Average))

else

ResMemo.Lines.Add('В первом массиве положительных элементов нет');

if AveragePositive(Mas2,Count2,Average) then ResMemo.Lines.Add('Среднее из положительных элементов

второго массива: '+FloatToStr(Average))

else

ResMemo.Lines.Add('Во втором массиве положительных элементов нет');

end;

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

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

Общим правилом для определения доступности идентификаторов является следующее: доступны всегда идентификаторы, расположенные выше по

37

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

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

unit Main; interface

...

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}

38

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; 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}

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

2.19 Модули

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

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

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

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

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

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

[begin

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

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

39

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

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

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

Примечание: в среде 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);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]