Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 Лабораторна робота.docx
Скачиваний:
7
Добавлен:
10.02.2016
Размер:
150.7 Кб
Скачать

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;

На відміну від попереднього випадку, тут завдання розв’язано за допомогою трьох умовних операторів, тоді як там використано лише один оператор, але з укладеннями.

Другий варіант е більш переважним з точки зору зручності читання та наочності програми.