Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование 2 семестр 1 курс.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
523.82 Кб
Скачать

Компиляция модулей .

В отличие от программы , модуль нельзя запустить на выполнение как самостоятельную программу . Модуль компилируют не зависимо от программы , которая его использует . Компилировать модуль необходимо на диск , а не в память . После компиляции модуля создается файл с расширением .tpu и именем эквивалентным имени . раs-файла , в котором находится исходный текст модуля . После компиляции модуля можно запустить программу , которая его использует , но при этом необходимо в пункте Options, Directories,unit directorec указать путь где находится tрu-файл . после каждого изменения в тексте модуля его необходимо перекомпилировать .

Существует 3 типа компиляции :

  1. Compile (alt-F9)

  2. Make (F9)

  3. Build – в меню ‘Compile’

  1. Если компилировать программу в режиме Compile , в которой подключено ряд модулей uses M1, M2 , то эти модули должны быть предварительно откомпилированы в tpu – файлы.

  2. Если компилировать основную программу в режиме Make, то компилятор проверяй наличие Tpu – файлов для каждого модуля . Если какой – либо из файлов не обнаружен, то ищется одноименный файл с расширением .раs и если файл найден , то он компилируется . Таким образом если произведены изменения в раs-файле , то независимо от того есть ли в каталоге tpu – файл или нет , система осуществляет его компиляцию перед компиляцией основной программы .

  3. В режиме Build существующие tpu – файла игнорируется и система пытается отыскать и откомпилировать соответствующие раs- файлы для каждого подключаемого к программе модуля . В этом случае можно быть уверенным , что учтены все сделаны изменения в модулях.

Подключение модулей

К основной программе модули подключаются в порядке их перечисления в директиве Uses , то есть с лева на право . В этом же порядке будут срабатываться и блоки инициализации . Блоки инициализации работают только при подключение модулей к основной программе .Если при подключение модуля к модулю , то инициализации не будет .

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

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

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

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

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

«имя модуля». «имя типа »

«имя модуля». «имя переменой »

«имя модуля». «имя подпрограммы»

Пример построения модулей .

{Модуль М1 , М1 .pas M1.tpu }

Unit M1;

Interface

Type

M_type=Boolean ;

Var

M,n:char;

Procedure add- (x1,x2:m_type; var rez :m_type);

Procedure mul_1 (x1,x2:m_type; var rez :m_type);

Procedure out_1 ( rez :m_type);

Implementation

Uses crt;

Var

J:integer;

Procedure add_;

Begin

Rez:=x1or x2;

End;

Procedure Mul_1 (x1,x2:m_type; var rez :m_type);

Begin

Rez:=x1*x2;

End;

Procedure Out _1;

Begin

Write(rez);

Readkey;

End;

Begin

M:=’a’;

N:=’$’;

j:=1;

End.

{Модуль М2 , М2 .pas M2.tpu }

Unit M2;

Interface

Type

M_type=real ;

Var

M,n:byte;

Procedure add- (x1,x2:m_type; var rez :m_type);

Procedure mul_2 (x1,x2:m_type; var rez :m_type);

Implementation

Uses crt;

Var

J:integer;

Procedure Out _1(rez:m_type);

Begin

Write(rez:4:2);

Readkey;

End;

Procedure add_;

Begin

Rez:=x1+x2;

Out_2(rez) ;

End;

Procedure Mul_2;

Begin

Rez:=x1*x2;

Out_2(rez);

End;

Begin

M:=22;

N:=1;

J:=2;

{При запуске программы перед выполнением её оперативного блока выполняются блоки инициализации сначала М2, М1 , где присваивается переменным значения m,n,j}

End.

{основная программы М12.pas V12.exe }

Uses M2 ,M1;

Var

C:m_type; из М1 Boolean

C1:M2.M_type ; из М2 Real

M:Boolean; переписывает м в М1и М2

Begin

M:=true ;

Write (n); ‘$’ из М1

Write(M2.n); 1 из М2

Write(m); True из основной программы

Write(m1.m ); ‘а’ из М1

Add_ (false,false,c); из М1

Out_1(c) ; false

M2.add_(2,2,c1); из М2 4.00

Mul_1 (true ,false,c); из М1

M1.out_1(c); False из М1

Mul_2(2,3,c1); 6.00 изМ2

{недопустимые}

Write(j); - неизвестный идентификатор

Out_2(c1); - неизвестный индекс

Add_(false , true,c1); несовместимость типов

End.

Модули М1 и М2 имеют одноименный библиотечный тип M_type, переменные m,n , процедуру Add_ . Переменная J- локальная . В модуле М2 локальной является процедура Out_2 , которая недоступна в основной программе