Osnovy_informatiki_-_8_Podprogrammy_i_moduli
.pdfМодуль – единица компиляции
Модуль – определяет пространство имен объявленных в секции интерфейса
В случае конфликта имен, необходимо разрешение области видимости через указание имени модуля (имени пространства имен)
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 |
Чердынцева М.И., мехмат ЮФУ |