- •Основи програмування мовою Паскаль
- •Часть 1. Основы языка Паскаль 2
- •Часть 2. Элементы профессионального программирования на Паскалі 62
- •Частина 1. Основи мови Паскаль
- •1. Алгоритм і програма
- •1.1. Алгоритм
- •1.2. Властивості алгоритму
- •1.3. Форми запису алгоритму
- •1.4. Програма й програмне забезпечення
- •1.5. Етапи розробки програми
- •2. Дані в мові Паскаль
- •2.1 Константи
- •2.2 Змінні й типи змінних
- •3. Арифметичні вирази
- •4. Лінійний обчислювальний процес
- •4.1 Оператор присвоювання
- •4.2 Оператор уведення
- •4.3 Оператор виведення
- •4.4 Керування виводом даних
- •4.5 Вивід на друк
- •5. Структура простої програми на Паскалі
- •6. Компілятор і оболонка Turbo Pascal
- •7. Обчислювальний процес, що розгалужується, і умовний оператор
- •7.4. Короткий умовний оператор
- •If логічний_вираз then оператор1;
- •7.5. Повний умовний оператор
- •If логічний_вираз then оператор1
- •7.7. Вкладені умовні оператори
- •7.9. Приклади програм з умовним оператором
- •8. Директиви компілятора й обробка помилок уведення
- •9. Оператор циклу. Цикли із передумовою і після-умовою
- •10. Цикл із лічильником і дострокове завершення циклів
- •11. Типові алгоритми табулювання функцій, обчислення кількості, суми й добутку
- •11.1 Алгоритм табулювання
- •11.2 Алгоритм організації лічильника
- •11.3 Алгоритми нагромадження суми й добутку
- •12. Типові алгоритми пошуку максимуму й мінімуму
- •13. Розв'язок навчальних завдань на цикли
- •14. Одномірні масиви. Опис, уведення, вивід і обробка масивів на Паскалі
- •15. Розв'язок типових завдань на масиви
- •Частина 2. Елементи професійного програмування на Паскалі
- •16. Кратні цикли
- •16.1 Подвійний цикл і типові завдання на подвійний цикл
- •16.2 Оператор безумовного переходу
- •17. Матриці й типові алгоритми обробки матриць
- •18. Підпрограми
- •18.1 Процедури
- •18.2 Функції
- •18.3 Масиви як параметри підпрограми
- •18.4 Відкриті масиви
- •19. Безлічі й перечислимые типи
- •20. Обробка символьних і строкових даних
- •20.1. Робота із символами
- •20.2 Робота з рядками
- •21. Текстові файли
- •21.1 Загальні операції
- •21.2 Приклади роботи з файлами
- •21.3 Робота з параметрами командного рядка
- •22. Записи. Бінарні файли
- •23. Модулі. Створення модулів
- •23.1. Призначення й структура модулів
- •Implementation
- •23.2. Стандартні модулі Паскаля
- •24. Модуль crt і створення простих інтерфейсів
- •25. Модуль Graph і створення графіки на Паскалі
- •Додаток 1. Таблиці Ascii-Кодів символів для операційних систем dos і Windows
- •Додаток 2. Основні директиви компілятора Паскаля
- •Додаток 3. Основні повідомлення про помилки Паскаля
- •Додаток 4. Додаткові лістинги програм
- •Додаток 5. Розширені коди клавіатури
- •Ascii‑ коди
- •Розширені коди
- •Додаток 6. Правила гарного коду
- •Додаток 7. Рекомендована література
23. Модулі. Створення модулів
Застосування готових і розроблених програмістом модулів дозволяє ефективно вирішувати завдання повторного використання одного разу написаного коду.
23.1. Призначення й структура модулів
Модуляминазивають заздалегідь скомпільовані бібліотеки підпрограм, які програміст може використовувати для створення нових програм. При програмуванні на Паскалі модулі підключаються зі спеціальних бібліотечних файлів, що мають тип *.tpu (Turbo Pascal Unit). Модуль сам по собіне євиконуваною програмою, але його підпрограми використовуються іншими програмами.
Для того, щоб створити модуль, потрібно написати файл із розширенням *.pas, що дотримує описану далі структуру модуля, потім у меню Compileоболонки Паскаля встановити перемикачDestinationу значенняDisk( як ми пам'ятаємо, це ж потрібно зробити, якщо Ви збираєтеся одержати зі своєї програми на Паскалі додаток *.exe), потімзібратимодуль, вибравши в менюCompileпунктBuild. Після усунення помилок компіляції готовий модуль (файл із розширенням *.tpu) буде перебувати в папці Паскаля.
Структура модуля така (нові ключові слова виділені жирним):
unit Ім'я; {Це заголовок модуля, що йменує його. По цьому імені модуль може бути підключений із програми оператором uses}
interface {Интерфейсная частина - тут ми повідомляємо
константи, типи даних, змінні, процедури й функції.
Тіла загальних процедур і функцій перебувають у розділі реалізації.
Розділ інтерфейсу є загальним. У ньому можна визначити те, що буде
видиме й доступно для будь-якої іншої програми (або модуля),
що використовує даний модуль. В интерфейсной частини може перебувати розділ
Uses, якщо модуль підключає інші модулі. У такому випадку, слово Uses повинне
випливати відразу за словом Interface}
Implementation
{У розділі реалізації (Implementation) модуля перебувають тіла процедур і функцій,
оголошених в интерфейсной частини.
Розділ реалізації є часткам. Усі оголошення, зроблені тут можуть бути
видимі тільки усередині даного розділу модуля.
Усі константи, типи, змінні, процедури й функції, оголошені в
интерфейсной частини видимі в розділі реалізації.
У розділі реалізації можуть перебувати її власні додаткові оголошення,
невидимі будь-яким програмам, що використовують модуль.
Розділ Uses може перебувати в частині реалізації відразу після
зарезервованого слова Implementation.
Заголовок процедури/функції в розділі реалізації повинен бути ідентичний
оголошенню в розділі інтерфейсу}
begin
{звичайно "головна програма" модуля порожня. Тут можна давати початкові
значення даним модуля, відкривати використовувані їм файли, якщо такі є,
і т.п.}
end.
Для роботи з координатами крапок на площині створимо найпростіший модуль і викличемо його підпрограми його при написанні нової програми:
unit Points;
interface
type point = array [1..2] of real;
procedure put (var p:point;x,y:real);
function distance (p1,p2:point):real;
function corner (p1:point):integer;
implementation
procedure put (var p:point;x,y:real);
begin
p[1]:=x; p[2]:=y;
end;
function distance (p1,p2:point):real;
begin
distance:=sqrt(sqr(p1[1]-p2[1])+sqr(p1[2]-p2[2]));
end;
function corner (p1:point):integer;
begin
if p1[1]>0 then begin
if p1[2]>0 then corner:=1
else if p1[2]<0 then corner:=4
else corner:=0;
end
else if p1[1]<0 then begin
if p1[2]>0 then corner:=2
else if p1[2]<0 then corner:=3
else corner:=0;
end
else corner:=0;
end;
begin
end.
Наш модуль визначає тип даних Point(крапка) як масив з 2 дійсних чисел. Процедураputдозволяє задати для крапки значення x- і y-координати, функціяdistanceповертає відстань між двома крапками, а функціяcorner– номер координатної чверті, у якій перебуває крапка, або 0, якщо крапка лежить на одній з осей координат. Зрозуміло, реальні модулі можуть включати сотні функцій, якщо предметна область, яку вони моделюють, досить складна. Тепер напишемо маленьку тестову програму, що використовує наш модуль:
uses Points;
var a,b:Point;
begin
put (a,1,1);
put(b,0,0);
writeln ('Відстань від A до B=',distance(a,b):8:3);
writeln ('Номер координатної чверті для A=',corner(a));
end.
Оператор uses, що підключає модуль, зазначений у першому рядку програми. Під час компіляції цієї програми в поточному каталозі повинен бути присутнім файл points.tpu, що містить створений раніше модульPoints.
При складанні складної програми Паскаль шукає модулі тільки в тих папках, які перераховані в поле введення Unit directoriesвікнаDirectoriesверхнього менюOptions, тому всі готові модулі випливає або поміщати в одну із цих папок, або дописати в поле введення потрібні шляхи до папок. У Додатку 4 приводиться повний лістинг модуля для роботи з "мишею" із програми на Паскалі й тести для нього.