Кожний елемент даних (константи, змінні) належить до деякого типу, який означає як множину значень, що може набувати елемент, так і операції, які можна над ними виконувати.
У мові Паскаль є чотири стандартних скалярних типи:
цілий (integer), дійсний (real), булевий (boolean), символьний (char). Інші скалярні типи, відмінні від стандартних, можуть бути введені програмістом.
Тип кожної змінної, яка використовується у програмі, повинен бути явно заданий за допомогою описів (у розділі опису змінних). Розділ опису змінних починається із службового слова VAR і має вигляд:
VAR список ідентифікаторів змінних: тип;
………………………………………..
список ідентифікаторів змінних: тип;
Ідентифікатори в списку відокремлюються один від одного комою.
Наприклад,
VAR і, a, m2 : integer;
j, r5 : real;
d: char;
Тут описано 6 змінних: і, а, m2 — цілого типу (integer), j, r5 —дійсного типу (real), d— символьного типу (char).
На відміну від змінних вказувати тип константи за допомогою спеціального ідентифікатора типу не слід; машина може визначити тип константи за її зображенням.
Цілий тип (integer). Змінні цілого типу можуть набувати лише цілих значень. У мові Паскаль можна подати цілі числа з відрізка [minint; maxint], де minint і maxint— цілі константи, які залежать від реалізацій. Наприклад, minint=—32768, maxint = 32767. Спроба обчислити вираз, значення якого виводить за межі вказаного відрізка, призводить до помилки. Компілятори з Паскаля, як правило, мають вбудовану числову константу, Ім'я якої maxint; значення константи є 32767.
До операндів цілого типу можна застосовувати такі операції: + (додавання), — (віднімання), * (множення), DIV (цілочисельне ділення), MOD (остача від цілочисельного ділення). Такі операції виконуються точно. У виразах службові слова DIV і MOD відокремлюються від операндів принаймні одним пропуском. Залежністьміж операціями DIV і MOD виражається співвідношенням:
a MOD b = a --(a DIV b)*b, де а>0 i Ь>0.
При обчисленнях порядок операцій загальний; операції множення, ділення і знаходження остачі виконуються перед операціями додаваня і віднімання.
Якщо для цілих т і п виконується співвідношення (т DIV п) * п = т або тMOD п = 0, то п є дільником m.
Дійсний тип (real). Змінні типу real можуть набувати як цілі, так і значення з дробовою частиною (—2.75,2.0,3.2Е—5 і т. д.). У пам'яті ЕОМ можна подати дійсні числа з деякої скінченної підмножини дійсних чисел.
До дійсних операндів можна застосовувати такі операції:
+ (додавання), — (віднімання), * (множення), / (ділення); в результаті операції дістанемо результат дійсного типу. В одному арифметичному виразі можна використовувати цілі і дійсні значення (константи, змінні, підвирази). Якщо один з операндів операції +, -, * є дійсний, то другий перед виконанням операції автоматично перетворюється до дійсного типу. При виконанні операції ділення обидва операнди можуть бути і цілого типу, але результат операцій завжди дійсний.
Дійсні значення в ЕОМ запам'ятовуються з обмеженим числом цифр (число у формі з плаваючою крапкою) і тому є наближеними. Тому не слід порівнювати дійсні числа між собою. На практиці замість порівняння двох дійсних значень а і b доцільно користуватися таким співвідношенням:
abs (а—b)<e,
де e — деяка мала константа. Якщо порядок а і b невідомий, то e повинно бути функцією одного з них. Наприклад, можна взяти
abs (а — b) < abs (а * 1E — 6)
Для роботи з числовими величинами у мові Паскаль є ряд стандартних функцій, які подано в табл. 2.1.
Зауважимо, що округлення значення х у функції round (x) здійснюється за правилом:
(trunc — скорочення від truncate — відтинати, відрізати; round — круглий). Наприклад.
trunc (5.4) = 5, trunc (— 2.8) = — 3, round (4.2) =4,
round (6.9) = 7, round (—2.5) = —2, round (3.5) = 4.
Таблиця2.1
Позначення функції
| Математичне позначення функції
| Тип
аргументу
| Тип
рeзультату
| Примітка
|
abs (x)
| І х І
| real або іnteger
| real або integer
|
|
sqr (x)
| Х2
| real або іnteger
| real або integer
|
|
sqrt (x)
|
| real або іnteger
| real
| Х ³ 0
|
In (x)
| In х
| real або
|
| Х >0
|
exp (x)
| ex
| integer
| real
|
|
cos (x)
| cos х
|
|
|
|
sin (x)
| sin х
|
|
| X в радіанах
|
arctan (x)
| arctg x
|
|
| головне значення в радіанах
|
trunc (x)
| Виділення цілої частини х
| real
| integer
|
|
round (x)
| Округлення х до цілого
| Real
| integer
|
|
Булевий тип (boolean). Булеві (логічні) змінні набувають одне значення: true (істинно) або false (хибно). Слова true і false є булевими константами. Булеві змінні як змінні інших стандартних типів повинні бути описані в розділі опису змінних. Наприклад:
VAR a, b, c: boolean;
До булевих операндів можна застосовувати такі операції: AND(логічне І, кон'юнкція), OR (логічне АБО, диз'юнкція), NOT (логічне НЕ, заперечення).
Якщо а, b, c, d — булеві змінні, то булевим виразом буде, наприклад, вираз
a AND NOT b AND (c OR d).
Крім булевих операцій результат типу boolean видають операції відношення =, < >, <=, >, >= застосовані до виразів будь-якого впорядкованого типу. Наприклад, вираз 2 < 5 має значення true, а 4 < >4 - значеня false.
У мові Паскаль є стандартні функції (предикати), які набувають булевих значень:
odd (x) — задає значення true, якщо х — ціле непарне число; false — якщо парне;
eof (f) — задає значення true, якщо файл f перебуває в стані «кінець файла»; false — у противному випадку (eof — скорочення від End Of File — кінець файла);
eoln (f) — задає значення true, якщо файл f перебуває в стані «кінець рядка»; false — у противному випадку (eoln скорочення від End of Line — кінець рядка).
Символьний тип (char). Змінна символьного (літерного) типу може набувати значень лише одного символу (char — скорочення від character — символ). У мові Паскаль взагалі не визначена множина символів, а в кожному конкретному випадку використовується множина, яка визначається транслятором.
Проте незалежно від реалізації, у мові Паскаль вимагається, щоб усі символи даної множини були впорядковані (кожен символ мав свій порядковий номер). Значення порядкових номерів символів визначається конкретною реалізацією.
Символьні константи — це символи, які взято в апострофи (апостроф в рядку повторюється двічі). Наприклад, символьними константами є 'А', 'С', '7', '5*, ':', "",’ ‘. Значення останньої константи — це пропуск, який завжди включається у множину символів.
Константи і змінні символьного типу можуть бути операндами в операціях порівняння. Так, можна записати вирази 'd ' > 'а',':' < >'; ', які видають результат типу boolean.
Для відображення множини символів у підмножину натуральних чисел і навпаки існують дві стандартні функції:
ord (С) — визначає порядковий номер символу із заданого набору символів;
chr (I)—символом, порядковий номер якого дорівнює І.
Очевидно, chr (ord (С)) == С.
Зазначимо, що впорядкування заданої множини символів визначається такою властивістю:
якщо С 1 і С2 мають символьний тип i q одна з операцій відношення =,< >, <, >=, >, ) ^ то СІ q С2 набуває значення true тоді і тільки тоді, коли те саме значення набуває ord (С1) 6 ord (C2).
Зокрема, справедливі такі відношення:
‘ ‘<’A’<’B’<’C’ …’X’<’Y’<’Z’
‘a’<’b’< …’z’, ‘0’<’1’<’2’<…<’9’.
Існують ще дві стандартні функції pred (попередній елемент) i succ (наступний елемент), які можуть бути застосовані до символьних аргументів:
pred (С) — визначає символ, який знаходиться в заданій впорядкованій множині символів безпосередньо перед символом С;
succ (С) визначає символ, який знаходиться безпосередньо після символу С.
Усі елементи множини символів, крім крайніх, мають попередній І наступний елементи. Останній елемент не має наступного, перший — попереднього. Якщо відповідного елемента немає, то результат функції не визначено.
Вирази. Вирази задають дії та послідовність обчислення значень. Вони утворюються з констант, змінних, функцій за допомогою знаків операцій і дужок. При обчисленні виразу операції виконуються в строго визначеному порядку з урахуванням загальноприйнятих правил ієрархії операцій і дужок. Значення функцій обчислюється насамперед, якщо вираз не містить дужок, то операції виконуються в такому порядку:
1) NOT
2) * , /, DIV, MOD, AND (операції типу множення)
3) +, —, OR (операції типу додавання)
4) =, < >, <, <=, >, >= (операції відношення).
Операції одного старшинства виконуються послідовно зліва направо.
Якщо треба змінити вказаний порядок операцій, то використовуються круглі дужки.
Наведемо приклади деяких виразів:
1. sqrt (2*sqr (x) + 1) - 3*sin (x)/(x + у) + exp (y+ ln(x)).