double arrow

Вирази, операнди, операції.


1

Змінні і константи всіх типів використовуються у виразах.

Вираз задає порядок виконання дій над елементами даних і складається з операндів (констант, змінних, звертань до функцій), круглих дужок і знаків операцій.

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

Операції в мові Паскаль підрозділяються на:

* арифметичні,

* відношення (порівняння),

* логічні, та ін.

Операції можуть бути унарними та бінарними. У першому випадку операція відноситься до одного операнду і завжди записується перед ним, у другому операція виражає відношення між двома операндами і записується між ними.

Арифметичні операції задають арифметичні дії у виразах над значеннями операндів цілих та дійсних типів. Найбільш часто використовуються арифметичні операції, що подані в наступній таблиці:

Операція Дія Типи операндів Тип результату
Бінарні      
+ Додавання Цілий Дійсний Цілий Дійсний
- Віднімання Цілий Дійсний Цілий Дійсний
* Множення Цілий Дійсний Цілий Дійсний
/ Ділення Цілий Дійсний Дійсний Дійсний
Div Ділення націло Цілий Цілий
mod Залишок від ділення Цілий Цілий
Унарні      
+ Збереження знака Цілий Дійсний Цілий Дійсний
- Заперечення знака Цілий Дійсний Цілий Дійсний

Операціївідношення виконують порівняння двох операндів і визначають, значення виразу є істинним або хибним. Результат завжди має булівський тип і приймає одне з двох значень: True (істина) або False (хибність). Всі операції відношення зведені в наступну таблицю:




Операції Назва Вираз Результат
= Дорівнює А=В True, якщо А дорівнює В
<> Не дорівнює A<>B True, якщо А не дорівнює В
> Більше A>B True, якщо А більше В
< Менше A<B True, якщо А менше В
>= Більше або дорівнює A>=B True, якщо А більше або дорівнює В
<= Менше або дорівнює A<=B True, якщо А менше або дорівнює В

Результатом виконання логічного (булевського) виразу є логічне значення True або False. Операндами служать дані тільки булівського типу. Список логічних операцій наведений у таблиці:

Операція Дія Вираз А В Результат
not Логічне заперечення not A True False   False True
and Логічне “ТА” A and B True True False False True False True False True False False False
or Логічне “АБО” A or B True True False False True False True False True True True False

Виконання кожної операції відбувається з урахуванням її пріоритету. Значення пріоритетів зазначені в наступній таблиці:



Операція Пріоритет Вид операції
Not, унарні «-» і «+» Перший (вищий) Унарна операція
*, /, div, mod, and Другий Операції типу множення
+, -, or Третій Операції типу додавання
=, <>, <, >, <=, >= Четвертий (нижчий) Операції відношення

Арифметичні вирази у якості операндів можуть містити імена функцій. З поняттям функції ми будемо знайомитись пізніше в курсі програмування, але стандартні функції (cos, sin, x2 та інші) Вам знайомі з курсу математики і їх використання у курсі інформатики відрізняється тільки правилами запису (синтаксису). Так, на відміну від математики, в програмуванні аргумент функції обов’язково береться в круглі дужки. Нижче подана таблиця, що містить ці функції. Літерами Х та І позначені відповідно: Х – цілі та дійсні типи, І – тільки цілі.

Abs(X) Обчислення абсолютного значення (модулю) Х. Тип результату збігається з типом параметра.
ArcTan(X) Обчислення кута, тангенс якого дорівнює Х, значення кута подано в радіанах і може знаходитися в діапазоні від -p/2 до p/2. Для перетворення значення кута з радіанної міри в градусну необхідно значення кута помножити на число 180/p. Результат має дійсний тип.
Cos(X) Обчислення косинуса Х, параметр задає значення кута в радіанах. Для перетворення значення кута з радіанної міри в градусну необхідно значення кута помножити на число 180/p. Результат має дійсний тип.
Frac(X) Знаходження дробової частини Х. Результат має дійсний тип.
Int(X) Знаходження цілої частини Х (дробова частина відкидається). Результат має дійсний тип.
Pi Повертає значення числа p (3.1415926).
Sin(X) Обчислення синуса Х. Параметр задає значення кута в радіанах. Для перетворення значення кута з радіанної міри в градусну необхідно значення кута помножити на число 180/p. Результат має дійсний тип.
Sqr(X) Пiднесення до квадрату значення Х. Тип результату збігається з типом параметра.
Sqrt(X) Обчислення квадратного кореня з Х. Тип результату дійсний.
Random Генерує значення випадкового числа з діапазону від 0 до 0.99. Тип результату дійсний.
Random(P) Генерує значення випадкового числа з діапазону від 0 до P. Тип результату цiлий. Щоб випадкові числа були “більш випадковими”, необхідно періодично змінювати базу генерації. Для цього використовується процедура Randomize, що дозволяє при кожному новому запуску програми отримувати різні випадкові числа.

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

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

(a-b)/(2*c+(a/(c+(b-5)/(c-b))))

А такий:

на мові Паскаль:

1E+04*a-34.2*cos(beta).

Дуже важливим при створенні виразів являється слідкування за типами операндів. Як було зазначено вище, тип даних дозволяє встановлювати внутрішній формат збереження даних та контролювати дії, що виконуються над ними. Контроль за використанням змінних на етапі компіляції програми – важлива перевага мови Паскаль над іншими мовами програмування. Але з іншого боку іноді не дуже зручно те, що Паскаль майже не дозволяє автоматичне перетворення типів. Виключення зроблено тільки у відношенні до констант та змінних цілих типів, що дозволяється використовувати у виразах дійсного типу. Наприклад, якщо змінні X та Y описані наступним чином:

Var

X: integer;

Y: real;

то оператор

Y := X+2;

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

X := 2.78;

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

Аналогічно не можна змішувати літерні та числові типи даних,тобто вираз типу:

5 + ‘F’

являється помилковим.

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

Chr(I) Перетворює цілий тип у літерний, тобто повертає символ стандартного коду таблиці ASCII з номером, що дорівнює значенню I. Якщо значення більше 255, виникає програмне переривання. Наприклад: Chr(105); результат=‘i’.
Ord(S) Для значень літерного типу S, функція Ord повертає їх номер у стандартному коді обміну інформацією у відповідності з таблицею ASCII. Таким чином, літерний тип перетворюється у цілий. Наприклад:) Ord(‘A’); результат = 65.
Round(X) Повертає значення Х, округлене до найближчого цілого числа. Результат має цілий тип, тобто дійсна змінна перетворюється на цілу Наприклад: Round(5.6); Результат = 6.
Trunc(X) Повертає найближче ціле число, яке менше або дорівнює Х, якщо Х>=0, і більше або рівне Х, якщо Х<0. Результат відноситься до цілого типу.

Виходячи з цього наступний оператор:

X := Y/X;

буде помилковим (X та Y мають ті ж самі типи, що описані вище), а оператор

X := round(Y/X);

помилок не має.

Зверніть також увагу на те, що операції DIV та MOD теж виконуються тільки з цілими типами даних і спроба використати у якості операторів для них дійсні дані призводить до помилки.

Для величин перелічувальних типів (всі цілі, літерний та булевський) існують також декілька зручних стандартних функцій, наведених у наступній таблиці:

Pred(X) Визначає попереднє значення для даного типа. Наприклад, Pred(5)=4, Pred(True)=False, Pred(‘B’)=’A’.
Succ(X) Визначає наступне значення для даного типа. Наприклад, Succ(5)=6, Succ(True)=False, Succ(‘A’)=’B’.
Odd(X) Перевіряється число на парність. Аргументом цієї функції може бути тільки число типу longint, а результат дорівнює true, якщо аргумент парний, і false – в протилежному випадку.
1