ПАСКАЛЬ: ТИП СИМВОЛІВ ТА ІНШІ ПЕРЕЛІЧУВАНІ

1. Тип символів

Нарешті ми розглянемо останній з базових типів – тип символів. Множина
символів, представних у сучасному комп’ютері, як правило, складається з
256 елементів.

У мові Паскаль символ позначається символьною сталою, що є символом в
апострофах: ‘A’, ‘1’, ‘.’ тощо. Сам символ «апостроф» задається
символьною сталою »».

Символьна стала – це не символ, а його позначення в мові Паскаль.

Не всі символи позначаються сталими мови Паскаль, але будь-який символ
можна задати за допомогою виклику функції chr. Символам у комп’ютері
ставляться у відповідність номери від 0 до 255. Якщо i – цілий вираз із
значенням від 0 до 255, то вираз вигляду chr(i) задає символ із номером,
що є значенням i. Відповідність символів та номерів від 0 до 127
зафіксовано в Американському стандартному коді для обміну інформацією
(ASCII). Наприклад, chr(48) позначає те ж саме, що й стала ‘0’,
chr(48+1) – то ж саме, що ‘1’, chr(65) є синонімом сталої ‘A’, chr(97) –
сталої ‘a’.

Цілий номер символу породжується викликом функції «порядковий номер»,
тобто виразом вигляду ord(c), де значенням виразу c є символ. Наприклад,
ord(‘0’)=48, ord(‘A’)=65, ord(‘a’)=97. За своїм означенням, функції chr
і ord взаємно обернені, тобто chr(ord(c))=c за будь-якого символу c, і
ord(chr(n))=n за будь-якого n=0, 1, … , 255.

Крім функції ord, для символів означені порівняння, причому

a‘a’; е) ord(‘9’)-ord(‘0’).

3. Написати вираз, що задає перевірку, чи є значення символьної змінної
ch:

а) цифрою від ‘0’ до ‘9’; б) малою латинською буквою;

в) латинською буквою (великою чи малою).

4.* Написати вираз, що задає обчислення:

а) цілого числа від 0 до 9 за значенням символьної змінної ch від ‘0’ до
‘9’;

б) символу від ‘0’ до ‘9’ за цілим значенням змінної dg від 0 до 9.

5.* У шістнадцятковій системі числення літерами ‘A’, ‘B’, … , ‘F’
позначають числа, що в десятковій системі зображаються відповідно як 10,
11, … , 15. Написати оператор, що задає обчислення:

а) цілого числа від 0 до 15 за значенням символьної змінної ch, яким
може бути цифра від ‘0’ до ‘9’ або буква від ‘A’ до ‘F’;

б) символу від ‘0’ до ‘9’ або від ‘A’ до ‘F’ за цілим значенням змінної
dg від 0 до 15.

6. Написати програму друкування таблиці символів та їх номерів,
починаючи з символу ‘ ‘ (пропуск), номер якого 32.

2. Перелічувані типи

Елементи кожного з типів Boolean, char і integer упорядковані відповідно
до операції порівняння <. У цьому порядку їх можна взаємно однозначно зіставити натуральним числам 0, 1, … (перелічити їх). За будь-яким натуральним числом можна указати наступне за ним і попереднє перед ним (крім числа 0). Так само за будь-яким елементом, крім найбільшого, цих типів можна назвати наступний за ним і за будь-яким елементом, крім найменшого, – попередній перед ним. Наприклад, наступним за false є true, наступним за chr(0) – chr(1), за chr(254) – chr(255). Елементи типу real теж упорядковані, але поставити їм у відповідність натуральні 0, 1, … неможливо, як і за дійсним числом указати наступне за ним. Отже, всім базовим типам, окрім типу real, притаманно те, що для них означено операції "наступний", "попередній" та "порядковий номер". У мові Паскаль перелічуваним називається тип, для якого означено операції SUCC (наступний), PRED (попередній) і ORD (порядковий номер елемента), а також порівняння =, <>, <, >, <=, >=.

Типи boolean, char і integer, на відміну від типу real, є
перелічуваними. Операції succ, pred, ord записуються у вигляді викликів
функцій: вирази pred(1), succ(‘a’) і ord(true) мають значення відповідно
0, ‘b’ і 1.

Всі чотири базових типи називаються скалярними, тому що значення цих
типів не складені з частин, які можна було б окремо ідентифікувати. У
наступному підрозділі ми розглянемо спосіб означення власних скалярних
типів. Але всі вони будуть перелічуваними.

У мові Турбо Паскаль для всіх перелічуваних типів означено операції,
аналогічні succ і pred. Вони застосовуються до змінних перелічуваних
типів у вигляді викликів процедур INC і DEC. Виклик inc(z) рівносильний
оператору z:=succ(z), dec(z) – оператору z:=pred(z). У виклику може бути
другий аргумент – цілочисловий вираз. Наприклад, виклик inc(z, 2) задає
збільшення z на дві «одиниці» того типу, до якого належить z. Якщо
змінна z типу char і має значення ‘A’, то в результаті виконання inc(z,
2) її значенням буде ‘C’. Значення виразу може бути й від’ємним – тоді z
зменшиться. Аналогічно за виконання dec(z, 3) значення z зменшується у
його типі, наприклад, від 3 до 0 або від ‘D’ до ‘A’.

3. Означення власних перелічуваних типів

Мова Паскаль має засоби означення власних типів, необхідних у створенні
реальних програм.

Носій типу, тобто множина його елементів, задається в означенні імені
типу. Загальний вигляд означення такий:

type ім’я = вираз, що описує елементи множини;

Службове слово type – це англійське «тип». З виразами, що задають
множини елементів, ми будемо знайомитися поступово.

Найпростіший вираз – це ім’я типу, уже означене вище або ім’я
стандартного типу. Наприклад, означення

type int = integer;

n

TH

Z o oe t

v

E

I

r

задає нове іменування типу integer. Після цього означення скрізь замість
довгого імені integer можна писати коротке int.

Вирази, що задають множини елементів, можна записувати як в означенні
імені типу, так і на місці імені типу в означеннях змінних. Приклади
наведемо трохи нижче.

Мова Паскаль дозволяє програмісту означати свої власні перелічувані
типи. Вони називаються типами-переліками та типами-діапазонами. Переліки
наочно подають множини таких значень, що природно позначаються словами.
Наприклад, сигнали світлофора або дні тижня.

Множину днів тижня, позначену {Пн, Вт, Ср, Чт, Пт, Сб, Нд} у мові
Паскаль можна задати, означивши тип-перелік з ім’ям, наприклад, Weekd:

type Weekd=(Mon, Tue, Wed, Thu, Fri, Sat, Sun).

Тут ужито скорочення від англійських слів Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday, Sunday – понеділок, вівторок тощо до неділі.

Аналогічно сигнали світлофора можна задати, определив тип Lights:

type Lights=(red, yellow, green) {червоний, жовтий, зелений}

Як бачимо, перелік задається виразом вигляду

( список ідентифікаторів )

Ідентифікатори списку після цього означення виступають сталими
відповідного типу. Сталі не можуть повторюватися в означеннях того
самого блока. Наприклад, якщо разом із типом сигналів світлофора
означити ще тип кольорів райдуги, то використовувати імена red, yellow,
green не можна.

Порядок сталих у списку задає операції ord, pred і succ, означені для
всякого переліку. Наприклад, ord(Mon)=0, ord(Tue)=1 тощо, ord(Sun)=6,
succ(Mon)=Tue, pred(Sat)=Fri. У відповідності зі значеннями ord означено
й порівняння, наприклад, red3 таких натуральних A і B,
що 5A+2B=N, причому A+B мінімально.

12. У давньояпонському календарі був прийнятий 60-річний цикл із п’яти
12-річних підциклів, послідовно позначених кольорами – зеленим,
червоним, жовтим, білим та чорним. У кожному підциклi послідовні роки
мали назви тварин: пацюка, корови, тигра, зайця, дракона, змії, коня,
вівці, мавпи, курки, собаки та свині. 4-й рік нової ери – рік зеленого
пацюка – був початком чергового циклу.

Написати програму читання року нової ери та друкування його назви за
давньояпонським календарем.

Похожие записи