- •Історична довідка
- •Характеристика й особливості мови
- •Алфавіт мови
- •Службові (зарезервовані) слова.
- •Структура програми мови Turbo Pascal
- •Процедури введення-виведення. Деякі вбудовані функції Турбо-Паскаля.
- •Функції числових параметрів.
- •Базові управляючі конструкції Турбо-Паскаля Оператори умовного переходу.
- •Оператори циклів у Паскалі
- •Концепція типів даних. Типи даних в мові Pascal
- •Дійсні типи
- •Бульовий (логічний) тип
- •Символьні і рядкові змінні
- •1. Символьний тип
- •2. Рядковий тип
- •Перерахований та обмежений типи
- •1. Перерахований тип
- •2. Обмежений тип
- •1. Поняття масиву. Одномірні масиви
- •2. Багатомірні масиви
- •3. Сортування і пошук
- •Множинний тип
- •Тип запис
- •Процедури і функції
- •Формальні і фактичні параметри. Механізм параметрів
- •Параметри - значення
- •Параметри-змінні
- •Безтипові параметри
- •Приведення типів.
- •Процедурні типи
- •Рекурсія Рекурсивні визначення
- •Рекурсивні підпрограми
- •Алгоритми з поверненням. Розв’язок задачі про рух коня
- •Алгоритми з поверненням. Розв’язок задачі про вісьмох ферзів
- •Модулі в Турбо Паскалі
- •Модуль crt
- •1. Керування екраном
- •2. Робота з клавіатурою
- •3. Інші можливості
- •Графіка в Турбо Паскалі
- •1. Включення і вимикання графічного режиму.
- •2. Побудова елементарних зображень
- •3. Виведення текстової інформації.
- •Файли в мові програмування Pascal
- •Установчі і завершальні операції
- •Операції введення-виведення
- •Обробка помилок введення-виведення
- •Переміщення по файлу
- •Спеціальні операції
- •Текстові файли
- •Двійкові файли
- •Статичні і динамічні змінні
- •Покажчики
- •Стан покажчика
- •Установка розмірів динамічної пам'яті
- •Сумісність і перетворення посилкових типів
- •Динамічні структури даних
- •Динамічні змінні: інші види списків, стек і черга.
- •1. Інші види списків
- •2. Стек і черга
- •Дерева і пошук у деревах
- •1. Визначення й описи структур даних
- •2. Алгоритми
- •Змішані таблиці
- •Об’єктно-орієнтоване програмування. Що таке об’єктно-орієнтоване програмування
- •Інкапсуляція
- •Спадкування
- •Віртуальні методи і поліморфізм
- •Конструктори, динамічні об'єкти і деструктори
- •Поля і методи: сховані і загальнодоступні
- •Системно- залежні розширення
- •Налагодження змінних
- •Оверлеї
- •Переривання і системні виклики
- •Доступ до пам'яті і портів
- •Перевизначення переривань
Стан покажчика
Для покажчика, після того як він оголошений у розділі опису змінних, можливі три стани. Покажчик може містити адресу деякої змінної, "порожній” адресу NIL або мати невизначений стан. Перший випадок пояснень не потребує. В другому випадку, коли потрібно, щоб покажчик нікуди не вказував, йому присвоюється спеціальне значення NIL. Що ж стосується невизначеного стану, то воно має місце відразу після початку роботи програми (до того як покажчику буде присвоєна яка-небудь адреса в пам'яті чи значення NIL), або після звільнення пам'яті, на яку даний покажчик посилається.
Якщо когось бентежить "покажчик, який нікуди не вказує", то це можна представити як посилання на область пам'яті, у якій ніяка інформація ніколи не розміщується. Значення NIL — це константа, яку можна присвоїти будь-якому покажчику.
Може виникнути питання, у чому різниця між невизначеним станом покажчика і випадком, коли його значення дорівнює NIL? Оскільки NIL— значення конкретне, хоча і нікуди що не вказує, можна сказати, що два покажчики, що містять NIL, мають рівні значення. У той же час значення двох покажчиків у невизначеному стані рівними визнати не можна.
Установка розмірів динамічної пам'яті
Як уже говорилося, більшість реальних прикладних програм активно використовують динамічні змінні. Це зв'язано як з великою гнучкістю цього механізму, так і з чуттєвим для великих програм обмеженням на загальний об’єм статичних змінних. За замовчуванням для купи виділяється весь об’єм наявної оперативної пам'яті, доступній операційній системі, за винятком пам'яті для коду програми і статичних змінних. Таким чином, розмір динамічної пам'яті може досягати 400K і більш. Однак у ряді випадків такий об’єм є надлишковим чи навіть неприпустимим (зокрема, Pascal-програма, що займає всю оперативну пам'ять, не в змозі здійснити виклик якої-небудь іншої програми, розміщеної в окремому Ехе-файлі). Крім того, деякі програми можуть узагалі не використовувати динамічну пам'ять.
Сказане визначає необхідність засобів керування розмірами динамічної пам'яті, використовуваною програмою. У мові Turbo Pascal для цього служить директива компілятора $M. Ця директива повинна розташовуватися на початку тексту програми і має три цілочисельних параметри, що повинні розділятися комами. Перший параметр визначає максимальний розмір пам'яті, що виділяється під стек локальних змінних, а два наступних параметри задають мінімальний і максимальний розміри динамічної пам'яті.
Приклади директиви $M:
{$M 10240,0,200000}
{$M 16384,1024,650000}
{$M 1024,0,0}
Завдання мінімального розміру динамічної пам'яті (другий параметр) носить обмежувальний характер і встановлює той об’єм необхідної пам'яті, при відсутності якого програма взагалі НЕ МОЖЕ ВИКОНУВАТИСЯ. Якщо цей параметр є 0, то програма буде запущена в будь-якому випадку.
Третій параметр задає максимальний розмір потрібної динамічної пам'яті і носить рекомендаційний характер. Іншим словами, розмір динамічної пам'яті буде визначатися перед початком роботи програми виходячи з реальної наявності вільної оперативної пам'яті, але не буде перевищувати зазначений у цьому параметрі об’єм. Якщо при запуску програми в оперативній пам'яті знаходяться які-небудь програми (наприклад, резидентна частина системи Norton Commander) чи запуск виконується з інтегрованого середовища Turbo Pascal, що саме має досить значний розмір, то реальний об’єм динамічної пам'яті, відведеної програмі, може бути менше замовленого.
За замовчуванням передбачається наявність директиви
{$M16384,0,655360}
тобто під стек виділяється l6K байт, під динамічну пам'ять - уся вільна оперативна пам'ять, доступна операційній системі.
Варто мати на увазі, що, крім директиви $M у тексті програми, можна установити обговорювані розміри за допомогою альтернативи Options/Memory Sizes в інтегрованому середовищі чи передавати їх як параметри при виклику компілятора командного рядка.