Базові структури мови програмування: розгалуження

Умовний оператор розгалуження if мової Python. Коваленко О.І.

Умовний оператор

Якщо при програмуванні виникає ситуація, коли при виконанні певної умови треба виконати одні дії, а у протилежному разі — виконати інші дії, використовується умовний оператор (або оператор розгалуження). Оскільки умови в Паскалі — це операції відношення, що є булевими (логічними) виразами, то умовний оператор у загальному вигляді записується таким чином:

ЯКЩО логічний вираз ТО оператор1 ІНАКШЕ оператор2;

Мовою Паскаль цей оператор записується за допомогою відповідних англійських службових слів IF, THEN, ELSE. Всю конструкцію прийнято оформлювати у вигляді вже знайомої тобі структури — "сходинками":

IF логічний вираз THEN

оператор1

ELSE

оператор2;

Порядок виконання дуже простий. Якщо значення "логічного виразу" — істина (TRUE), то виконується "оператор1", а "оператор2" — ні. Якщо ж значення "логічного виразу" — хибність (FALSE), то навпаки, виконується "оператор2", а "оператор1" — ні. Зверніть увагу на правила запису. Якщо після умовного оператора IF в програмі є ще й інші оператори, то позаду "оператор2" обов'язково ставиться крапка з комою. Є ще й скорочена форма умовного оператора:

IF логічний вираз THEN

оператор;

У цьому випадку, коли "логічний вираз" має значення хибність (FALSE), нічого не виконується, а відбувається перехід до наступного (після умовного) оператора. Згідно правил мови Паскаль після службових слів THEN та ELSE записується по одному оператору. Якщо ж у випадку "то" чи "інакше" потрібно виконати кілька операторів, то замість одного оператора потрібно використовувати СКЛАДЕНИЙ ОПЕРАТОР, який являє собою ланцюжок будь-яких операторів, обмежених службовими словами BEGIN та END:

begin оператор1; оператор2;...; оператор N end;

або краще записати:

begіn

оператор 1;

оператор 2;

………;

оператор N

end;

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

Весь оператор ІF зі всіма вкладеними складовими операторами прийнято рахувати одним оператором. Складові оператори можуть містити будь-яку кількість операторів — від одного й більше, рахуючи й інші умовні оператори.

Кожний ЕND краще за все записувати суворо під відповідним йому ВЕGIN–це допоможе не зробити помилки.Після першого складового оператора перед словом ЕLSЕ крапка з комою не ставиться, бо транслятор сприйматиме це як закінчення умовного оператора (скорочена форма), а ЕLSE— як наступний оператор, який самостійно не використовується (виникає помилка).

Задача 1.

Дано два цілих числа a і b. Вивести більше з них.

var a,b : integer;

begin

readln(a,b);

if a>b then writeln(a)

else writeln(b);

end.

Якщо ввести, наприклад, 5 3, то умова a>b буде TRUE і виконається writeln(a). На екран буде виведено число 5. Якщо ж ввести 2 6, то умова a>b буде FALSE і виконається те, що стоїть після else, тобто writeln(b).

Програма виведе число 6.

Задача 2.

З трьох цілих чисел визначити максимальне.

Визначимо 4 змінні: а,b, с,mах. У перші три користувач введе свої числа, а 4-ту будемо використовувати як допоміжну. Порівняємо першу пару чисел і те з них, що більше, розташуємо в max. Далі порівняємо число в max з третім числом, що залишилося, і знову те, яке буде більшим, запишемо в max. Наприкінці виведемо значення з max на екран — воно й буде максимальним.

Програма виглядає так.

var a,b,c: real; {три початкових числа}

max: real; {допоміжна змінна}

begin

readln(a,b,c); {введення чисел}

if a>b {визначаємо те, що більше з двох}

then max := a

else max := b;

if max< c {якщо третє число ще більше,}

then max := c; {то розміщуємо його в max; інакше}

writeln(mах) {в max залишається колишній результат}

end.

Алгоритм розв'язання цієї задачі можна побудувати і без допоміжної змінної mах (до речі, спробуйте це зробити). Однак програма вийде більш громіздкою й заплутаною.

А тепер ще одна задача:

Задача 3.

Визначити, чи є чотирикутник зі сторонами а, b, с та d ромбом.

Для розв’язання цієї задачі головне - правильно написати умови (логічний вираз). Відповідь можна дати стверджуючу тоді, коли всі сторони будуть дорів­нювати одна одній ОДНОЧАСНО, тобто і друга сторона буде дорівню­вати першій, і третя, і четверта. Тоді логічний вираз запишеться так:

(а=b) аnd (а=c) аnd (а=d)

Дужки необхідні, бо порядок старшинства операції АND вищий за операцію =, і без дужок логічний вираз буде виконуватися в іншій послідовності, що призведе до помилки. До речі, в Паскалі не можна записувати умови (логічні вирази) у вигляді а=b=с=d) чи а<b<с<d, тому що результатом першої операції (а=b чи а<b) буде логічна величина Тгue або Fаlsе, яка буде потім порівнюватися з наступною величиною с. І якщо ця величина не логічного типу (boolean), то виникне помилка, бо величини несумісних типів не порівнюються. В складному логічному виразі головне — визначити, чи одночасно повинні виконуватися всі його складові частини чи достатньо, щоб виконувалася хоча б одна з них, і використати відповідні операції АND або OR.

Зараз програма буде будуватися елементарно:

var a,b,c,d: real;

begin

readln(a,b,c,d);

if (a=b) and (a=c) and (a=d)

then writeln ('Yes')

else writeln ('No')

end.

Оператор вибору

Умовний оператор використовується, коли розв'язання, в залежності від певної умови, розгалужується на дві гілки. І, хоча цей оператор можна вживати для будь-якої кількості гілок, у випадку, коли в залежності від значення деякого виразу чи змінної алгоритм роз­галужується на декілька шляхів, зручніше застосувати оператор вибору:

CASE вираз OF

список констант; оператор;

список констант:оператор

ELSE оператор

END;

Оператор обчислює значення "виразу", обирає список констант, в якому міститься отримане значення, і виконує "оператор", що відповідає обраному варіанту, після чого виконання оператора САSЕ завершується. Якщо значення "виразу" не знайдено в жодному зі списків, тоді виконується "оператор", що йде після ELSE. До речі, перед ELSE крапка з комою також не ставиться. Якщо частина "ELSE оператор" відсутня, тоді для останнього випадку нічого виконуватися не буде. Значення "виразу" не може бути типу REAL. Самий "вираз" часто називають селектором. Як окремий випадок, роль селектора може відігравати одна змінна. Завершується оператор CASE службовим словом END.

І на заключення маленький приклад з програми.

Якщо в цілій змінній Month зберігається номер місяця, то відпо­відний номер кварталу року можна визначити так:

case Month div 3 of

0: writeln ('1 квартал');

1: writeln ('2 квартал');

2: wrіteln ('3 квартал');

3: writeln ('4 квартал')

else writeln ('Taкoro місяця немає')

end;

або так:

case Month of

1,2,3: writeln ('1 квартал');

4,5,6: writeln ('2 квартал');

7,8,9: writeln ('З квартал');

10,11,12: writeln ('4 квартал')

else writeln ('Taкoro місяця нема')

end;

Оператор вибору застосовується не дуже часто, але в певній ситуації буває дуже зручним, тому що виглядає більш чітко, ніж численні вкладені умовні оператори. Його недолік полягає у тому, що не можна вибір варіантів здійснювати за умовами, як в операторі IF. В кожному варіанті оператора CASE застосовується лише один оператор, який, звісно, можна замінити складеним оператором.

Задачі для розминки

Задача 1-1

Дано ціле число Х. Вивести Yes, якщо воно парне, або No коли Х є непарним.

Вхідні дані:

56

Вихідні дані:

Yes

var a,b:longint;

begin

read(a);

if a mod 2 = 0 then write('Yes') else write ('No');

end.

Задача 1-2

Дано цілі числа a та b. Вивести подвоєне більше число.

Вхідні дані.

4 6

Вихідні дані.

12

var a,b:longint;

begin

read(a,b);

if a>b then write(a*2) else write(b*2);

end.

Задача 1-3

Дано ціле числаa. Якщо воно парне – вивести його частку від ділення на 2, інакше 0.

Вхідні дані.

22

Вихідні дані.

11

var a: longint;

begin

read(a);

if a mod 2 = 0 then write(a div 2) else write(0);

end.

Задача 1-4

Дано цілі числа a та b. Вивести їх в один рядок в порядку зростання, тобто, спочатку менше, а потім більше.

Вхідні дані.

6 1

Вихідні дані.

1 6

var a,b:longint;

begin

read(a,b);

if a>b then write(b,' ',a) else write(a,b);

end.

Задача 1-5

Дано дійсне число p. Вивести «Yes», якщо воно ціле і «No» в іншому випадку.

Вхідні дані.

2.6

Вихідні дані.

No

var a,b:real;

begin

read(a);

b:=frac(a);

if b=0 then write('Yes') else write('No');

end.

Задача 1-6

Є додатні цілі a, b та c. Потрібно з'ясувати, чи існує трикутник зі сторонами a, b, c. Вивести «Yes» або «No».

Вхідні дані.

1 4 5

Вихідні дані.

No

var a,b,c:int64;

begin

read(a,b,c);

if (a+b>c) or (a+c>b) or (b+c>a) then write('Yes') else write('No');

end.

Задача 1-7

Дано цілі числаa,b,c,d. Вивести «Yes», якщо вони є впорядковані за зростанням, інакше вивести «No».

Вхідні дані.

3 4 4 6

Вихідні дані.

No

var a,b,c,d:longint;

begin

read(a,b,c,d);

if (a<b) and (b<c) and (c<d) then write('Yes') else write('No');

end.

Задача 1-8

Дано натуральне число N. Вивести «Yes», якщо воно є квадратом натурального числа, інакше вивести «No».

Вхідні дані.

16

Вихідні дані.

Yes

var a: longint;,b:real;

begin

read(a);

b:= frac (sqrt(a));

if b=0 then write('Yes') else write ('No')

end.

Задача 1-9

Нехай координати клітин шахової дошки задаються за допомогою чисел, тобто буквені координати «abcd…» змінено на «1234…». Так клітини (1,1) та (1,2) є сусідніми в рядку, а клітини (1,1) та (2,1) – знаходяться по сусідству у стовпчику. Дано координати двох клітинок. Вивести «Yes», якщо вони одного кольору і «No» - якщо клітинки різних кольорів.

Вхідні дані.

1 2 1 1

Вихідні дані.

No

var a,b,c,d:integer;

begin

read(a,b,c,d);

if ((a+b)mod 2) =((c+d) mod 2) then write('Yes') else write('No');

end.

Використаний ресурс http://sbs2014.blogspot.com/2014/03/2.html

Файл для завантаження

Кiлькiсть переглядiв: 8681