Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Паскал.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
1.21 Mб
Скачать

Перерахований та обмежений типи

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.