Reklama

Графічний модуль в Turbo Pascal

Модуль не являє собою програми, що виконується, а тільки містить набір засобів для використання в файлу програми: типи даних, змінні, процедури і функції. Вихідний текст модуля має розширення .pas. Модуль компілюється окремо від основної програми, відкомпільований модуль має розширення .tpu (Turbo Pascal Unit). Готовий відкомпільований модуль може бути використаний в основній програмі за допомогою пропозиції uses, який записується відразу ж після імені програми.

У Турбо Паскаля є стандартні модулі : DOS, CRT (Cathode Ray Tube, электронно-променева трубка), Printer, Graph, System та інші. Їх не треба описувати, а можна відразу включати в програму пропозицією uses. Модуль System використовується у всіх програмах, тому для нього зроблено виняток, його можна не включати до пропозицію uses, він буде підключений автоматично. Інші модулі вимагають включення до пропозицію uses, якщо у програмі використовуються ресурси модуля, наприклад, процедури і функції.

Призначення стандартних модулів наступне. Модуль DOS використовує системні ресурси операційної системи MS-DOS . Можливе використання регістрів, обслуговування переривань, виклик інших програм з програми на Паскале. Модуль CRT використовується для обслуговування відеомонітора, клавіатури, вбудованого динаміка. Процедури очищення екрану clrscr і очікування натискання клавіші readkey містяться саме в модулі CRT.

Модуль Graph містить багатий набір графічних процедур і функцій: проведення ліній, робота з кольором, виклик графічних примітивів, робота з текстом в графічному режимі, зафарбування замкнутих областей і т.п. Екран в графічному режимі розглядається як набір пікселів. Модуль Printer служить для виведення інформації на принтер.

Крім стандартних модулів, в Турбо Паскаля можливі модулі користувача, Вони вимагають описания, яке починається ключовим словом мови unit і містять 3 розділу: розділ інтерфейсу (interface), розділ реалізації (implementation), розділ ініціалізації (необов’язковий).

Після введення модулів Турбо Паскаль став одним з найбільш поширених мов професійного програмування. За допомогою модулів виявилося можливим виконувати великі роботи колективом програмістів, розбивши завдання на окремі частини, кожна з яких розробляється одним програмістом.

За рахунок паралельної роботи багатьох програмістів термін розробки скорочується у багато разів. Керівник проекту розподіляє роботу і забезпечує стиковку окремих модулів в єдине ціле. При цьому кожен програміст може користуватися своїми ідентифікаторами, незалежно від інших. Збіг ідентифікаторів в різних модулях не впливає на програму, оскільки кожен ідентифікатор використовується в своєму модулі.

Розглянемо приклад модуля для роботи з комплексними числами. Комплексне число складається з двох дійсних чисел, дійсної та уявної частини відповідно. Нехай є два комплексні числа x та y: x=a+bi; y=c+di. Тут i квадратний корінь з мінус одиниці (уявна одиниця), причому i2= - 1. Якщо комплексне число z=e+fi, і z є результат операції над x і y, то

z=x+y; e=a+c: f=b+d; (складання)
z=x-y; e=a-c: f=b-d; (віднімання)
z=x*y; e=a*c-b*d: f=a*d+b*c; (множення)
z=x/y; e=(a*c+b*d)/(c2+d2): f=(c*b-a*d)/(c2+d2): (поділ)
Легко бачити, що при додаванні і відніманні складаються і віднімаються відповідно дійсні і уявні частини комплексних чисел, множення і ділення більш складні.

Для організації операцій над комплексними числами представимо кожне комплексне число у вигляді запису з двох полів речового типу: Re-дійсна частина, Im - уявна частина. Створимо модуль complex, в якому опишемо комплексний тип com з двома полями. У цьому ж модулі в розділі інтерфейсу опишемо процедури ad (складання), su (віднімання), mu (множення), di (поділ) комплексних чисел (тільки заголовки). Тіла процедур помістимо в розділ реалізації модуля. Розділ ініціалізації має вигляд:

begin
оператори
end.
Якщо розділ ініціалізації не містить операторів, як у нашому прикладі, досить написати end. Приклад модуля complex.pas.

unit complex;{модуль арифметики комплексних чисел}
${N+}
interface
uses dos,crt;
type=com record
re,im:real;
end;
var a,b,c:com;
procedure ad(var a,b,c:com);{складання, c=a+b}
procedure su(var a,b,c:com);{віднімання, c=a-b}
procedure mu(var a,b,c:com);{множення, c=a*b}
procedure di(var a,b,c:com);{поділ, c=a/b випадок, b =0 не передбачений }
procedure wr_com(var p:com); {друк комплексного числа}
implementation
procedure ad(var a,b,c:com);
begin c.re:=a.re+b.re;
c.im:=a.im+b.im;
end;{ad}
procedure su(var a,b,c:com);
begin c.re:=a.re-b.re;
c.im:=a.im-b.im;
end;{su}
procedure mu(var a,b,c:com);
begin c.re:=a.re*b.re-a.im*b.im;
c.im:=a.re*b.im+a.im*b.re;
end;{mu}
procedure di(var a,b,c:com);
var d:real;
begin d:=b.re*b.re+b.im*b.im;
c.re:=(a.re*b.re+a.im*b.im)/d;
c.im:=(b.re*a.im-a.re*b.im)/d;
end;{di}
procedure wr_com(var p:com);
begin
if p.im<0 then writeln(p.re:9:5,”-”,-p.im:9:5,”i”) else
writeln(p.re:9:5,”+”,p.im:9:5,”i”);
end;{wr_com}
begin
end.{unit}

Як вже було зазначено, модуль не може безпосередньо виконуватися. Потрібно розробити основну програму, яка використовує ресурси модуля. В даному випадку це програма com_arif.pas (комплексна арифметика). У програмі вводяться 2 комплексні числа, потім з ними виконуються дії додавання, віднімання, множення та ділення, результати виводяться на екран.

program com_arif;
uses complex;
var x,y,z:com; {тип com визначений у модулі complex}
begin
writeln(“Уведіть дейст. і багато частині першого числа”);
(readx.re,x.im);
writeln(“Уведіть дейст. і багато частині другого числа”);
read(y.re,y.im);
write(“x=”); wr_com(x);
write(“y=”); wr_com(y);
ad(x,y,z); {z=x+y}
write(“x+y=”);wr_com(z);
su(x,y,z); {z=x-y}
write(“x-y=”);wr_com(z);
mu(x,y,z); {z=x*y}
write(“x*y=”);wr_com(z);
di(x,y,z); {z=x/y}
write(“x/y=”);wr_com(z);
end.

Reklama