69129

Прості типи даних. Операції над даними

Лекция

Информатика, кибернетика и программирование

Поняття типу даних є одним із фундаментальних понять програмування. Тип даних визначає: множину допустимих значень яких може набувати змінна або константа зазначеного типу; множину допустимих операцій що застосовуються до даних певного типу; спосіб зображення даних...

Украинкский

2014-09-30

93 KB

5 чел.

Лекція 6. Тема: Прості типи даних. Операції над даними.

План:

1. Прості типи даних

2. Операції над даними

3. Цілочислові типи

4. Дійсні типи

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

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

7.Інтервальний тип

8.Порядкові типи

1. Прості типи даних

Поняття типу даних є одним із фундаментальних понять програмування. Тип даних визначає:

- множину допустимих значень, яких може набувати змінна або константа зазначеного типу;

- множину допустимих операцій, що застосовуються до даних певного типу;

- спосіб зображення даних у пам'яті комп'ютера.

Якщо типи даних у мові Pascal класифікувати за будовою та властивостями відповідних даних, то можна виділити такі типи: прості, структуровані, посилальні, процедурні й об'єктні. Дані простих типів не містять у собі як складові елементи дані інших типів. Натомість дані структурованих типів — це об'єднання певної кількості елементів даних.

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

Ще один спосіб класифікації дає можливість виділити порядкові типи даних. Множина допустимих значень порядкового типу являє собою упорядковану послідовність, кожний елемент якої має свій порядковий номер. Детальніше властивості порядкових типів даних розглядатимуться у розділі 8.

Під час збереження значень певного типу даних використовується певний обсяг оперативної пам'яті, який можна визначити вбудованою функцією si zeof. Аргументом цієї функції може бути ідентифікатор типу даних, змінна або типізована константа.

До простих типів даних належать цілі типи, дійсні типи, символьний тип, булів тип, перелічуваний тип та інтервальний тип. Усі прості типи, окрім дійсних, є порядковими. Цілі типи, дійсні типи, символьний тип та булів тип є стандартними, а перелічуваний та інтервальний — типами користувача. 

2. Операції над даними

Операції описують дії, які необхідно виконати над певними значеннями, що можуть бути значеннями констант, змінних, функцій або виразів. Значення, до якого застосовується операція, називається п операндом. Операція позначається спеціальною лексемою — символом операції. Прикладами символів операції можуть бути лексеми +, and, [] тощо.

Залежно від типів операндів операції поділяються на арифметичні, логічні, рядкові тощо. Наприклад, арифметичні операції застосовуються до значень числових типів даних, а логічні операції — до логічних значень.

Залежно від кількості операндів операції в мові Pascal поділяються на унарні та бінарні. Унарні операції застосовуються до одного операнда. Символ унарної операції записується перед операндом, наприклад: -а. Бінарні операції застосовуються до двох операндів; символи таких операцій записуються між операндами, наприклад: х + у.

3. Цілочислові типи

Цілочислові типи - це типи даних, множини допустимих значень яких є множинами цілих чисел. Ідентифікатори цілочислових типів у мові Pascal, множини допустимих значень цих типів та обсяги пам'яті, що потрібні для збереження відповідних даних, наведені у табл. 2.1.

Таблиця Цілочислові типи

Кількість байтів Ідентифікатор типу оперативної пам'яті . Діапазон значень

byte

1

hortint

1

integer

2

word

2

longint

4

0 .. 255 (28 - 1) -128 .. 127 -32 768 .. 32 767 (215 - 1)

0 .. 65 535
-2 147 483 648 .. 2 147 483 647 (231 - 1)

Над усіма цілочисловими типами означений однаковий набір операцій. Усі ці операції, крім однієї, є бінарними. Символ *-* є символом як бінарної операції віднімання, так і унарної операції «мінус»: -32 768, -(2 - 3). Арифметичні операції над даними цілочислових типів перелічено у табл. 2.2 разом із прикладами їх застосування. Значення цілочислових типів записують у десятковій або шіст-надцятковій системі числення. Ціле число не може містити десяткової точки. Для запису значення у шістнадцятковій системі перед символами числа записують символ «$», наприклад, $FFA1, що дорівнює десятковому значенню 65 441.

4. Дійсні типи

Множина допустимих значень будь-якого дійсного типу є скінченною підмножи-ною множини раціональних чисел і містить, зокрема, усі цілі числа типу і nteger.

Для запису дійсних чисел в оперативній пам'яті використовується розглянута в розділі 1 форма з плаваючою комою. Дійсне число у формі з плаваючою комою має мантису та порядок. Кількість цифр в мантисі характеризує точність числа. Чим більше цифр у мантисі, тим вище точність. Порядок визначає справжнє місцезнаходження десяткової точки в числі.

У мові Pascal означено п'ять дійсних типів (табл. 2.3): дійсний (real), дійсний з одинарною точністю (single), дійсний з подвійною точністю (double), дійсний з підвищеною точністю (extended), цілий у форматі дійсного типу (сошр). Серед усіх дійсних типів extended має найширший діапазон і найвищу точність, але потребує при цьому найбільших витрат пам'яті.

Таблиця 2.3. Дійсні типи даних

Назва

Кількість байтів оперативної пам'яті

Найменше за модулем число

Найбільше за модулем число

single

4

1,510-45

3,4-1038

real

6

2,9*10-39

1.7-1038

double

8

5-10-324

1.7.10308

extended

10

3,4-10-4932

1,1-104932

comp

8

-263+l=-9,2*1018

-263-l=9,2*1018

Дії над даними типів single, double, extended і comp виконуються тільки за наявності математичного співпроцесора. Його застосування значно підвищує точність розрахунків і прискорює їх виконання. Pascal надає можливість емулювати роботу математичного співпроцесора програмним способом за допомогою директив компілятора {$N+.E-}.

Тип comp (від compound — складений) містить 64-бітні цілі числа, але у дійсному форматі. У виразах цей тип є сумісним із дійсними та цілими типами, але застосовувати до даних типу comp можна лише визначені для дійсних типів даних операції.

Запис дійсного числа містить обов'язкову цілу частину, за якою вказуються дробова частина і порядок. Ціла частина — це непорожня послідовність цифр, дробова - непорожня послідовність цифр із крапкою на початку, а порядок - це дві або чотири цифри зі знаком «+» або «-». Цифри порядку записані після літери <Е» або <е». Перед значенням від'ємного дійсного числа записується знак «-», наприклад: -1.2345678900Е-01. Дійсне число, в якому перед десятковою точкою записано цифру від 1 до 9, називається нормалізованим.

Для дійсних типів означено чотири арифметичні операції: додавання (+), віднімання (-), множення (*), ділення (/). Також над даними дійсних типів можна виконувати ті самі операції порівняння, що і над даними цілих типів. Зауважимо, що у загальному випадку дійсні числа можна порівнювати лише наближено, а застосування операції порівняння (=) до рівних з математичної точки зору виразів може дати результат false.2.3.4. Булів тип

Множина допустимих значень булевого, або логічного, типу містить дві константи: false (хибність) і true (істина). Назва цього типу даних походить від прізвища видатного англійського математика Джорджа Буля, засновника математичної логіки. Ідентифікатором логічного типу є слово boolean.

До булевих значень застосовуються операції «і», «або», «не», що називаються відповідно логічним множенням (кон'юнкцією), логічним додаванням (диз'юнкцією) й запереченням і позначаються лексемами and, or та not. Ще одна операція називається «виключне або» чи «додавання за модулем 2» і позначається лексемою хог. Результати застосування цих операцій до булевих значень наведено в табл. 2.4.

Таблиця

2.4. Булеві операції

А

В

A and В

A or В

AxorB

not A

false

false

false

false

false

true

false

true

false

true

true

true

true

false

false

true

true

false

true

true

true

true

false

false

Зазначимо, що булеві операції not, and , or і хог можуть бути застосовані не лише до логічних значень, а й до цілих чисел. При цьому булева операція застосовується до окремих розрядів або пар розрядів у двійковому записі операндів за такими правилами:

1 and 1 - 1;   1 and 0 = 0;    0 and 1 - 0;     0 and 0 - 0;

1 or 1 = 1; 1 or 0-1;     0 or 1 = 1;  0 or 0 = 0;

1 xor 0 = 1;  0 xor 1 = 1;  0 xor 0 = 0. 1 xor 1 - 0;   

Для прикладу розглянемо обчислення виразу 6 and 3. У двійковій системі числа 6 та З мають вигляд 110 і 011 відповідно. До кожної пари розрядів цих операндів застосовується операція and: 1102 and 0112 = 0102- Двійковий результат 010 дорівнює десятковому числу 2.

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

Множина допустимих значень символьного (літерного) типу - це множина символів кодової таблиці ASCII, а отже, даними цього типу є окремі символи. Кожному символу відповідає ціле число (код) в діапазоні від 0 до 255. Зберігання одного символу потребує одного байта оперативної пам'яті. Нагадаємо, що символи з кодами від 0 до 127 відповідають стандарту ASCII. Вони ідентичні на всіх ІВМ-сумісних комп'ютерах. Символи з кодами від 128 до 255 можуть варіюватися залежно від типу комп'ютера та установок системного програмного забезпечення. Символьний тип позначається ідентифікатором char.

Значення символьного типу даних записуються в одинарних лапках. Наприклад, 'А', 'Iі, тощо. Сам символ одинарних лапок задається подвоєнням свого значення: " ■'. Будь-яке символьне значення можна задати також за допомогою стандартної функції chr(i), де і — вираз цілого типу зі значенням від 0 до 255, тобто код символу. Функція повертає значення символу за його кодом. Наприклад, chr(48) — це символ "0", код якого дорівнює 48, chr(49) — це символ 'Iі, chr(65)— це символ 'A', a chr(97) — символ 'а1. Також значення символу можна отримати за його ASCII-кодом. Для цього перед значенням ASCII-коду записується префікс #, наприклад: #48, #65, #97. Символи з кодами від 0 до 31 належать до керуючих символів. Якщо ці коди використовувати у процедурах введення-виве-дення, то можна управляти розташуванням даних на екрані, супроводжувати звуковими сигналами певні дії тощо. Керуючі символи можна також отримати записом у програмі комбінації символа «л» і латинської літери (табл. 2.5).

Код

Назва символу

Спосіб введення

Запис у програмі

7

Звуковий сигнал

Ctrl+G

^G

9

Горизонтальна табуляція

Ctrl+I

^I

10

Переведення рядка

Ctri+J

^J

11

Вертикальна табуляція

Ctri+L

^L

13

Повернення каретки

Ctri+M

^M

Для перетворення маленьких літер на великі використовують функцію Upcase, синтаксис виклику якої є таким: Upcase(<символ>)

Тут <символ> - маленька латинська літера. Функція Upcase не обробляє кирилицю.

Для значень символьного типу означено операції порівняння. Символи вважають рівними, якщо рівні їх ASCII-коди. Один символ вважають більшим за інший, якщо його ASCII-код більший. Зокрема,

'0' < '1' < ... < '9' < 'А' < 'В' < ... < 'Z’ < 'а' < 'b' < ... < 'z'.

Крім операцій порівняння для даних символьного типу означено операцію конкатенації (об'єднання), у результаті виконання якої утворюється рядок. Цю операцію позначають символом «+». Наприклад: '1'+’2’ = '12'.

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

Перелічуваний тип означується користувачем. Такий тип задається переліком усіх елементів множини допустимих значень. Кожне значення іменується певним ідентифікатором і зазначається у списку, який береться у круглі дужки. Ідентифікатор перелічуваного типу треба оголосити у програмі в розділі type. Синтаксис оголошення перелічуваного типу такий:
type ідентифікатор типу> - (<ідентифікатор_1>,<ідентифікатор_2>...<ідентифікатор >);

Тут ідентифікатор типу> - це ідентифікатор перелічуваного типу;

<ідентифікатор_1> <ідентифікатор_п> — допустимі значення перелічуваного типу.

Наприклад:

type Workweek = (Mon. Tue. Wed. Thu. Fri. Sat. Sun);

Color - (red.green.blue):

WinterMonth - (December.January,February):

Елементи перелічуваного типу впорядковані за номером елемента в оголошенні типу. При цьому перший ідентифікатор у списку отримує порядковий номер 0, другий ідентифікатор — номер 1 і т. д. Максимальна кількість ідентифікаторів в оголошенні перелічуваного типу становить 65 536. Тому перелічуваний тип можна розглядати як підмножину цілочислового типу word. Для перелічуваних типів означені операції порівняння -, о, <, >, <-, >=, що порівнюють порядкові номери своїх операндів.

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

7.Інтервальний тип

Інтервальний тип, як і перелічуваний тип, означується користувачем. Цей тип задається діапазоном значень базового типу, роль якого може виконувати будь-який інший порядковий тип. В оголошенні інтервального типу вказують мінімальне та максимальне значення діапазону, розділяючи їх лексемою «.>. Наведемо синтаксис оголошення інтервального типу:

type <ідентифікатор типу> -

<Мінімальне значення> .. <Максимальне значенням>

Нижче наведено приклад такого оголошення:

type digit - 0.. 9; Latin» 'A'..'Z'; WorkWeek - Mon. .Fri;

При оголошенні інтервального типу слід дотримуватися таких правил:

- два символи *..*  розглядаються як лексема, тому пробілів між ними бути не може;

- обидві константи, які визначають межі діапазону, мають належати тому самому базовому типу;

- значення лівої межі діапазону має бути меншим від значення правої межі.

8.Порядкові типи

Як уже було зазначено вище, множина допустимих значень порядкового типу даних є упорядкованою послідовністю, кожний елемент якої має свій номер. До порядкових типів даних належать цілочислові типи, символьний, логічний, перелічуваний та інтервальний тип. Дійсні типи даних не є порядковими, оскільки множина допустимих значень будь-якого дійсного типу, крім типу singl є, є надто великою для того, щоб її елементи можна було пронумерувати значеннями певного цілочислового типу.

Для обробки даних порядкових типів визначені такі стандартні функції:

функція ord повертає порядковий номер свого аргументу;

функція pred повертає значення, що передує вказаному;

функція succ повертає значення, що є наступним після значення аргументу
функції succ.

Розглянемо особливості застосування цих функцій до даних символьного, булевого та інтервального типу.

Якщо х є символом, то функція ord(x) повертає його ASCII-код, наприклад: ord('O') = 48, ord('A') - 65, ord('a') - 97. Як уже згадувалося в розділі 2.3.5, для символьного типу означена також функція chr, що обчислює символ за його кодом. Функції chr і ord є зворотними, тобто chr(ord(x)) - x для будь-якого символу х, a ord(chr(n)) - п для будь-якого цілого числа п від 0 до 255.

Для значень булевого типу в мові Pascal означено співвідношення ord(false) - 0 та ord(true) - 1. Такому порядку булевих значень відповідає результат їх порівняння: false < true.

Якщо функцію ord застосувати до значення інтервального типу, то вона поверне порядковий номер відповідного елемента базового типу.

Отже, якщо функцію pred застосувати до першого допустимого значення порядкового типу, вона поверне значення з останнім порядковим номером. Наприклад, якщо значення змінної х типу byte дорівнює нулю, то pred(x) - 255. Аналогічно, якщо функцію succ застосувати до останнього допустимого значення, вона поверне значення з найменшим порядковим номером. Наприклад, якщо значення змінної х типу word дорівнює 65 535, то succ(x) » 0.

Контрольні питання

1. Прості типи даних

2. Операції над даними

3. Цілочислові типи

4. Дійсні типи

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

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

7.Інтервальний тип

8.Порядкові типи