- •Лабораторна робота №2 Розгалужені структури ObjectPascal
- •1 Мета роботи
- •2 Основні теоретичні відомості
- •2.1 Оператор безумовного переходу goto
- •2.2 Логічні вирази
- •Varp,q: Boolean;
- •2.2.1 Операції відношення
- •2.2.2 Бупеві операції
- •2.2.3 Лорозрядні (побітові) булеві й сдвигові операції
- •2.2.4 Пріоритети й асоціативність операцій
- •2.3 Умовний оператор
- •2. 4 Оператор вибору варіанта
- •2.5 Приклади розв’язання задач із операторами ifі case
- •ShowMessage («Повідомлення»);
- •Xналежить до
- •Begin Readln
- •3.Контрольні запитання
- •4.Лабораторне завдання
2.2.4 Пріоритети й асоціативність операцій
У складних логічних виразах послідовність розрахунків визначають звичайними способами. За відсутності дужок послідовність обчислень логічних виразів визначають за старшинством та асоціативністю операцій.
• За старшинством (пріоритетом) логічні операції поділяють у спосіб, поданий в таблиці 2.8.
Таблиця 2.8 - Пріоритети логічних оперaцій
Операція |
Пріоритет |
not |
Перший |
and, shl, shr |
Другий |
or, xor |
Третій |
=,<>,<,>,<=,>=
|
Четвертий |
Операції з більш високим пріоритетом виконуються раніш за операції з більш низьким пріоритетом.
Якщо поряд розміщено декілька операцій з однаковими пріоритетами, то послідовність обчислень визначається асоціативно, яка у всіх операцій у ObjectPascalє однакова - зліва направо.
Наприклад: х=уorx=z
У цьому разі послідовність операцій визначають так:
x = (yorx) = z
тому що orмає вищій пріоритет, ніж операція =. Після виконання orоперація = виконається зліва направо.
Порівняно з арифметичними операціями (+, -, *, /, div, mod) операції відношення мають менший пріоритет.
Наприклад, значення відношення 2*5<=17 div3 є false, а відношення 7+3>16-4*3-true.
Слід пам'ятати, що до операндів дійсного типу не варто застосовувати операцію відношення = (дорівнює), тобто ця умова може не виконатись через неточне представлення дійсних чисел у пам'яті комп'ютера та неуникних помилок округлення при обчислюванні виразів. Тому відношення а1=а2 слід замінювати відношенням
abs(al-a2)<eps,
де eps- певна мала величина, котра характеризує похибку округлення.
Дві логічні операції можуть бути записані поряд, якщо другою з них є операція not, наприклад:
хіandnotх2
Логічні операції та операції відношення можуть зустрічатись в одному виразі. Причому відношення, що стоять зліва та справа від знаку логічної операції, має бути взято в дужки, оскільки логічні операції є вищі за пріоритетом.
За допомогою дужок можна змінювати порядок розрахунків. Наприклад, у логічному виразі
1 6 4 2 5 З
(-3>=5) ornot(7<9) and(0<=3)
цифрами зверху показано послідовність виконання операцій: результат виконання операції 1 - False, операції 2 - True, операції 3 - True, операції 4 - False, операції 5 - False, операції 6 - False. Тобто логічний вираз має значення False.
Для деяких типів у Pascalє додаткові операції, що дозволяють формувати складніші умови. Наприклад, для множини визначена операція IN(зарезервоване слово), яка перевіряє, чи входить конкретне значення в множину:
х:=[2,4,6,8,10];
Вираз 2 inх має значення true.
Вираз 5 inх має значення false.
Цей спосіб виконання перевірки більш наглядний. Наприклад, замість .
(і>=1) and(і<=10),
використовуючи операцію in, можна записати
і in[1...10]
Виконуються ці перевірки теж значно ефективніше.
2.3 Умовний оператор
Умовний оператор у Pascalдозволяє виконати один чи два оператора, які входять до нього, залежно від значення логічного виразу.
Оператор має вигляд:
if< логічний вираз >then<оператор1 >else< оператор2>;
де if(якщо), then(то), else(інакше) - службові слова;
операторі, оператор2 - прості чи складені оператори мови.
Оператор if- це єдине речення, тому ані перед then, ані перед elseкрапку з комою ставити не можна. Порядок виконання умовного оператора показано на рис.2.2
True(так) ↓False(ні)
Оператор 1
Оператор 2
Оператор 3
Як видно зі схеми, якщо значення логічного виразу дорівнює true, то виконується операторі, якщо логічний вираз - false, то виконується оператор2(оператор 1 пропускається ). Далі у кожному разі виконується оператор 3, що стоїть за оператором іf Наприклад, фрагмент програми обчислення функції
ІП X, ЯКЩО X > 0 ех, ЯКЩОХ<0
має вигляд
ifх>0 thenу :=ln(x) elseу:=ехр(х);
Тут логічний вираз - відношення х>0, оператор 1 і оператор2 - оператори присвоєння у:=1п(х) і у:=ехр(х).
Існує скорочена конструкція if(без else):
if<логічний вираз>then<оператор1>;
Порядок виконання цього оператора показано на рис. 2.3.
Якщо логічний вираз набирає значення False, то виконується наступний за ifоператор.
У якості операторів можна використовувати складні оператори. Наприклад (фрагмент програми): ifj:=0 then
beginShowMessage(‘Ділення на нуль’);Result:=0;
end// крапка з комою не ставляться !!!
else Result:=I/j;
Умова
Оператор 1
True(так) False (ні)
Рисунок 2.3 Схема скороченого оператора умовного переходу
Умовні оператори можуть бути необмежено вкладеними один в одного.
В деяких випадках складно розібратися, у якій послідовності виконуються такі вкладені оператори.Наприклад: ifa>bthen
ifа>е thenс:=1 elseс:=2;
Тут важко зрозуміти, в якому разі виконується оператор С:=2,: коли хибна є умова а>b або коли вона є правдива, але хибна є умова а>е.
У таких випадках чинне є правило: elseналежить до найближчого оператора if.
У даному прикладі частина elseс:=2 належить до найближчого оператора ifа>е then, а не до оператора ifa>bthen.
Треба намагатися запису ваги подібні вкладені оператори максимально наочно, використовуючи відступи із пропусків, уникати заплутаних складових і великого рівня вкладеності.
Треба намагатися запису ваги подібні вкладені оператори максимально наочно, використовуючи відступи із пропусків, уникати заплутаних складових і великого рівня вкладеності.
Приклад. Обчислити значення функції за формулою:
Y =
Для програмної реалізації цих виразів можна використати конструкцію умовного оператора, оскільки тут умови є альтернативними, тобто взаємно доповнюють і виключають одна одну.
Перший варіант:
ifх> 0 then
ifх>= 1 then y:=sqrt (х)/2
else y:=exp(l/3*ln (x))/3 else y:=exp(l/4*ln(abs(x)))/4;
Другий варіант, простіший, може бути виконано за допомогою логічних операцій і послідовності незалежних умовних операторів:
ifx<=0then y:=exp(1.4*ln(abs(x)))/4;
if (x>0) and (x<l) theny:=exp(l ,3*ln(x))/3;
ifx>=ltheny:=sqrt(x)/2;
На відміну від попереднього випадку, тут завдання розв’язано за допомогою трьох умовних операторів, тоді як там використано лише один оператор, але з укладеннями.
Другий варіант е більш переважним з точки зору зручності читання та наочності програми.