2. Умовні оператори; запис розгалужень.

Лінійні алгоритми зустрічаються на практиці рідко. В більшості випадків обчислення носять розгалужений або циклічний характер. При цьому оператори об’єднуються в групи, які виконуються як один оператор. Для цього призначений складений оператор. Складений оператор використовується також в тому випадку, якщо необхідно виконати декілька операторів, а синтаксис мови ПАСКАЛЬ припускає наявність лише одного оператора. Складений оператор може містити довільну кількість операторів, відділених один від одного крапкою з комою. Отже, він являє собою сукупність операторів мови ПАСКАЛЬ, об’єднаних операторними дужками begin та end.

ПРИКЛАД

begin

 readln(x,y);

 z:=x+y;

 writeln(‘z=’,z);

end;

Операторні дужки не є операторами, тому символ “;” перед службовим словом end не обов’язковий. Складений оператор використовується в умовних операторах та операторах циклу, які будуть розглянуті далі.

Умовний оператор дозволяє виконувати один з декількох операторів, що входять у його склад, у залежності від виконання певної умови. До умовних відносять оператори if та case.

Оператор умовної передачі управління if призначений для вибору однієї з двох альтернатив в залежності від значення логічного виразу.

Вид оператора:

if логічний вираз then оператор1 else оператор2

Якщо вираз приймає значення true, то виконується оператор1 (гілка then), у противному випадку, якщо вираз приймає значення false, то виконується оператор2 (гілка else). Після цього виконується наступний за оператором if оператор.

В будь-якому випадку виконується лише один оператор із вказаних у гілках . Неможлива ситуація, коли виконується або обидва оператори, або не виконується жоден із них.

Якщо по якійсь із гілок має бути декілька операторів, вони повинні бути об’єднані операторними дужками у складений оператор.

Якщо одна із гілок не містить ніяких дій, то можна скористуватись скороченою формою оператора:

if логічний вираз then оператор

Якщо вираз приймає значення true, то виконується оператор (гілка then), у противному випадку ця гілка пропускається (обходиться ). Далі виконується наступний за цим оператор.

ПРИКЛАДИ:

1. Пошук більшого із двох значень: z=max(x,y)

if x>y then z:=x else z:=y;

 

2. Впорядкування значень двох змінних за зростанням

if x>y then

begin

z:=x; x:=y; y:=z

end;

“Розширенням” оператора if є оператор варіанта case. Він призначений для вибору однієї з декількох альтернатив в залежності від значення селектора варіанта.

Вид оператора

Case селектор of

мітка1: оператор1;

мітка2: оператор2;

. . .

міткаN: операторN;

end;

Оператор case складається з виразу (селектора) і списку операторів, кожному з який передує мітка. Ці мітки називаються мітками варіанта і вони не повинні оголошуватись у розділі опису міток програми. При цьому мітки варіанта повинні мати той же тип, що і селектор. З визначення оператора case випливає, що в кожному випадку виконується лише один оператор - той, мітка якого дорівнює поточному значенню селектора. Якщо жодна з міток не дорівнює поточному значенню селектора, то ніякі оператори не виконуються.

Оператор варіанта має ще одну форму:

Case селектор of

мітка1: оператор1;

мітка2: оператор2;

. . .

міткаN: операторN;

else оператор(N+1);

end;

 

Цей оператор варіанта відрізняється від попереднього тим, що, якщо жодна з міток не дорівнює поточному значенню селектора, то виконується оператор, що слідує за зарезервованим словом else. Наявність альтернативи else в операторі case є розширенням стандартної мови ПАСКАЛЬ. Мітка оператора case може складатися з довільної кількості констант або діапазонів, відділених один від одного комами. Слідом за міткою ставиться двокрапка. Діапазон записується у виді двох констант, відділених один від одного роздільником “..”. Тип констант повинний збігатися з типом селектора. Оператор, записаний слідом за міткою оператора case, виконується в тому випадку, якщо значення селектора дорівнює однієї з констант або потрапляє в межі одного з зазначених діапазонів.

У ролі типу селектора можуть використовуватись всі типи, за винятком дійсного.

ПРИКЛАДИ:

1. case i of

1: write(‘понеділок’);

2: write(‘вівторок’);

3: write(‘середа’);

4: write(‘четвер’);

5: write(‘п’ятниця’);

6: write(‘субота’);

7: write(‘неділя’);

 end;

2.case i of

1..5: write(‘робочий день’);

6,7: write(‘вихідний’);

 end;

Розглянемо приклад запису розгалуженого алгоритму.

Задача 3. Розмір відрахувань на заробітну плату становить 1% з суми, що не перевищує 150 грн, і 2% у противному випадку. Програма має вигляд:

program vidrah;

var s:integer;

 x:real;

begin

 write(‘введіть значення фонду зарплати s:’);

 readln(s);

 if s<=150 then x:=s*0.01 else x:=s*0.02;

 writeln(‘відрахування становлять x=’,x:7:2, ‘грн’)

end.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 
75 76 77 78 79  Наверх ↑