База данных на языке Turbo PaskalРефераты >> Программирование и компьютеры >> База данных на языке Turbo Paskal
end;
Procedure AddC (x, у : complex; var z : complex);
Implementation
Procedure AddC;
begin
z.re := x.re +Y.re;
z.im := x.im +y.im
end;
end.
Локальные переменные и константы, а также все программные коды, порожденные при компиляции модуля, помещаются в общий сегмент памяти.
3.5. ИНИЦИИРУЮЩАЯ ЧАСТЬ
Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом BEGIN или быть пустой - тогда за BEGIN сразу следует признак конца модуля (слово END и следующая за ним точка).
В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы. Например, в них могут инициироваться переменные, открываться нужные файлы, устанавливаться связи с другими ПК по коммуникационным каналам и т.п.:
Unit FileText;
Interface
Procedure Print(s : string);
Implementation
var
f: text; const
name = 'output.txt'; Procedure Print;
begin
WriteLn(f, s)
end;
{ Начало инициирующей части: }
begin
assign(f, name);
rewrite(f);
{ Конец инициирующей части }
end.
Не рекомендуется делать инициирующую часть пустой, лучше ее опустить: пустая часть содержит пустой оператор, которому будет передано управление при запуске программы. Это часто вызывает проблемы при разработке оверлейных программ (см. гл.11).
3.6. КОМПИЛЯЦИЯ МОДУЛЕЙ
В среде Турбо Паскаля имеются средства, управляющие способом компиляции модулей и облегчающие разработку крупных программных проектов. В частности, определены три режима компиляции: COMPILE, MAKE и BUILD (см. прил.1). Режимы отличаются только способом связи компилируемого модуля или основной программы с другими модулями, объявленными в предложении USES,
При компиляции модуля или основной программы в режиме COMPILE все упоминающиеся в предложении USES модули должны быть предварительно откомпилированы и
результаты компиляции помещены в одноименные файлы с расширением TPU. Например, если в программе (модуле) имеется предложение
Uses Global;
то на диске в каталоге, объявленном опцией UNIT DIRECTORIES (см. прил.1), уже должен находиться файл GLOBAL.TPU. Файл с расширением TPU (от англ. Turbo Pascal Unit) создается автоматически в результате компиляции модуля (если основная программа может компилироваться без создания исполняемого ЕХЕ-файла, то компиляция модуля всегда приводит к созданию TPU-файла).
В режиме МАКЕ компилятор проверяет наличие TPU-файлов для каждого объявленного модуля. Если какой-либо из файлов не обнаружен, система пытается отыскать одноименный файл с расширением PAS, т.е. файл с исходным текстом модуля, и, если искомый файл найден, приступает к его компиляции. Кроме того, в этом режиме система следит за возможными изменениями исходного текста любого используемого модуля. Если в PAS-файл (исходный текст модуля) внесены какие-либо изменения, то независимо от того, есть ли уже в каталоге соответствующий TPU-файл или нет, система осуществляет его компиляцию перед компиляцией основной программы. Более того, если изменения внесены в интерфейсную часть модуля, то будут перекомпилированы также и все другие модули, обращающиеся к нему. Режим МАКЕ, таким образом, существенно облегчает процесс разработки крупных программ с множеством модулей: программист избавляется от необходимости следить за соответствием существующих TPU-файлов их исходному тексту, так как система делает это автоматически.
В режиме BUILD существующие TPU-файлы игнорируются, и система пытается отыскать (и компилировать) соответствующий РAS-файл для каждого объявленного в предложении USES модуля. После компиляции в режиме BUILD программист может быть уверен в том, что учтены все сделанные им изменения в любом из модулей.
Подключение модулей к основной программе и их возможная компиляция осуществляются в порядке их объявления в предложении USES. При переходе к очередному модулю система предварительно отыскивает все модули, на которые он ссылается. Ссылки модулей друг на друга могут образовывать древовидную структуру любой сложности, однако запрещается явное или косвенное обращение модуля к самому себе. Например, недопустимы следующие объявления:
Unit A; Unit В;
Interface Interface
Uses В; Uses А;
. .
Implementation Implementation
. .
end. end.
Это ограничение можно обойти, если «спрятать» предложение USES в исполняемые части зависимых модулей:
Unit A; Unit В;
Interface Interface
. .
Implementation Implementation
Uses B; Uses A;
.
end. end.
Дело в том, что Турбо Паскаль разрешает ссылки на частично откомпилированные модули, что приблизительно соответствует опережающему описанию подпрограммы. Если интерфейсные части любых двух модулей независимы (это непременное условие!), Турбо Паскаль сможет идентифицировать все глобальные идентификаторы в каждом из модулей, после чего откомпилирует тела модулей обычным способом.
3.7. ДОСТУП К ОБЪЯВЛЕННЫМ В МОДУЛЕ ОБЪЕКТАМ
Пусть, например, мы создаем модуль, реализующий арифметику комплексных чисел (такая арифметика ни в стандартном Паскале, ни в Турбо Паскале не предусмотрена). К сожалению, в Турбо Паскале нельзя использовать функции, значения которых имели бы структурированный тип (запись, например), поэтому арифметика комплексных чисел реализуется четырьмя процедурами:
UNIT Cmplx;
{---------------------}
INTERFACE
{---------------------}
type complex = record
re, im: real
end;
Procedure AddC(x, у: complex; var z: complex) ;
Procedure SubC(x, у: complex; var z: complex) ;
Procedure MulC(x, у: complex; var z: complex) ;
Procedure DivC(x, у: complex; var z: complex) ;
Const
с : complex =(re :0.1; im :-1);
{---------------------}
IMPLEMENTATION
{---------------------}
Procedure AddC; begin
z.re := x.re + y.re; z . im := x.im + y. im
end {AddC};
Procedure SubC;
begin
z.re := x.re - y. re ;
z.im := x.im - y.im
end {SubC};
Procedure MulC;
begin
z.re := x.re*y.re - x.im*y. im;
z.im := x.re*у.im + x.im*y.re
end {MulC};
Procedure DivC;
var
zz : real;
begin
zz := sqr(y.re) + sqr(y.im);
z. re := (x.re * y.re + x.im * y.im) / zz;
z.im := (x.re * y.im - x.im * y.re) / zz
end {DivC};
end.
Текст этого модуля следует поместить в файл CMPLX.PAS. Вы можете его откомпилировать, создав TPU-файл, после чего Вашей программе станут доступны процедуры из новой библиотеки. Например, в следующей программе (пример 1) осуществляются четыре арифметические операции над парой комплексных чисел.
Пример 1
Uses Cmplx;
var
а, Ь, с : complex;
begin
a.re := 1; a.im := 1;
b.re := 1; b.im := 2;
AddC(a, b, c);
WriteLn('Сложение: 'c.re:5:1, c.im:5:1,'i') ;
SubC(a, b, c) ;
WriteLn('Вычитание: 'с.re:5:1, с.im:5:1,'i');