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.
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 Наверх ↑