- •Історична довідка
- •Характеристика й особливості мови
- •Алфавіт мови
- •Службові (зарезервовані) слова.
- •Структура програми мови 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. Лінійний пошук у списку
- •Змішані таблиці
- •Об’єктно-орієнтоване програмування. Що таке об’єктно-орієнтоване програмування
- •Інкапсуляція
- •Спадкування
- •Віртуальні методи і поліморфізм
- •Конструктори, динамічні об'єкти і деструктори
- •Поля і методи: сховані і загальнодоступні
- •Системно- залежні розширення
- •Налагодження змінних
- •Оверлеї
- •Переривання і системні виклики
- •Доступ до пам'яті і портів
- •Перевизначення переривань
Перерахований та обмежений типи
1. Перерахований тип
Припустимо, що нам потрібна земінна для збереження дня тижня. У цьому випадку можна скористатися цілим типом (наприклад byte) і зберігати дні тижня у вигляді чисел 1, 2, ... 7, але це буде не дуже наочно. Турбо Паскаль надає більш зручний варіант, а саме створення перерахованого типу, наприклад, такого:
type Days = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
Після цього можна оголосити змінну цього типу (var day: Days;) і використовувати її. Нижче приведені приклади використання:
day:=Wed;
...
if day>Fri then writeln('Сьогодні вихідний');
...
if day=Mon then writeln('Почався робочий тиждень');
Як ви вже помітили значення перерахованого типу можна порівнювати, при цьому меншим вважається те, що оголошено раніш (лівіше) у визначенні типу.
Для змінних перерахованих типівможливе застосування функцій succ і pred, наприклад, succ(Wed) дає Thu, Pred(Sun) дає Sat. Якщо спробувати написати Pred(Mon) чи Succ(Sun), то вже на етапі перевірки програми компілятором виникне помилка.
Збереження значень перерахованого типу улаштоване досить просто: зберігаються цілі числа від 0 до n, у нашому випадку n=6. Існує функція Ord, що дозволяє одержати те число, у виді якого зберігається яке-небудь значення перерахованого типу, наприклад Ord(Wed) дає 2. При необхідності можна одержати значення перерахованого типу по його чисельному представленню, наприклад, Days(1) є Tue. Після всього сказаного можна помітити, що при порівнянні величин перерахованого типу у дійсності порівнюються їхні порядкові номери (Ord).
Приклад використання перерахованих типів:
Нехай корабель може рухатися тільки по чотирьох напрямках: на північ, на захід, на південь і на схід, тобто поточний напрямок руху визначається змінною типу Directions = (North, West, South, East);. Цьому кораблю можна подавати накази наступних типів: уперед, назад, уліво, вправо, тобто будь-який наказ задати змінною типу Orders = (Ahead, Back, Left, Right);. Нехай корабель рухався по напрямку d1, після чого йому дали наказ p. Програма повинна визначити, у якому напрямку корабель буде рухатися після виконання наказу.
program Ship;
type Courses = (North, West, South, East);
Orders = (Ahead, Back, Left, Right);
var d1, d2: Courses;
p: Orders;
i: integer;
s: string;
begin
{Запитуємо в користувача інформацію про курс і наказ}
writeln('Уведіть первісний курс корабля ');
write('(0-північ, 1-захід, 2-юг, 3-схід) ');
readln(i);
d1:=Courses(i);
writeln('Уведіть наказ, даний кораблю ');
write('(0-прямо, 1-назад, 2-вліво, 3-вправо) ');
readln(i);
p:=Orders(i);
{Визначаємо новий курс}
case p of
Ahead : d2:=d1;
Back : d2:=Courses((ord(d1)+2) mod 4);
Left : d2:=Courses((ord(d1)+1) mod 4);
Right : d2:=Courses((ord(d1)+3) mod 4);
{-1 - не можна, тому що (Ord(North)-1) mod 4 = -1}
end;
{Виводимо результат на екран}
case d2 of
North : s:='північ';
West : s:='захід';
South : s:='південь';
East : s:='схід';
end;
writeln('Тепер корабель рухається на '+s);
readln;
end.