- •Структурування обчислень на рівні підзадач Блочна організація програм Принцип модульності програм
- •Поняття підпрограми
- •Принцип локалізації
- •Концепція розподілу пам’яті
- •Процедурне програмування Організація підпрограм
- •Механізм передачі параметрів
- •Різновиди підпрограм
- •Покажчики та посилання
- •Способи передачі параметрів
- •Рекурсія
- •Стандартні бібліотечні модулі.
- •Бібліотечні модулі користувача
- •Компіляція модулів
Стандартні бібліотечні модулі.
Це модулі, що поставляються разом із системою ТР. До складу бібліотеки модулів Borland Pascal входять модулі System, Dos, Crt, PrInter, Graf, тощо.
System. Містить підпрограми: файлового введення-виведення (Write, WriteLn, Read, ReadLn, ...), обробки рядків (Delete, Str, ...); керування виконанням програм (Exit, Break, Continue, Halt, ...), математичні функції (Abs, Cos, Round, ...) і т.д. Підключається до програм автоматично.
Crt. Містить засоби керування екраном у текстовому режимі (TextMode, TextColor, LowVideo, ClrScr, ...), клавіатурою (GoToXY, Where, KeyPressed, ReadKey, ...) і звуком (Sound, NoSound). У Crt визначені також константи режимів екрана, константи кольорів тощо.
-
Функція ReadKey - зчитує код символу натиснутої клавіші (#77). При необхідності очікує натискання клавіші.
Стандартна клавіатура має різні типи клавіш: символьні (букви, цифри), керуючі (функціональні, клавіші переміщення курсору, вставки, ...), управляючі. При їх натисканні виробляється т.зв. код сканування. Він може піддаватися аналізу і є основою алгоритмів керування клавіатурою.
Коди сканування символьних клавіш складаються з одного значення (#77) і тому є простими, коди керуючих клавіш складаються з двох значень (#0+#75) і вважаються розширеними. При аналізі натиснутої керуючої клавіші функція ReadKey повинна бути викликана двічі: окремо для зчитування кожного значення двосимвольного ланцюжка. Наприклад,
var Kod : char;
. . .
Kod := ReadKey;
If Kod = #0 then
begin
Kod := ReadKey;
If Kod = #75 then WriteLn (‘ Натиснута клавіша ’);
end {if}
Читання символу функцією ReadKey не супроводжується його відображенням на екрані.
-
KeyPressed - перевіряє факт натискання якої-небудь клавіші; повертає значення true, якщо клавіша була натиснута, і false - у противному випадку.
Наприклад,
i := 0;
repeat
i := i+1;
until KeyPressed;
WriteLn (‘ До натискання клавіш було виконано’, i, ‘ітерацій’);
Її використовують для організації циклу чекання натискання клавіші:
repeat until KeyPressed;
while KeyPressed do
ch := ReadKey;
Dos. Містить процедури опитування і установки параметрів MS-DOS; процедури обслуговування переривань; процедури і функції перевірки стану диска (аналіз ресурсів дисків); засоби організації резидентних програм і т.д.
Graph. Бібліотека підпрограм для роботи з графікою.
Бібліотечні модулі користувача
Служать для збереження описів користувача.
Структура модуля:
Unit <ім'я модуля>; заголовок модуля
----------------------------------------------------------------------------------------------------
interface
uses <список модулів>; інтерфейсний розділ
<глобальні оголошення>;
<заголовки процедур і функцій>;
----------------------------------------------------------------------------------------------------
implementation
uses <список модулів>; розділ реалізації
<локальні оголошення>;
<тіла процедур і функцій>;
----------------------------------------------------------------------------------------------------
begin
<коди ініціалізації>; розділ ініціалізації
End.
Заголовок модуля вводить ім'я, яке потім використовується для посилань на модуль. Воно повинне співпадати з ім'ям файлу (.pas), в якому зберігається текст модуля.
У інтерфейсному (зовнішньому) розділі описуються глобальні константи, типи, змінні, які будуть доступні основній програмі і іншим модулям, що визивають даний модуль, а також заголовки процедур і функцій, що складають бібліотеку підпрограм.
Якщо при їх оголошенні використовуються дані, описані в інших модулях, то ці модулі підключаються в директиві Uses інтерфейсного розділу.
Розділ реалізації (внутрішній розділ) служить для опису тіл процедур і функцій, оголошених в інтерфейсному розділі (можуть мати заголовок без параметрів). Тут же описуються явно або підключаються за допомогою модулів локальні дані (можуть використовуватися тільки в секціях реалізації і ініціалізації), необхідні для задання тіл підпрограм.
Ці описи недоступні основній програмі і модулям, що визивають даний модуль.
Секція ініціалізації служить для задання початкових установок. Тут ініціалізуються змінні, структури даних, відкриваються файли, встановлюється зв'язок з іншими ПК по комунікаційних каналах тощо.
Обов'язкової є структура:
Unit <ім'я модуля>;
interface
implementation
End.
За відсутності розділу ініціалізації begin не ставиться.
Наприклад,
unit FileText;
interface
Procedure Write_F (s : string);
implementation
var f: text;
const name = ' output .txt';
Procedure Write_F;
begin
WriteLn (f, s)
end;
begin { Початок розділу ініціалізації }
Assign (f, name);
Rewrite (f);
end. { Кінець розділу ініціалізації }
Program Prog1;
Uses FileText ;
Var s : string;
Begin
Write (“Enter string: ”); ReadLn (s);
Write_F (s);
End.
Порядок підключення модулів несуттєвий, хоча рекомендується спочатку підключати стандартні модулі і лише потім користувальницькі. Підключення модулів відбувається в порядку їхнього перерахування. У цьому ж порядку спрацьовують і їхні блоки ініціалізації.