Цілий і логічний типи даних. Оператор розгалуження
2. Алгоритми з повторенням і розгалуженням
2.4. Цілий і логічний типи даних. Оператор розгалуження
Прості типи даних
Щоб описати змінну, необхідно зазначити її тип.
Тип змінної визначає набір значень, яких вона може набувати, форму запису їх в пам’яті та операції, які можуть бути з нею виконані.
Типи поділяються на прості та складні.
Змінна простого типу завжди містить один елемент даних (число, літеру і т. п.
Змінна складного типу являє собою таблицю значень одного типу (масив) або набір полів різних типів (запис).
До
– цілий тип integer;
– логічний тип boolean;
– символьний тип char;
– дійсний тип real.
Всі прості типи, крім дійсного, є порядковими.
Цілий тип даних
Змінна цілого типу може набувати значень з діапазону від -2147483648 до 2147483647 і займає в пам’яті 4 байти.
Приклад опису:
Var a, k, D1,D2:integer;
До даних цілого типу можна застосовувати операції:
“+” – додавання, “-” – віднімання, “*” – множення, “/” – ділення і деякі інші.
Примітка. Оскільки при діленні одного цілого числа на інше не завжди виходить ціле число, то присвоювати
Є дві операції, які застосовують тільки до даних цілого типу і отримують цілочисельний результат: div – ціла частина від ділення; mod – остача від ділення.
Приклад
19 div 4 = 4; | 19 mod 4 = 3; |
12 div 4 = 3; | 12 mod 4 = 0; |
-21 div 4 = -5; | -21 mod 4 = -1; |
-7 div (-4) = 1; | -7 mod (-4) = -3. |
Логічний тип даних
При складанні програм, крім математичних можна обчислювати значення логічних виразів.
Змінні логічного типу можуть набувати тільки одного з двох значень – False (хибний або Ні) і True (істинний або Так).
Змінні логічного типу одержують значення в результаті виконання операцій порівняння (відношення):
“<” (менше), “>” (більше), “<=” (менше або дорівнює) “>=” (більше або дорівнює), “<>” (не дорівнює), “=” (дорівнює).
Результат операції відношення дорівнює True, якщо відношення задовольняється для значень операндів, що входять у нього, і False – у протилежному випадку.
Приклад опису змінних логічного типу:
Var m1,m2,dd : boolean;
Логічний вираз може бути простим (наприклад, x > 5) або складеним. Складені вирази утворюються з простих за допомогою логічних операційand, or, not (і, або, не).
Приклад (x > = a) and (x < = b) ;
(x > a) or (x > b);
Not (x > a);
Логічна операція and має істинний результат у тому випадку, коли обидва логічні вирази істинні.
Логічна операція or має істинний результат у тому випадку, коли істинний хоча б один логічний вираз.
Логічна операція not завжди дає результат, протилежний значенню виразу.
Логічні операції, операції відношення й арифметичні операції часто зустрічаються в одному виразі. При цьому відношення, що стоять ліворуч і праворуч від знака логічної операції, потрібно взяти в дужки, оскільки логічні операції мають вищий пріоритет.
Арифметичні та логічні операції мають такий пріоритет:
Not, – (унарний)
And, *, /, div, mod
Or, xor, +, –
Операції відношення.
Порядок виконання операцій регулюється дужками.
У мові Паскаль не можна вводити логічні дані за допомогою оператора Read. Проте передбачено виведення значень змінних логічного типу за допомогою оператора Write.
Приклад
Обчислити значення виразу: (a < b) and (b < c) and (a < c), при a = 1, b = 2, c = 3. Значення виразу дорівнює True, тому що істинними є всі значення простих логічних виразів.
Оператор розгалуження
Якщо розв’язок задачі має кілька варіантів, що залежать від початкових умов, то при складанні програм використовується оператор розгалуження (або умовний оператор). Він забезпечує виконання чи не виконання команди або блоку команд залежно від заданих умов.
Оператор розгалуження має повну та неповну форми.
Повна форма оператора розгалуження має вигляд:
If <умова> Then <команда 1> Else <команда 2>;
Або
Якщо <умова> То <команда 1> Інакше <команда 2>;
Виконання оператора розгалуження починається з обчислення значення логічного виразу, записаного в умові.
Якщо умова істинна, то виконується <команда 1>, у протилежному випадку – <команда 2>.
Якщо на місці однієї команди потрібно записати кілька, то вони об’єднуються службовими словами Begin-End.
Приклад №1
Вивести на екран більше з двох даних чисел.
Розв’язування
Program Example;
Var x, y: integer;
Begin
Write (‘ x, y = ‘);
Readln(x, y);
If x>y Then Writeln (x)
Else Writeln (y);
End.
Зверніть увагу на те, що перед службовим словом Else крапка з комою не ставиться.
Алгоритм цієї задачі зображено на малюнку.
Неповна форма оператора розгалуження має вигляд:
If <умова> Then <команда>;
Або
Якщо <умова> То <команда>;
Гілка Else може бути відсутньою, якщо у випадку невиконання умови нічого робити не потрібно.
Наприклад, якщо значення змінної – х менше за 0, то замінити його на протилежне. Задача розв’язується за допомогою неповної форми оператора:
If х < 0 Then х: = – х;
Використовуючи оператор розгалуження слід бути уважним: якщо поставити після Then крапку з комою, програма скомпілюється, але працюватиме неправильно:
If х < 0 Then; х : = – х;
У такому випадку команда х : =- х не є частиною умовного оператора If-Then, і буде виконана обов’язково. Кажуть, що в гілці Then записаний порожній оператор.
Приклад №2
Написати програму для перевірки, чи належить ціле число, введене з клавіатури, інтервалу [0,5].
Розв’язування
Позначимо через х число, яке вводиться з клавіатури користувачем. За умовою х – це змінна цілого типу. Число х належить заданому інтервалу [0, 5] лише в тому випадку, якщо одночасно виконуються дві умови: (х > = 0) і (х < = 5). Тому для утворення складної умови скористаємось логічною операцією and. Program Example;
Var x: integer;
Begin
Write ( ‘x = ‘ ) ;
Readln (x);
If (x > = 0) and (x = < 5)
Then Writeln(x,’ належить ‘)
Else Writeln (x, ‘не належить ‘);
End.
Вкладені оператори розгалуження
Під час розв’язування задач часто розглядається не два, а більше варіантів. Це можна зробити, використовуючи послідовно кілька умовних операторів. У цьому випадку після службових слів Then і Else може записуватися новий умовний оператор.
Приклад №3
Дано цілі числа а, b, с. Якщо а < = b < = с, то всі числа замінити їх квадратами. Якщо a > b > c, то кожне число замінити найбільшим із них, у інших випадках – змінити знак кожного з чисел.
Розв’язування
Умову задачі перепишемо так:
Якщо a < = b < = c, то a: = a2 , b: = b2, с: = с2;
Якщо a > b > c, то a: = c, b: = с,
У решті випадків: a: = – a, b: = – b, с: = – с.
Program Example;
Var a, b, c: integer;
Begin
Writeln (‘Введіть числа a, b, c’); Readln (a, b, c);
If (a < = b) and (b < = c)
Then begin
A: = SQR (a); b: = SQR (b); c: = SQR (c) end
Else if (a > b) and (b > c) Then
Begin
A: =c; b: =c
End
Else begin
A: = – a; b: = – b; c: = – c
End;
Writeln (a : 3, b : 3, c : 3)
End.
Примітка. Якщо вкладеними умовними операторами є неповні умовні оператори, то можуть виникати проблеми, пов’язані із встановленням меж умовних операторів. У таких випадках службове слово Else відноситься до найближчого Іf.
Питання для самоконтролю:
1. Які типи належать до простих типів даних в АЛГО?
2. Яких значень можуть набувати змінні цілого типу та які операції з ними можна виконувати?
3. Визначити значення логічного виразу: (-3>=5) or (7<9) and (0>3).
4. Записати послідовність операторів для знаходження неповної частки й остачі від ділення цілого числа а на ціле число b.
5. Які сполучники використовуються у складних відношеннях?
6. Яким може бути результат логічної операції відношення?
7. Після виконання операторів
А :=0;
If a <> 0 then; a: = 2;
Значення змінної а дорівнює 2. Поясніть чому.
8. Використовуючи складений оператор, спростіть такий фрагмент програми:
If a > b then c: = 1;
If a > b then d: = 2;
If a < = b then c: = 3;
If a < = b then d: = 4;
9. Яким буде значення змінної а після виконання операторів:
A: = 3;
If a < 4 then Begin a: = a + 2; a: = a + 3 End.
10. Запишіть умовний оператор, у якому значення змінної обчислюється за формулою а + b, якщо а – непарне, а * b, якщо а – парне.