Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник_Часть_1.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
975 Кб
Скачать
☆

12.3. Ссылки на модули

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

Если на объекты есть ссылки только из раздела реализации, предложение USES может находиться в разделе реализации.

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

Основная программа Unit A1; Unit A2;

USES A1; interface interface

. USES A2; . . . . . . .

. . . . . . . . implementation

begin implementation . . . . . . .

. . . . . . . . end

. end

end

Рис. 12.1. Ссылки на модули

Взаимные ссылки двух модулей возможны только из разделов реализации (рис. 12.2).

U nit A1; UNIT A2

. . . . . . . . . interface

. . . . . . . .

i mplementation

USES A2; implementation

. . . . . . . . . . . . USES A1

end. . . . . . . . . . . . .

Рмс. 12.2. Взаимные ссылки модулей

П р и м е р.

{Модуль hlp _ sr – вспомогательные расчёты}

Unit hlp _ sr;

interface

USES crt;

var a, b, c: real;

{глобальные переменные будут ″видны″ основной программе}

function S (x1, y1, x2, y2, x3, y3: integer): real;

{функция расчёта треугольника с заданными вершинами}

implementation

var p: real; {локальная переменная}

function r (x1, y1, x2, y2: integer): real;

{локальная функция расчёта расстояния между двумя точками}

begin

r:= SQRT(SQR(x1 - x2) + SQR(y1 - y2))

end;

function S; {можно не описывать параметры}

begin

a:= r(x1,y1,x2,y2);

b:= r(x1,y1,x3,y3);

c:= r (x3,y3,x2,y2) ;

p:= (a + b + c)/2;

S:= SQRT(p(p – a)(p – b)(p – c));

end;

end.

{Основная программа}

Program main;

USES hlp_rs;

Var

Xa, ya, xb, yb, xc, yc: integer;

S_tr: real;

begin

readln(xa, ya, xb, yb, xc, yc);

S_tr:= S;

writeln(a,b,c);{a,b,c могут быть далее использованы}

writeln (S_tr);

end.

13. Динамическая память

В любой вычислительной системе память относится к тем ресурсам, которых всегда не хватает. Управление памятью – одна из главных забот программиста, так как во время выполнения программы память необходима для следующих элементов программ и данных:

  • сама программа пользователя;

  • системные программы, которые осуществляют вспомогательные действия;

  • при выполнении программ пользователя;

  • определяемые пользователем константы и структуры данных (переменные);

  • временная память для хранения промежуточных результатов при вычислении выражений;

  • адреса возврата для подпрограмм;

  • временная память при передаче параметров;

  • буферы ввода/вывода, в которых хранятся данные между моментом их реальной физической передачи с физического устройства или на него и моментом инициации в программе операций ввода или вывода;

  • различные системные данные (например, информация о статусе устройств ввода-вывода).

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

Практика программирования часто выдвигает на передний план два конфликтующих фактора: время выполнения программы и объем занимаемой памяти. И иногда для экономии памяти приходится поступиться быстродействием. Статическое распределение памяти эффективно потому, что на управление памяти в этом случае не тратится ни время, ни память. Но рассмотрим пример. Пусть в некоторой задаче обрабатывается матрица размером 300х300 целых чисел. Тогда необходимо описание: