русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Модулі в Паскале

Модуль (UNIT -модуль, одиниця) - автономно (окремо) що компілюється програмна одиниця, яка містить компоненти розділу описів (міток, констант, типів змінних, процедур, функцій), а також може містити оператори ініціалізуючої частини.
пСам модуль не є програмою, а призначений для використання іншими програмами і модулями.

 

Структура модуля

Модуль має наступну структуру:
UNIT <ім'я модуля>
INTERFACE
<розділ інтерфейсний>
IMPLEMENTATION
<розділ реалізації>
BEGIN
<розділ ініціалізації>
END.

 

Заголовок модуля складається з зарезервованого слова Unit(модуль) і назви модуля.

Ім'я модуля вибирається за загальними правилами і повинно співпадати з назвою дискового файлу містить вихідний текст модуля.
Розширення імені модуля.pas ) не вказується воно задається за замовчуванням.

Ім'я модуля використовується для його зв'язку з основною програмою з допомогою пропозиції Uses.
Пропозиція Usesм.б. поміщено після заголовка модуля або за словами

Interfaceі Implementation.

 

Інтерфейсна частина - починається з ключового слова Interface (інтерфейс, зчленування, з'єднання) і містить звернення до інших модулів та оголошення (описи) глобальних об'єктів тобто міток, констант, типів змінних, і заголовків процедур і функцій які доступні основній програмі та інших модулів (тобто видимі з поза).

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

Розділ ініціалізації - полягає в словесні дужки BEGIN END.
і містить оператори, які будуть виконані до передачі управління основною програмою. Це м.б. оператори ініціалізації даних (змінних) Наприклад оператори привласнення, введення а також процедури зв'язування і відкриття файлів. Розділ операторів м.б. порожнімBEGIN END відсутніми або простоEND.
В кінці модуля ставиться крапка.

 

Компіляція та використання модулів

Оперативна пам'ять система має за сегментами структуру (один сегмент дорівнює 64К =65535 байт). Код програми м.б. не більше одного сегмента, обсяг даних не може перевищувати один сегмент (якщо не використовувати динамічну пам'ять) і для стека один сегмент. Розмір стека задається директивою {$M<>}. Мінімальний розмір стека 1К максимальний один сегмент за замовчуванням 16К. Значення локальних змінних при зверненні до підпрограмі поміщаються в стек, а при виході витягуються з стека.
Код модуля поміщається в окремий сегмент, оскільки він транслюється автономно від основної програми, а кількість модулів використовуваних програмою залежить тільки від доступною ОП. Це дозволяє створювати великі програми.
Компілятор створює код модуля з тим же ім'ям, але з розширенням tpu(turbo pascal unit Для використання модуля основною програмою або іншими модулями його ім'я (без розширення) поміщається в списку пропозиціїUses
Якщо модуль є компактним і часто м.б. використаний прикладними програмами, то його можна помістити у бібліотеку стандартних модулівTURBO.TPL (Turbo-Pasacal-library) за допомогою утилітиTPUMOVER.
Але це необхідно робити тільки в разі крайньої необхідності оскільки бібліотека завантажується в ОП і зменшує місце для програми.
При компіляції файлу з вихідним текстом модуля з'являється однойменний файл з розширенням tpu і поміщається в каталозі зазначеному опцією

 

OPTIONS/DIRECTORIES/UNIT DIRECTORIES

або в поточному каталозі при відсутності цієї опції.
При компіляції основної програми, які використовуються модулі повинні у вказаному каталозі опцією
OPTIONS/DIRECTORIES/EXE & TPU DIRECTORIES

або в поточному каталозі при відсутності цієї опції
Для отримання EXE файлу завдання в опції

COMPILE/DESTINATION/DISK(ТЕТОГІ)
встановити DISK.
Існує три режими компіляції модулів:
- COMPILE
- BUILD
- MAKE

Режими встановлюються меню COMPILE

1. Режим COMPILE (викликається Alt-F9) . При цьому компілюється програма а використовуються модулі повинні бути попередньо откомпилированы і зберігатися у відповідних каталогах.
2. Режим BUILD (викликається -F9) . При цьому ігноруються раніше відкомпільовані модулі, а шукаються модулі із розширенням pas і перекомпілюються.
3. Режим MAKE (викликаєтьсяF9) . При цьому перекомпілюється тільки модулі, які мали зміни в тексті.

 

Приклад 16.1.

У файлі inp.txt розташовані три масиву запакованих чисел

-2.1 3.1-2.4 5.6 5.4-6.7 3.5-3.6
2.3-4.3 2.1 2.5-3.7-5.6 4.6 3.5-7.5
-2.1 4.3-2.3 7.6 4.5-8.9 5.7-4.5 6.8-5.8

Знайти функцію

де Max_a, Max_b, Max_c, Sa, Sb, Sc, ka, kb, kc - максимальний елемент, сума і кількість позитивних елементів відповідних масивів a, b, c.
Результат вивести у файл out.txt і на екран.

Текст модуля

Unit UNMAS;
Interface
Const n=10;
Type vec=array[1..n] of real;
Var z :vec;
i :integer;
f1,f2 :text;
Procedure Vv(s:char; num:byte;Var z:vec);
Procedure SK1(z:vec; num:byte; Var s:real; Var k:byte);
Function MAX(z:vec; num:byte):real;

Implementation
Procedure Vv(s:char; num:byte;Var z:vec);
Begin
Writeln("Масив ",s);
For i:=1 to num do
Begin
Read(f1,z[i]); Write(z[i]:4:1," ":3);
End;
Readln(f1); Writeln;
End;

Procedure SK1(z:vec;num:byte; Var s:real; Var k:byte);
Begin
s:=0;=k:0;
for i:=1 to num do if z[i]>0 then
Begin
s:=s+z[i];
k:=k+1
End;
End;
Function MAX(z:vec;num:byte):real;
Var m :real;
Begin
m:=z[1];
for i:=1 to num do if z[i]>m then m:=z[i];
MAX:=m
End;

Begin
Assign(f1,"inp.txt"); Reset(f1);
Assign(f2,"out.txt"); Rewrite(f2)
End.

 

Текст програми

Program lr7_16;
Uses CRT,UNMAS;
Var
a,b,c :vec;
y,sa,sb,sc :real;
ka,kb,kc :byte;
Begin
clrscr;
Vv("a",8,a);
Vv("b",9,b);
Vv("c",n,c);
SK1(a,8,sa,ka);
SK1(b,9,sb,kb);
SK1(c,n,sc,kc);
y:=(MAX(a,8)+MAX(b,9)+MAX(c,n))+(sa+sb+sc+ka+kb+kc);
Writeln("Підсумок:":20);
Write ("Масив а  : ");
Writeln("sa=",sa:5:1," ka=",ka);
Write ("Масив b: ");
Writeln("sb=",sb:5:1," kb=",kb);
Write ("Масив c: ");
Writeln("sc=",sc:5:1," kc=",kc);
Writeln(" ":10,"y=",y:10);
Readln;
Writeln(f2,"ђҐ§г«мв :");
Writeln(f2," ":10,"y=",y:10);
Close(f1);
Close(f2)
End.

 

Результати роботи програми

Масив a
-2.1 3.1-2.4 5.6 5.4-6.7 3.5-3.6
Масив b
2.3-4.3 2.1 2.5-3.7-5.6 4.6 3.5-7.5
Масив c
-2.1 4.3-2.3 7.6 4.5 -8.9 5.7-4.5 6.8-5.8
Результат:
Масив а  : sa= 17.6 ka=4
Масив b: sb= 15.0 kb=5
Масив c: sc= 28.9 kc=5
y= 9.330E+01

Просмотров: 6667

Повернутися в зміст:Алгоритмічні мови





Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн