- •Історична довідка
- •Характеристика й особливості мови
- •Алфавіт мови
- •Службові (зарезервовані) слова.
- •Структура програми мови Turbo Pascal
- •Розділ оголошень і угод
- •Розділ текстів процедур і функцій
- •Розділ основного блоку програми
- •Процедури введення-виведення. Деякі вбудовані функції Турбо-Паскаля.
- •Функції числових параметрів.
- •Базові управляючі конструкції Турбо-Паскаля Оператори умовного переходу.
- •1. Оператор if.
- •2. Оператор вибору (case)
- •Оператори циклів у Паскалі
- •1. Цикл із післяумовою (Repeat)
- •2. Цикл із предумовою (While)
- •3. Цикл із лічильником або параметром (For)
- •Концепція типів даних. Типи даних в мові Pascal
- •Дійсні типи
- •Бульовий (логічний) тип
- •Символьні і рядкові змінні
- •1. Символьний тип
- •2. Рядковий тип
- •Перерахований та обмежений типи
- •1. Перерахований тип
- •2. Обмежений тип
- •1. Поняття масиву. Одномірні масиви
- •2. Багатомірні масиви
- •3. Сортування і пошук
- •Множинний тип
- •Тип запис
- •Процедури і функції
- •Формальні і фактичні параметри. Механізм параметрів
- •Параметри - значення
- •Параметри-змінні
- •Безтипові параметри
- •Приведення типів.
- •Процедурні типи
- •Рекурсія Рекурсивні визначення
- •Рекурсивні підпрограми
- •Алгоритми з поверненням. Розв’язок задачі про рух коня
- •Алгоритми з поверненням. Розв’язок задачі про вісьмох ферзів
- •If підходить тнеn
- •Модулі в Турбо Паскалі
- •Модуль crt
- •1. Керування екраном
- •2. Робота з клавіатурою
- •3. Інші можливості
- •Графіка в Турбо Паскалі
- •1. Включення і вимикання графічного режиму.
- •2. Побудова елементарних зображень
- •3. Виведення текстової інформації.
- •Файли в мові програмування Pascal
- •Установчі і завершальні операції
- •Операції введення-виведення
- •Обробка помилок введення-виведення
- •Переміщення по файлу
- •Спеціальні операції
- •Текстові файли
- •1. Оголошення файлової змінної і прив'язка до файлу на диску
- •2. Читання даних з файлу
- •3. Запис даних у файл
- •Двійкові файли
- •1. Типізовані файли
- •2. Нетипізовані файли
- •Статичні і динамічні змінні
- •Покажчики
- •Стан покажчика
- •Установка розмірів динамічної пам'яті
- •Сумісність і перетворення посилкових типів
- •Динамічні структури даних
- •Динамічні змінні: інші види списків, стек і черга.
- •1. Інші види списків
- •2. Стек і черга
- •Дерева і пошук у деревах
- •1. Визначення й описи структур даних
- •1. Масив
- •2. Список
- •3. Дерево
- •2. Алгоритми
- •1. Лінійний пошук у масиві
- •2. Двійковий пошук
- •3. Лінійний пошук у списку
- •Змішані таблиці
- •Об’єктно-орієнтоване програмування. Що таке об’єктно-орієнтоване програмування
- •Інкапсуляція
- •Спадкування
- •Віртуальні методи і поліморфізм
- •Конструктори, динамічні об'єкти і деструктори
- •Поля і методи: сховані і загальнодоступні
- •Системно- залежні розширення
- •Налагодження змінних
- •Оверлеї
- •Переривання і системні виклики
- •Доступ до пам'яті і портів
- •Перевизначення переривань
If підходить тнеn
BEGIN
його запис;
IF i<n THEN Try(i+1) ELSE друк рішення ;
стирання запису
END
END
END;
Зверніть увагу: через те, що умова закінчення в процесі вибору звелася до одного відношення k = m, оператор повторення зі словом REPEAT заміниться на оператор циклу з FOR. Дивно, що пошук усіх можливих рішень виконується більш простою програмою, чим у випадку пошуку одного єдиного рішення.
Узагальнений алгоритм, відшукує 92 рішення задачі про вісьмох ферзів. Однак принципово різних рішень усього 12.
Спробуйте самостійно розробити програму пошуку всіх розв’язків.
Модулі в Турбо Паскалі
У Турбо Паскалі допускається розбивати програми на частині і зберігати ці частини в окремих файлах на диску. Крім основної програми з'являються так називані модулі, що надають основній програмі чи іншим модулям свої змінні, константи, типи, процедури, функції і т.п. Щоб використовувати модуль у програмі, потрібно вказати його ім'я після uses.
При написанні модуля спочатку описується те, що він надає для загального користування (секція інтерфейсу), а потім – як він улаштований (секція реалізації). Іноді існує секція ініціалізації, де записані дії, що виконуються при підключенні цього модуля. Записується це все так:
unit MyUnit;
interface
(*Интерфейсная секція*)
uses ...;
const ...;
type ...;
procedure ...; {Тільки
function ...; заголовки}
implementation
(*Секція реалізації*)
uses ...;
const ...;
type ...;
procedure ...; {Реалізація всіх описаних
begin процедур і функцій}
...
end;
function ...;
begin
...
end;
[begin]
(*Секція ініціалізації*)
end.
Розглянемо частини модуля докладніше. Uses у интерфейсній секції може бути потрібний, якщо в ній використовуються які-небудь ресурси з інших модулів. Процедури і функції тут тільки описуються, але не реалізуються, тобто не записуються тіла процедур і функцій (begin ... end;). У секції реалізації можна також підключати інші модулі; створювати змінні, константи, типи, процедури і функції, що «видні» тільки усередині цього модуля, ніякий інший модуль чи програма на може ними користатися. Тут же обов'язково повинні бути записані всі процедури і функції (цілком). Параметри (у дужках) після імені процедури і функції в секції реалізації можна не вказувати.
Секція ініціалізації містить ті дії, що повинні виконуватися коли наш модуль підключається до програми, тобто до того як почне працювати сама програма. Модуль graph, наприклад встановлює в секції ініціалізації значення за замовчуванням кольору ліній і фону, стиль ліній, стиль заливання т.п.
При збереженні модуля йому потрібно дати таке ж ім'я, як і після unit у тексті модуля. Імена файлів, що містять модулі, повинні мати розширення «pas», також як і програми.
Розглянемо приклад. Наш модуль призначається для операцій із тривимірними векторами:
unit Vectors;
interface
type tVec3D = record
x,y,z: real;
end;
procedure VecAdd(a,b: tVec3D; var c: tVec3D);
procedure VecSub(a,b: tVec3D; var c: tVec3D);
procedure VecMultNum(k: real; a: tVec3D; var b: tVec3D);
function ScalarProduct(a,b: tVec3D): real;
implementation
procedure VecAdd(a,b: tVec3D; var c: tVec3D);
begin
c.x:=a.x+b.x;
c.y:=a.y+b.y;
c.z:=a.z+b.z;
end;
procedure VecSub(a,b: tVec3D; var c: tVec3D);
begin
c.x:=a.x-b.x;
c.y:=a.y-b.y;
c.z:=a.z-b.z;
end;
procedure VecMultNum(k: real; a: tVec3D; var b: tVec3D);
begin
b.x:=k*a.x;
b.y:=k*a.y;
b.z:=k*a.z;
end;
function ScalarProduct(a,b: tVec3D): real;
begin
ScalarProduct:=a.x*b.x+a.y*b.y+a.z*b.z;
end;
end.
У програмі наш модуль можна використовувати, наприклад, так:
program xxx;
uses Vectors;
var v1,v2,res: tVec3D;
...
begin
...
VecMultNum(0.2,v1,res);
VecSub(v2,res,res);
{у результаті res = v2-0.2v1}
...
end.
У випадках, коли кілька модулів містять об'єкти з однаковими іменами, звертатися до них потрібно з вказівкою імені модуля: <ім'я модуля>.<ім'я об'єкта>. Нехай, наприклад, модулі unit1 і unit2 містять процедури з однаковими іменами proc1, тоді звертатися до них слід так: unit1.proc1; і unit2.proc2; .
Переваги модулів:
Засоби, узяті з модулів дозволяють не повторювати в програмах ті самі фрагменти.
Змінні, процедури й інші об'єкти можна сховати в секції реалізації, якщо їхнє необдумане виконання може зіпсувати програму.
Модулі компілюються окремо від головної програми, тому при компіляції всієї програми обробляється тільки головна програма (менші витрати часу при налагодженні програм). Це особливо важливо для великих програм.
Велика програма стає більш зрозумілої, якщо різні її частини розташувати в різних модулях, відповідно до їх призначення.