Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Osnovy_informatiki_-_8_Podprogrammy_i_moduli

.pdf
Скачиваний:
11
Добавлен:
13.02.2015
Размер:
168.67 Кб
Скачать

Модуль – единица компиляции

Модуль – определяет пространство имен объявленных в секции интерфейса

В случае конфликта имен, необходимо разрешение области видимости через указание имени модуля (имени пространства имен)

21

10.11.2012

Чердынцева М.И., мехмат ЮФУ

unit MyA;

unit MyB;

procedure p;

procedure p;

begin

begin

writeln('MyA.p');

writeln('MyB.p');

end;

end;

begin

begin

end.

end.

22

10.11.2012

Чердынцева М.И., мехмат ЮФУ

// Алгоритм поиска имен в модулях

uses MyA,MyB; // Имена вначале ищутся в основной программе, а затем в модулях в порядке справа налево

begin

p; // Вызывается MyB.p

MyA.p; // Если надо вызвать MyA.p, следует использовать имя p, уточненное именем модуля

end.

23

10.11.2012

Чердынцева М.И., мехмат ЮФУ

Все стандартные имена (Pi, sin) считаются принадлежащими модулю System, который неявно подключается к любой программе.

var sin: real;

begin sin:=System.sin(Pi);

end.

24

10.11.2012

Чердынцева М.И., мехмат ЮФУ

Процедурный тип

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

type PROC1 = procedure (a, b, c: real; var d: real); PROC2 = procedure;

FUNC1 = function : real; FUNC2 = function (x: real):real;

25

10.11.2012

Чердынцева М.И., мехмат ЮФУ

Процедурный тип

Введенный процедурный тип может быть использован при описании формальных параметров подпрограмм

procedure MENU (x, y: integer; SHOW: PROC2); function SUMMA (EPS: real; F: FUNC2);

26

10.11.2012

Чердынцева М.И., мехмат ЮФУ

Процедурный тип

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

procedure PRINT; {соответствуют типу PROC2} procedure LINE;

Возможные вызовы

MENU(10, 20, LINE);

MENU(15, 20, PRINT);

27

10.11.2012

Чердынцева М.И., мехмат ЮФУ

Пример. Табулирование функций

type func=function(x: real): real; {тип табулируемой функции} var a, b, h: real ;

{ следующие две функции соответствуют типу func и будут

использованы в качестве фактических параметров при вызове

процедуры табулирования } function F(x: real): real;

begin F:=exp(x)*sin(x)

end;

function G(x: real): real; begin

G:=cos(x)

end;

28

10.11.2012

Чердынцева М.И., мехмат ЮФУ

Пример. Табулирование функций

procedure Tabulir (a, b, h: real; F: func); var x: real;

begin

writeln('Таблица значений функции на отрезке');

writeln('-------------------------------

 

 

');

writeln('|

X

| F(x)

|');

writeln('-------------------------------

 

 

');

x:=a;

 

 

 

while (x<=b+h/3) do begin writeln('|',x:14:5,'|',f(x):14:5,'|');

x:=x+h

 

 

end;

 

 

writeln('-------------------------------

')

 

end;

 

 

29

10.11.2012

Чердынцева М.И., мехмат ЮФУ

Пример. Табулирование функций

begin

writeln('Введите отрезок и шаг табулирования ’,

'для первой функции'); readln (a, b, h);

Tabulir(a, b, h, F);

writeln('Введите отрезок и шаг табулирования ’,

'для второй функции'); readln(a, b, h);

Tabulir(a, b, h, G)

end.

30

10.11.2012

Чердынцева М.И., мехмат ЮФУ