Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Pascal.rtf
Скачиваний:
5
Добавлен:
22.11.2019
Размер:
2.69 Mб
Скачать

Тема 4 Операції над даними

Бінарні та унарні операції:

а) бінарні арифметичні операції - приймають 2 операнда. До них відносяться додавання, віднімання, множення, ділення. Наприклад, в виразі а+р вказані два операнди (а і р) та знак операції (+).

б) унарні арифметичні операції приймають один операнд. Наприклад, в виразі –х відбувається зміна знаку операнду х. Для операції зміни знаку потрібний тільки один операнд, тобто ця операція унарна.

Арифметичні операції

Арифметичні операції мови Паскаль наведені у таблиці 4.

Таблиця 4 – Арифметичні операції мови Паскаль

Позначення

Назва

Тип операндів

Тип результату

Бінарні арифметичні операції

+

додавання

Цілочисельний або

дійсний

Відповідно до типу операндів

-

віднімання

Цілочисельний або

дійсний

Відповідно до типу операндів

*

множення

Цілочисельний або

дійсний

Відповідно до типу операндів

/

ділення

Цілочисельний або

дійсний

x/y - завжди дійсний тип y¹0

div

Цілочисельне ділення

Тільки цілочисельний

Цілочисельний

x/y – округляється до найменшого цілого

mod

обчислення остачі при діленні

Тільки цілочисельний

Цілочисельний

Х mod У=Х-(Х div У)*У

Унарні арифметичні операції

-

унарний мінус (зміна знака змінної)

Цілочисельний або

дійсний

Відповідно до типу операндів

Х = - Х

Операції порівняння

Таблиця 5 – Операції порівняння мови Паскаль

Позначення

Назва

Тип операндів

Тип результату

=

Дорівнює

Цілочисельний,

дійсний, символьний

Булів тип

<>

Не дорівнює

Цілочисельний,

дійсний, символьний

Булів тип

>

Більше

Цілочисельний,

дійсний, символьний

Булів тип

<

Менше

Цілочисельний,

дійсний, символьний

Булів тип

>=

Більше або дорівнює

Цілочисельний,

дійсний, символьний

Булів тип

<=

Менше або дорівнює

Цілочисельний,

дійсний, символьний

Булів тип

in

Належність до множини

Змінна типу множина

Булів тип

Логічні операції

Логічні операції використовуються для змінних логічного типу. Опис логічних операцій та правила їх використання наведені у таблицях 6 та 7.

Таблиця 6 – Логічні операції мови Паскаль

Позначення

Назва

Тип операндів

Тип результату

not

заперечення

Булів тип

Булів тип

and

кон’юнкція - логічне “И” (множення)

Булів тип

Булів тип

or

диз’юнкція – логічне “АБО” (додавання)

Булів тип

Булів тип

xor

виняткове “АБО”

Булів тип

Булів тип

Таблиця 7 – Використання логічних операцій мови Паскаль

U

not U

U

V

U and V

U

V

U or V

U

V

U xor V

T

F

T

T

T

T

T

T

T

T

F

F

T

T

F

F

T

F

T

T

F

T

F

T

F

F

T

T

F

T

T

F

F

F

F

F

F

F

F

F

Операції над бітами

Операції над бітами виконуються над цілочисельними або символьними типами. Результатом операції є ціле число або символ (у відповідності ло типу операндів), біти якого формуються з бітів операндів за правилами, що є аналогічними до відповідних логічних операцій.

Таблиця 8 – Операції над бітами мови Паскаль

Позначення

Назва

Тип операндів

Тип результату

not

заперечення

Цілочисельний або символьний

Відповідно до типу операндів

and

“И”

Цілочисельний або символьний

Відповідно до типу операндів

or

“АБО”

Цілочисельний або символьний

Відповідно до типу операндів

xor

виключаюче “АБО”

Цілочисельний або символьний

Відповідно до типу операндів

shl

i shl j

зміщення ліворуч на j бітів

Цілочисельний або символьний

Відповідно до типу операндів

shr

i shr j

зміщення праворуч на j бітів

Цілочисельний або символьний

Відповідно до типу операндів

Пріоритет операцій

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

  1. Операції з більшим пріоритетом виконуються раніше ніж операції з меншим пріоритетом.

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

  3. Операнд, що знаходиться між двома операціями “прив’язаний” сильніше до операнду з більшим пріоритетом.

  4. Операції з однаковим пріоритетом виконуються послідовно зліва направо.

У таблиці 9 наведені операції мови Паскаль по мірі зменшення пріоритету.

Таблиця 9 – Пріоритет операцій мови Паскаль

Операції

Тип операцій

not , @, +, -, [ ], ( ), *

Унарні

*, /, div, mod, and, shl, shr

Бінарні

+, -, or, xor

:=, =, <>, <, >, <=, >=, in

Операція присвоєння

Загальний вигляд:

<ідентифікатор змінної > : = < вираз > ;

Вираз може містити константи, змінні, назви функцій, знаки операцій та дужки. Наприклад:

F:=3*c+2*sin(x) - (k - r mod t).

Правила використання операції присвоєння:

  1. Присвоєння можливе для змінних та виразів всіх типів ( за виключенням FILE ).

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

Перетворення типів

Неявне перетворення типів

Перетворення типів відбувається коли необхідно виконати якісь операції над операндами різних типів. Наприклад:

var

a:byte;

b:integer;

begin

ReadLn (a);

b:=a;

end.

В наведеному прикладі змінна а типу byte – беззнакове ціле розміром в 1 байт, змінна b – ціле зі знаком розміром в 2 байти. Зрозуміло, що вони мають різні формати. Таким чином перш ніж присвоїти змінній b значення змінної а, необхідно призвести формат змінної а до формату змінної b. Це перетворення відбувається без привертання уваги користувача (програміста) або неявно.

Перетворення типів це процес приведення формату подання одного числа до формату іншого.

Мова Паскаль вимагає жорсткої типізації. Всі використовувані у програмі операції мають виконуватись над операндами одного типу або сумісного з ним типу.

Сумісними вважаються типи, для яких можливе виконання неявного перетворення типів.

Два типи вважаються сумісними якщо:

  • обидва вони є один і той самий тип (обидва дійсні, обидва цілі);

  • один тип є тип - діапазон іншого типу (наприклад, тип byte за своїм діапазоном є підтипом для integer; тип integer є підтипом для real, тому що цілі числа є підмножиною дійсних чисел, але не навпаки).

Неявне перетворення типів відбувається в таких випадках:

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

  • змінна – нетипізований покажчик вказує на область пам’яті, яка в залежності від потреб може використовуватись для збереження значень різних типів.

  • при використанні змінної – запису з варіантними полями.

  • при наданні однакової абсолютної адреси для декількох змінних різних типів.

Явне перетворення типу

Явне перетворення типу може відбуватися двома способами:

  • Явне приведення типу.

Якщо ми хочемо присвоїти якесь значення змінної Х типу Т1 змінній У типу Т2, то для явного приведення типів можна задати такий вираз:

У := Т2 ( Х ) .

Наприклад,

Var

I : integer;

H : real;

Begin

H := real ( I );

End;

  • Перетворення з використанням відповідних функцій перетворення.

Дійсний тип може бути перетворений в цілий такими функціями:

  • TRUNC (x: <дійсний тип>): Longint - відкидання десяткових знаків після точки, тобто округлення до найменшого цілого;

  • ROUND (x: <дійсний тип>): Longint - округлення до найближчого цілого за математичними правилами.

Символьний тип може приводитись до цілого та навпаки

  • CHR (i: <цілий тип>): char - повертає символ;

  • ORD (c) : Longint - порядковий номер значення дискретного типу;

Стандартні функції мови Паскаль

Таблиця 10 – Стандартні функції мови Паскаль

Назва

Тип аргументу

Тип результату

Дія

Математичні функції

Abs (x)

Дійсний або цілий

Відповідно до типу аргументу

½x½

Cos (x);

Дійсний

Дійсний

Косинус Х. Х подається в радіанах.

Sin (x);

Дійсний

Дійсний

Синус Х. Х подається в радіанах.

ArcTan (у)

Дійсний

Дійсний

Арктангенс у.

Pi

-

Дійсний

значення числа p

Frac (x)

Дійсний

Дійсний

повертає дробову частину числа

Int (x)

Дійсний

Дійсний

повертає цілу частину числа

Exp (x)

Дійсний

Дійсний

еx

Ln (x)

Дійсний

Дійсний

повертає натуральний логарифм аргументу

SQR (x)

Дійсний або цілий

Дійсний

x2

SQRT (x)

Дійсний або цілий

Дійсний

Öx

Randomize

-

-

Ініціалізація генератора випадкових чисел

Random

-

Дійсний

Повертає псевдовипадкове число в інтервалі [0, 1]

Random (n)

Цілий

Цілий

Повертає псевдовипадкове число в інтервалі [0, n]

Round

Дійсний

Цілий

Округлення числа до найближчого цілого

Функції перетворення типів

Trunc

Дійсний

Цілий

Відсікає дробову частину дійсного числа

Ord

Символьний

Цілий

Повертає ASCII-код заданого символу

Chr

Цілий

Символьний

За заданим ASCII-кодом повертає символ

Функції з дискретними типами

INC (i, n)

Цілі

Цілий

Збільшує величину і на величину n

DEC (i, n)

Цілі

Цілий

Зменшує величину і на величину n

ODD (n)

Цілий

Логічний

Перевіряє чи є аргумент парним числом

PRED (n)

Порядковий

Цілий

повертає попереднє значення

SUCC (n)

Порядковий

Цілий

повертає наступне значення

Операції введення / виведення даних мови Паскаль Форматне виведення

Введення даних

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

READ (<список введення >);

READLN (<список введення >);

де <список введення > - перелік ідентифікаторів змінних, значення яких ми хочемо ввести. Наприклад, якщо у програмі необхідно задати значення трьох змінних a, b, c, то оператор записується так: READ (a, b, c).

Закінчення –LN говорить про те, що після виконання оператору курсор на екрані буде переведений на новий рядок (line).

Значення змінних вводяться з консолі (клавіатури) і за кількість та типом повинні відповідати змінним, що задані у списку введення. Тобто якщо змінні a, b, c мають відповідно дійсний, цілий та символьний типи, то при введенні необхідно задати три значення:

  • перше – дійсного типу для змінної а;

  • друге – цілочисельне для змінної b;

  • третє – символьне для змінної с.

Порядок подання значень при введенні змінювати неможна.

Процедура READ (ReadLn) чекає введення послідовності символів, що формують число зі знаком, ігнорує всі попередні пропуски (маркери кінця рядка і т.д.). При введенні елементів списку змінні відокремлюються прогалинами або після кожного значення клавішею <Enter>. Зчитування закінчується при зустрічі першого пропуску. Якщо у цифровому рядку будуть символи, що не відповідають чисельному формату, генерується помилка введення. Не рекомендується вказувати в одному списку введення змінні числового та символьного типів одночасно, так як прогалина-роздільник може бути сприйнятий як значення типу CHAR, яке вводиться.

Виведення даних

WRITE (<список виведення >);

WRITELN (<список виведення >);

де <список виведення > - перелік ідентифікаторів змінних, значення яких ми хочемо вивести на екран.

Якщо у програмі заданий оператор WRITE (a, b, c), то в результаті на екран одна за одною будуть виведені значення трьох змінних.

Але постає така проблема: значення змінних можуть бути виведені на екран підряд без роздільних прогалин.

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

1) форматне виведення :

в списку виведення для кожної змінної вказується

<ідентифікатор змінної > : L : D,

де L – загальна ширина поля виведення, D - кількість позицій під дробову частину.

2) використання при виведенні допоміжних рядків – повідомлень.

Крім значень змінних на екран може бути виведений набір символів (рядок повідомлення) :

WRITELN (’ Значення z= ’, z);

де ’ Значення z= ’ – рядок – повідомлення, вказується в лапках, z - ідентифікатор змінної. Якщо z дорівнює, наприклад, 27, то на екран буде виведене:

Значення z= 27

Виведення рядків – повідомлень можна комбінувати з форматним виведенням:

WRITELN (‘ a, b ’, a:10, b:10);

Контрольні запитання за темою

  1. Які арифметичні, логічні операції, операції над бітами числа та операції порівняння мови Паскаль ви знаєте?

  2. Що таке унарна та бінарна операція?

  3. Що таке пріоритет операцій? Які правила пріоритету операцій мови Паскаль ви знаєте?

  4. Як записується операція присвоєння мови Паскаль? Які правила використання операції присвоєння ви знаєте?

  5. Що таке перетворення типів? Коли відбувається неявне перетворення типів? Наведіть приклади.

  6. Як здійснити явне перетворення типів? Які стандартні функції перетворення типів ви знаєте?

  7. Які стандартні функції мови Паскаль ви знаєте? Якого типу аргументи вони приймають і якого типу результат повертають?

  8. Які операції використовуються у програмі для введення та виведення даних?

  9. Що таке список введення та список виведення? Які правила їх формування?

  10. Що таке форматне виведення даних? Чому доцільно його використовувати у програмі? Як відрізняється форматне виведення цілих та дійсних змінних?