Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_1_05_ВНУ.doc
Скачиваний:
2
Добавлен:
08.09.2019
Размер:
1.71 Mб
Скачать

Символьний тип

Значенням змінної символьного типу є символ - елемент деякої скінченної та упорядкованої множини символів. Така множина є в кожній обчислювальній системі, оскільки вона потрібна для обміну інформацією з системою. На жаль, нема єдиної стандартної множини символів, різноманітні системи відрізняються як самими символами, так і порядковими номе­рами. Однак стандартом мови Паскаль передбачено такі влас­тивості множин:

  1. кожний символ має порядковий номер;

  2. десяткові цифри впорядковані за зростанням і йдуть одна за одною;

  3. букви впорядковані за алфавітом, їхні номери не обо­в'язково йдуть підряд.

Найчастіше застосовують множину символів ASCII (Ame­rican Standard Code for Information Interchange).

У програмах символьні сталі, що мають значення, запису­ють між одинарними лапками: 'а' '*' '”' (апостроф ставлять двічі).

Для відображення заданої множини символів на порядкові номери і навпаки є дві функції:

ord(C) - дає порядковий номер символу С в заданій упо­рядкованій множині символів;

chr(i) - дає символ з номером і в цій множині. Нехай С1 і С2 мають символьний тип

var

С1, С2: char;

Тоді якщо С1<>С2, то ord(C1)<>ord(C2).

Над символьними змінними можна виконувати операції порівняння, причому С1<С2 еквівалентне ord(C1)<ord(C2).

З останньої властивості випливає, що ord('1'), ord('2'), ..., ord('9') - зростаюча послідовність чисел, що йдуть підряд. Зви­чайно в множинах ord('0')<>0.

Обернена до ord функція chr має цілий аргумент, видає сим­вольне значення і визначена тільки в діапазоні значень функції ord. Наприклад, нехай

var

і: integer;

тоді chr(i) буде визначене, якщо є символ sym такий, що ord(sym)=i. У цьому випадку chr(i)=sym. Зокрема, якщо

var

і: integer;

і відомо, що 0<cf<9, то відповідним символом буде chr(cf+ord('0')). Символи з вхідного файлу читають за допомогою стан­дартної процедури read (пропусками ігнорують, на відміну від уведення цілих і дійсних чисел):

var

sym: char;

. . .

read(sym);

Оператором процедури write(sym) записують символ у вихід­ний файл. Зокрема, оператор write(sym: р), де р - ширина поля, виведе пропуски в кількості p-1, і після того - символ sym;

Оператор write(' ': р) виведе пропуски в кількості р.

Конструйовані типи

У мові Паскаль тип даних можна задавати самостійно. Це дає змогу, з одного боку, складати наочну програму, а з іншого, - передавати компіляторові більше інформації про програму, за допомогою якої він ретельніше перевірить синтаксичні по­милки і сформулює ефективнішу робочу програму.

Нові типи визначають у розділі визначення типів. Загаль­ний вигляд цього розділу такий:

type <ім'я типу>=<визначення типу>;

Наприклад, за допомогою опису

type

cilyj=integer;

можна ввести новий тип cilyj, ідентичний типу integer.

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

Стандартні типи змінних, як відомо, мають значення, що є елементами з підмножини цілих, дійсних чисел, логічних зна­чень (true або false) або множини символів обчислювальної сис­теми (наприклад ASCII). Проте часто доводиться стикатися з поняттями, які можуть набувати специфічних значень, що не є елементами названих підмножин. Наприклад, поняття місяць (року) об'єднує часткові випадки з іменами "січень", "лютий", "березень",..., "грудень"; день тижня - це Пн, Вт, Ср,...,Сб, Нд. Для кожного з цих понять часткові випадки можна закодувати, наприклад, дні тижня - від 1 до 7, місяці року - від 1 до 12 тощо. Однак працювати з такими кодами незручно, оскільки треба постійно пам'ятати їхню відповідність конкретному по­няттю. Наприклад, вираз b=9 не дає змоги зрозуміти, що по­рівнюється: ціле число, чи код місяця в році. Якщо це код мі­сяця, то значно зручніше було б записати умову

b=September

Для того, щоб такий і подібні записи можна було викорис­товувати, у Паскалі введено новий тип - перелічуваний. Це впорядкований набір ідентифікаторів, заданий шляхом їх пе­релічення. Тобто для визначення перелічуваного типу задають список значень, яких можуть набувати змінні цього типу. За­гальний вигляд задання перелічуваного типу такий:

type <ім'я типу>=(<перелік можливих значень>)

Наприклад, задано тип:

type

odynycia=(dujm, fut, metr, myla);

var

masstab: odynycia.

Таким чином змінній masstab приписують тип odynycia, тобто ця змінна може мати одне із значень dujm, fut, metr, mylia. Обидва описи можна об'єднати в один, описавши тип під час опису змінних:

var

masstab: (metr, fut, dujm, mylia).

Однак у цьому разі цей же тип не можна надати ще якійсь одній або групі змінних. Тому визначення типу ліпше відділяти від опису змінної. Крім того, в деяких випадках треба зазначати тільки ім'я типу, а не його задання. А тут не буде імені типу.

Імена, перелічені в дужках, називають сталими іменами. Ще один приклад описання типів такий:

type

color=(black, white, red, orange, green, blue);

var

x, y, z: color.

Значення змінної не може належати більш ніж до одного типу. Наприклад, запис

type

robden=(pn, vt, sr, ct, pt, sb);

vychden=(sb, nd);

є неправильним.

Категорично заборонено різним іменам типів надавати однакові описи.

Зазначимо, що булів тип є фактично стандартним перелі­чуваним типом, його можна описати так:

type

boolean=(false, true);

Єдина операція, яку можна виконувати над змінними пе­релічуваного типу - порівняння. Результат одержують булів. Зрозуміло, що обидві компоненти порівняння мають однаковий тип. Упорядкованість у перелічуваних типах визначена послі­довністю, в якій значення перелічені під час визначення типу. Запишемо умовно

type

T=(W1,W2 Wn);

тоді Wi<>Wj, якщо i<>j - ознака відмінності, Wi<Wj, якщо i<j, -ознака впорядкованості.

Для визначених типів вираз white<black буде false; true>false – true;

Упорядкованість змінних перелічуваного типу дає змогу виконувати з ними функції pred і succ:

succ(blue)=white.

Перший елемент списку не має попереднього, а останній – наступного значення, тобто pred(red) і succ(green) є невизначені.

Функція ord теж має аргументом змінну перелічуваного типу і видає ціле число, що є порядковим номером значення змінної у списку визначення. Причому перше значення у цьому списку має порядковий номер нуль, друге - 1 і т.д. Тобто

ord(pn)=0; ord(sr)=2; ord(black)=1.

Щодо процедур уведення і виведення, то, на жаль, вводити і виводити на зовнішні пристрої значення перелічуваних типів не дозволено.

Діапазонний тип

Часто в програмі трапляються змінні, для яких наперед відомо, з якого інтервалу вони можуть набувати значення. На­приклад, нехай d – поточна дата (число деякого місяця). Зрозу­міло, що d може набувати цілочислового значення з інтервалу [1, 31], тобто її можна віднести до типу integer. Однак може статися, що в програмі цій змінній буде присвоєне значення, що виходить за межі заданого інтервалу. Щоб контролювати ситуацію й уникати таких помилок, у мові Паскаль введено діапазонний тип, що передбачає визначення діапазону значень іншого попередньо заданого типу, який є базовим. Базовими можуть бути типи цілий, символьний і перелічуваний, однак не дійсний. Загальний вигляд описання діапазону такий:

<стала>..<стала>

Наведемо приклади:

type

index=1..20 {діапазон типу integer}

letter='a'..'z' {діапазон типу char}

тоді змінні опишемо так:

var

і, j: index;

sym: letter;

Як і для перелічуваного типу, опис змінних можна суміс­тити з описом типу:

var

i,j: 1..20;

sym: 'a'..'z';

Однак ліпше їх розділяти.

Усі операції, які виконують зі змінними базового типу, мож­на застосовувати до відповідного діапазону:

j+i*2

rd<dn

pred(sym)<>'d'

Функції базового типу можна виконувати з діапазоном. Значення функції необов'язково належатиме до діапазону. Наприклад: sqr(i) не можуть належати до діапазону index (якщо, звичайно, це значення не присвоєно змінній типу index, на­приклад j).

Застосування діапазонного типу дає змогу поліпшити на­очність програми, а також передає інформацію компіляторові для перевірки правильності програми, тобто перевірки діапа­зону значень змінних.