Реферат на тему:
Тип символів та інші перелічувані
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, для символів означені порівняння, причому
abord(a)b).
З таблиці у додатку 2 очевидно, наприклад, що ‘ ‘ катенації, або дописування, що позначається знайомим знаком “+”. Її результатом є не символ, а послідовність із двох символів, або рядок. Наприклад, ‘1’+’2′ є послідовність символів, яку можна задати літералом ’12’. Ще дві операції над символами будуть означені в такому параграфі.
Множина символів і операції, означені для них, утворюють типсимволів, іменований char. Змінні цього типу називаються символьними.
Задачі
6.1.Указати різницю між 0 і ‘0’, A і ‘A’, — і ‘-‘.
6.2.* Обчислити значення виразу:
а) chr(ord(‘0’)+9); б) chr(ord(‘A’)+1); в) chr(ord(‘A’)+25);
г) chr(ord(‘0’)-16); д) ‘Z’>’a’; е) ord(‘9’)-ord(‘0’).
6.3.Написати вираз, що задає перевірку, чи є значення символьної змінної ch:
а) цифрою від ‘0’ до ‘9’; б) малою латинською буквою;
в) латинською буквою (великою чи малою).
6.4.* Написати вираз, що задає обчислення:
а) цілого числа від 0 до 9 за значенням символьної змінної ch від ‘0’ до ‘9’;
б) символу від ‘0’ до ‘9’ за цілим значенням змінної dg від 0 до 9.
6.5.* У шістнадцятковій системі числення літерами ‘A’, ‘B’, …, ‘F’ позначають числа, що в десятковій системі зображаються відповідно як 10, 11, …, 15. Написати оператор, що задає обчислення:
а) цілого числа від 0 до 15 за значенням символьної змінної ch, яким може бути цифра від ‘0’ до ‘9’ або буква від ‘A’ до ‘F’;
б) символу від ‘0’ до ‘9’ або від ‘A’ до ‘F’ за цілим значенням змінної dg від 0 до 15.
6.6.Написати програму друкування таблиці символів та їх номерів, починаючи з символу ‘ ‘ (пропуск), номер якого 32.
6.2. Перелічувані типи
Елементи кожного з типів Boolean, char і integer упорядковані відповідно до операції порівняння перелічитиїх). За будь-яким натуральним числом можна указати наступне за ним і попереднє перед ним (крім числа 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’.
6.3. Означення власних перелічуваних типів
Мова Паскаль має засоби означення власних типів, необхідних у створенні реальних програм.–PAGE_BREAK–
Носій типу, тобто множина його елементів, задається в означеннііменітипу. Загальний вигляд означення такий:
typeім’я = вираз, що описує елементи множини;
Службове слово type– це англійське «тип». З виразами, що задають множини елементів, ми будемо знайомитися поступово.
Найпростіший вираз – це ім’я типу, уже означене вище або ім’я стандартного типу. Наприклад, означення
typeint = integer;
задає нове іменування типу integer. Після цього означення скрізь замість довгого імені integer можна писати коротке int.
Вирази, що задають множини елементів, можна записувати як в означенні імені типу, так і на місці імені типу в означеннях змінних. Приклади наведемо трохи нижче.
Мова Паскаль дозволяє програмісту означати свої власні перелічувані типи. Вони називаються типами-перелікамитатипами-діапазонами. Перелікинаочно подають множини таких значень, що природно позначаються словами. Наприклад, сигнали світлофора або дні тижня.
Множину днів тижня, позначену {Пн, Вт, Ср, Чт, Пт, Сб, Нд} у мові Паскаль можна задати, означивши тип-перелік з ім’ям, наприклад, Weekd:
typeWeekd=(Mon, Tue, Wed, Thu, Fri, Sat, Sun).
Тут ужито скорочення від англійських слів Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday – понеділок, вівторок тощо до неділі.
Аналогічно сигнали світлофора можна задати, определив тип Lights:
typeLights=(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 означено й порівняння, наприклад, red
Вираз із сталими перелічуваних типів можна присвоювати однотипним із ними змінним.
Сталі й змінні перелічуваних типів, на відміну від базових типів, не можна вказувати у викликах процедур виведення та введення.
Будь-який перелічуваний тип, стандартний або тип-перелік, означений вище в програмі, може виступати базовим для типу-діапазону. Він задається виразом вигляду
стала1..стала2,
де стала1 стала2. Наприклад, ми можемо означити типи
type hundred=0..99; chesslet=’A’..’H’; Workd=Mon..Fri
або змінні var stop: red..yellow; column: chesslet тощо.
Для діапазону означено ті самі операції, що для його базового типу.
Задачі
6.7.У розкладі рейсів літаків дні тижня позначаються номерами від 1 до 7. Припустимо, що в програмі дні тижня подаються типом Weekd. Написати вираз, що задає обчислення:
а) за номером дня тижня відповідного елемента типу Weekd;
б) за елементом типу Weekd номера дня тижня.
6.8.За понеділком іде вівторок тощо, а за неділею – понеділок. Написати функцію обчислення за днем тижня (типу Weekd) наступного за ним дня.
6.4. Оператор вибору варіантів
Повернемося до програми «найпростіший калькулятор» із прикладу 5.3. Там використовувалася змінна signop із значеннями 1, 2, 3 або 4, що позначали знаки операцій відповідно “+”, “-“, “*”, “/”. Її значення, отримане в результаті читання, порівнювалося з 1, 2, 3, 4 та виконувалися відповідні їм дії:
ifsignop=1 thenfirst:=first+second else
ifsignop=2 thenfirst:=first-second else
ifsignop=3 thenfirst:=first*second else
{signop=4}
first:=first/second;