Модулі Модуль і його структура
Модуль - це сукупність сталих, типів даних, змінних, процедур і функцій, які можна використати у програмі або в іншому модулі. Сам модуль не є виконуваною програмою. Модульний підхід до проектування дає змогу розділити програму на частини, які компілюють окремо. Модулі можна створювати самостійно, а також використовувати стандартні, що їх надає Турбо Паскаль.
Структура модуля має такий вигляд:
unit <ім'я>
interface
uses <список модулів>
{відкриті оголошення}
implementation
uses <список модулів>
{власні оголошення}
{реалізація процедур і функцій}
begin
{коди ініціалізації}
end
Модуль починається зі слова unit, яке разом з іменем є заголовком модуля. Наступне службове слово interface означає початок секції інтерфейсу модуля, доступного для всіх інших модулів і програм, які використовують цей модуль. В інтерфейсі модуля можуть бути оголошені сталі, типи даних, змінні, процедури і функції. Будь-яка програма, що застосовує цей модуль, має доступ до всіх елементів, оголошених у його інтерфейсі. Щодо процедур і функцій, то в секції інтерфейсу зазначені тільки їхні заголовки, а самі оператори, що реалізують їх, описані в наступній секції реалізації.
Секція інтерфейсу закінчується словом implementation, яке одночасно розпочинає секцію реалізації. Все, що описане в І секції інтерфейсу, є доступним секції реалізації. Крім цього, в секції реалізації можуть бути свої описи, уже недоступні програмам, що використовують цей модуль. Ці описи використовують процедури і функції, зазначені у секції інтерфейсу. Ці процедури і функції повторно описують в секції реалізації, їхній заголовок може бути такий же, як у секції інтерфейсу, або мати коротку форму, що містить слово procedure (function), після якого йде ім'я без зазначення параметрів і типу. Підпрограми секції реалізації, не описані в секції інтерфейсу, повинні мати повний заголовок.
Слово uses можна застосовувати як у секції інтерфейсу, так і в секції реалізації. В першому випадку його записують відразу після слова interface і воно означає те, що сталі, типи даних і змінні, оголошені в інтерфейсі модулів, імена яких пелічені після слова uses, можна використати в будь-якому оголошенні в інтерфейсі цього модуля. В другому випадку слово uses записують відразу після слова implementation і воно означає те, що сталі, типи даних і змінні, оголошені в інтерфейсі перелічених після uses модулів, доступні тільки в секції реалізації цього модуля.
Секція реалізації розміщена між словами implementation і end. Якщо ж перед end є слово begin і деякі оператори, то одержаний складений оператор стає секцією ініціалізації модуля. В цій секції відбувається ініціалізація структур даних, що їх використовує модуль або які доступні програмам, що застосовують цей модуль. Також тут відкриваються файли, які використовуються в програмах. Під час виконання програми секцію ініціалізації викликає тіло програми, що застосовує модуль. Якщо ж у програмі є декілька модулів, то спочатку будуть викликані секції ініціалізації всіх модулів, а потім послідовно виконуються оператори з тіла програми.
Відтрансльовані модулі зберігаються в спеціальному двійковому форматі, стандартні - у файлі TURBO.TPL (вони автоматично завантажуються в пам'ять разом з Турбо Паскалем).
Для використання модулів треба, щоб після заголовка програми було речення uses, а далі зазначений список імен усіх модулів, що їх використовує програма. Наприклад:
program PRG;
uses MOD1, MOD2, MODS;
Імена модулів розділяють комами, вони можуть бути оголошені в будь-якому порядку. Якщо ж речення uses нема, то Турбо Паскаль приєднує стандартний модуль System, який забезпечує виконання стандартних підпрограм (процедур і функцій).
Наведемо приклад використання модулів і посилання на елементи, оголошені в модулі. Нехай є модуль
unit MODL;
interface
const
MV=75;
type
MS=(A,B,C);
var
MW: string[30];
procedure SMW(s: MS);
function ТА: integer;
implementation
...............................
end.
Наведена нижче програма використовує елементи, оголошені в секції interface цього модуля:
program TS;
uses MODL;
const
MV=12;
type
TP=1..30;
var
i: integer;
AS: MS;
function ТА: ТР;
begin
TA:=-1;
end;
begin
AS:=A;
SMW(AS);
writeln(MODL.MV);
writeln(MV);
I:=TA;
writeln(l);
end.
У програмі деякі індентифікатори, оголошені у використовуваному нею модулі, можна перевизначити (MV, ТА). Під час виконання програма застосовує свої власні описи, оскільки вони зроблені пізніше, ніж у модулі. Якщо ж треба використати . оголошення ідентифікатора з модуля, то для цього перед ідентифікатором зазначають ім'я модуля з крапкою. В нашому прикладі в програмі TS для функції ТА використано її опис у самій програмі, тоді як для сталої MV має сенс її визначення, оголошене в секторі інтерфейсу модуля MODUL.
Може трапитися, що описи перетинаються в модулях, які використовує програма чи модуль. Тоді дійсні ті описи (видимі), які містяться в інтерфейсній частині модуля, зазначеного пізніше в списку uses цієї програми чи модуля.
В Турбо Паскалі можна робити рекурсивні посилання модулів. У секції реалізації кожного з двох модулів може бути звертання до процедури, оголошеної в секції реалізації іншого з цих двох модулів. Для забезпечення такої можливості потрібно в реченні uses секції реалізації кожного модуля зазначити ім'я іншого модуля, на який є посилання.
Приклад програми опрацювання матриць (множення матриць, додавання вектора до рядка матриці):
unit MODI;
interface
const
М=100;
t=2;
type
VECT=array [1..M] of integer,
TABL=array [1..M, 1..M] of integer;
var
i,j,r: integer;
procedure MULT(var A,B,C: TABL; m,n,k: integer);
procedure ADD(var A: TABL; var Q: VECT; m,n: integer);
implementation
procedure MULT;
{Множення матриць}
begin
for i:=1 to m do
for j:=1 to k do
begin
C[i,j]:=0;
for r:=1 to n do C[I,j]:=C[I,j]+A[I,r]*B[r,j]
end
end;
procedure ADD;
{Додавання вектора до 1-го рядка матриці}
begin
for i:=1 to n do A[l,i]:=A[l,i]+Q[i];
end
end.
unit MOD2;
interface
uses MOD1 ;
procedure VVD(var A: TABL; m,n: integer);
procedure VYV(var A: TABL; m,n: integer);
implementation
procedure VVD;
{Уведення матриці}
begin
for i:=1 to m do
for j:=1 to n do read(A[i,j])
end; {ofVV}
procedure VYV;
{Виведення матриці}
begin
for i:=1 to m do
begin
for j:=1 to n do write(A[i,j]);
writeln
end;
end; {of VYV}
end. {of MOD2}
program MATR(input.output);
uses MOD1,MOD2;
{Опрацювання матриць}
var
A1,B1,C1:TABL;
P: VECT;
m1,n1,k1: integer;
t,i: integer;
begin
VVD(A1,m1,n1);
VVD(B1,n1,k1);
MULT(A1,B1,C1,m1,n1,k1);
VYV(C1,m1,k1);
for i:=1 to n1 do read(P[i]);
read(t);
ADD(A1,P,t,n1);
{Якщо в ADD замість t записати MODl.t, то відповідний ідентифікатор t буде переданий з модуля MOD1}
VYV(C1,m1,n1)
end.
- Інформація та інформаційні процеси Поняття інформації.
- Одиниці вимірювання інформації.
- Подання інформації та типи комп'ютерів.
- Способи пересилання інформації.
- Будова комп'ютера
- Пристрої введення-виведення інформації.
- Процесор
- Принципи функціонування комп'ютера Фізичні принципи
- Програмний принцип
- Поняття про середовища програмування
- Загальна характеристика мови паскаль
- Поняття інтегрованого середовища
- Команда New
- Команда Open
- Основи алгоритмізації Алгоритми та їх властивості
- Блок-схеми
- Загальна характеристика Паскаль-програми
- Структура Паскаль-програми
- Елементи мови Паскаль
- Прості типи даних
- Стандартні типи даних
- Дійсний тип
- Логічний тип
- Символьний тип
- Конструйовані типи
- Перелічуваний тип
- Оператори надання значень змінним Оператор присвоєння
- Уведення-виведення
- Порядок виконання операцій
- Складений оператор
- Стиль запису програми
- Структури керування
- Структура послідовного виконання
- Структура розгалуження
- Умовний оператор
- Оператор варіанта
- Оператор безумовного переходу
- Структура повторення
- Цикл з параметром
- Цикл з передумовою
- Цикл з післяумовою
- Ітераційні цикли
- Обчислення суми знакозмінного ряду із заданою точністю
- Процедури і функції
- Процедури з параметрами. Параметри-значення
- Одномірні масиви
- Поняття масиву. Одномірний масив та його опис в програмі
- Обчислення скалярного добутку двох векторів
- Знаходження найбільшого (найменшого) значень серед елементів масиву
- Обчислення суми та добутку елементів масиву
- Перетворення масиву по заданому закону
- Впорядкування одномірних масивів
- Впорядкування шляхом вибору
- Впорядкування обмінами
- Впорядкування вставками
- Зливання впорядкованих масивів
- Двомірні масиви Поняття двомірного масиву та його опис у програмі
- Ввід та вивід значень елементів двомірного масиву Ввід значень елементів двомірного масиву
- Вивід значень елементів двомірного масиву a[m,n]
- Рядковий тип (string)
- Комбіновані типи Організація комбінованих типів у Паскалі
- Оператор приєднання
- Множинні типи Організація множин
- Файлові типи Організація файлів
- Підготовчі та завершальні операції
- Операції уведення-виведення
- Стандартні файли input і output
- Модулі Модуль і його структура
- Стандартні модулі
- Наближене знаходження коренів рівнянь Дослідження рівняння. Відокремлення коренів
- Метод поділу проміжку пополам
- Метод хорд
- Метод дотичних
- Чисельне інтегрування
- Квадратурні формули прямокутників
- Загальні формули прямокутників
- Квадратурна формула трапецій
- Практичні оцінки точності квадратурних формул. Вибір кроку інтегрування
- Список літератури