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

Лекція №14. . Модулі. DDL-бібліотеки.

Використання оверлеїв при використанні процедур та модулів. TURBO PASCAL 7.0. DDL-бібліотеки.

Механізм оверлейних модулів.

При створені великих програмних продуктів оперативної пам’яті не достатньо, щоб розмістити всі модулі. Тому в Turbo Pascal використовується механізм оверлейних модулів – таких, що потенційно перекривають один одного в памяті.

На етапі виконання основна програма та неоверлейні модулі постійно зберігаються в пам’яті, а оверлеї заносяться в спеціальну відведену ділянку пам’яті (оверлейний буфер). Вони записуються у вільну ділянку буферу до тих пір, поки дозволяють його розміри. Якщо вільного місця в буфері нема, то модуль записується поверх іншого оверлея. При цьому працює механізм підрахунку кількості звертань до оверлея. Тому наступний оверлей записується не на випадкове місце, а на той оверлей, до якого довгий час не було звертань.

Розміри оверлейного буферу визначаються розміром самого великого оверлею. Але є можливість змінити розмір оверлейного буферу за допомогою процедури

OvrSetBuf(розмір в байтах);

Розмір оверлейного буферу збільшується за рахунок динамічної пам’яті, тому вказану процедуру треба використати до звертання до динамічної пам’яті. В противному випадку можна загубити покажчик початку динамічної пам’яті Heap.

Стандартні модулі оверлейними не можуть бути, крім Dos та Windos. Стандартний модуль Overlay виконує функції монітору оверлеїв, який раціональним чином організує завантаження оверлеїв в пам’ять. Тому перед переліком оверлейних модулів в специфікації Uses треба вказати Overlay.

Трансляція програми з оверлейними модулями виконується на диск. (Compile/Destination/Disk). При цьому створюється ovr-файл з таким же ім’ям, як і exe-фай, але з розширенням .ovr. В нього заносяться всі оверлеї, як у сховище. В основній програмі його необхідно відкривати до використання оверлеїв за допомогою процедури

OvrInit(‘ім’я_ов_файлу.ovr’);

В програмі для кожного оверлея треба вказати директиву компілятора {$O ім’я_оверлея}. В текстах оверлеїв зразу після заголовку модуля треба дати директиву {$F+, O+}, в інших модулях та програмі вказують {$F+}.

З кожного оверлея можна звертатися до будь-якого блоку, що вказаний в інтерфейсній частині іншого оверлея. Але такі взаємні пересилки ведуть до збільшення частоти передач оверлеїв з диску в пам’ять, якщо розмір оверлейного буферу був взятий по мінімуму.

Приклад 9.6. Обчислення параметрів трикутника з використанням оверлейних модулів.

Спочатку складемо оверлейний модуль, який обчислює периметр, площу трикутника та радіус вписаного і описаного кола.

Unit TRAB;

{$F+,O+}

interface

procedure TRA(a,b,c: real; var p, s, rv, ro: real);

procedure TRB(xa, ya, xb, yb, xc, yc: real; var p, s, rv, ro: real);

implementation

procedure TRAA;

begin

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

s:= sqrt (p*(p-a)*(p-b)*(p-c));

rv:= s/p;

ro:= a*b*c/(4*s);

p:=2*p;

end;

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

begin

r:= sqrt (sqr(x1 – x2) + sqr( y1- y2));

end;

procedure TRB;

var a,b,c: real;

begin

a:= r(xa, ya, xb, yb);

b:= r(xa, ya, xb, yb);

c:= r(xa, ya, xb, yb);

tra(a,b,c,p,s,rv,ro);

end.

Модуль, який обчислює параметри трикутника за теоремами синусу та косинусу:

Unit TRCD;

{$F+,O+};

interface

Uses trab;

procedure TRC(a, b, kut: real; var p, s, rv, ro: real);

procedure TRD( a, kut1, kut2 : real; var p, s, rv, ro: real);

implementation

procedure TRC;

var c: real;

begin

c:= sqrt(sqr(a)+ sqr(b) –2*a*b*cos(kut));

tra(a,b,c,p,s,rv,ro);

end;

procedure TRD;

var b, c, d: real;

begin

d:= sin(pi – kut1 – kut2);

b:=a* sin(kut1)/d;

c:=a* sin(kut2)/d;

tra(a,b,c,p,s,rv,ro);

end;

end.

Основна програма:

Prograam TRE;

{$F+}

uses overlay, traab, traac;

{$O TRAB}

{$O TRCD}

var a,b,c,xa, ya, xb, yb, xc, yc, k1, k2, p, s, rv, ro:real;

begin

OvrInit(‘tre.ovr’);

readln(a, b, c);

tra(a,b,c,p,s,rv,ro);

writeln( ‘p=’,p, ‘s=’,s,’rv=’,rv, ‘ro=’,ro);

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

trb(xa, ya, xb, yb, xc, yc, p, s, rv, ro);

writeln( ‘p=’,p, ‘s=’,s,’rv=’,rv, ‘ro=’,ro);

readln(aa, b, k1);

trc(a, b, k1,p, s, rv, ro);

writeln( ‘p=’,p, ‘s=’,s,’rv=’,rv, ‘ro=’,ro);

readln(a, k1, k2);

trd(, k1, k2, p, s, rv, ro);

writeln( ‘p=’,p, ‘s=’,s,’rv=’,rv, ‘ro=’,ro);

end.

Контрольні запитання.

  1. Як використовувати оверлейний механізм?

Соседние файлы в папке конспект лекцій 1 паск