УМОВНИХ
ОПЕРАТОР h2>
ПОВНА І
Неповний розвилки. ОПЕРАТОР ВИБОРУ h2>
На практиці
вирішення більшості задач не вдається описати за допомогою програм лінійної
структури. При цьому після перевірки деякого умови виконується та чи інша
послідовність операторів, однак відбувається порушення природного
порядку виконання операторів. Для цих цілей використовують управляючі оператори.
Умовний оператор використовується для реалізації розгалужень у програмі, які
відбуваються при виконанні деякого умови і має наступну структуру p>
IF <логічне вираження>
THEN серія1 ELSE серія2; p>
Якщо логічне
вираз, яка виступає в якості умови, приймає значення False, то
виконуються оператори, розташовані після else (серія2), якщо True, --
оператори, що слідують за then. Під час запису логічного виразу слід уникати
знаку = (так само) для дійсних змінних, так як вони представляються
неточно, а тому може не відбутися збігів значень виразів, що стоять
ліворуч і праворуч від знака одно. Для усунення зазначеного недоліку слід
вимагати виконання умови з заданою точністю, тобто замість відносини X = Y
рекомендується, наприклад, p>
Abs (X - Y) <1E-8. p>
Оскільки
розвилка може бути неповною, то можлива і неповна форма запису умовного
оператора: p>
IF <логічне вираження>
THEN серія; p>
Умовний
оператор реалізує розгалуження обчислювального процесу у двох напрямах,
одне з яких здійснюється при виконанні умови, інше-в іншому випадку.
Для реалізації розгалужень більш ніж по двох напрямах необхідно
використовувати декілька умовних операторів. Розглянемо приклади. P>
Завдання 1. Дано дійсні числа x, y. Якщо x і y негативні, то
кожне значення замінити модулем; якщо негативно тільки одне з них, то обидва
значення збільшити на 0,5; якщо обидва значення невід'ємні і жодна з них не
належить відрізку [0,5; 2,0], то обидва значення зменшити в 10 разів; в решті
випадках x та y залишити без зміни. p>
Розробимо
алгоритм вирішення задачі, після чого напишемо програму. p>
Алгоритм
запишемо словесно: p>
1) ввести
значення x, y; p>
2) якщо x <0
і y <0, знайти їх модулі і перейти до п. 5, інакше перейти до наступного пункту; p>
3) якщо x <0
або y <0, збільшити кожну величину на 0,5 і перейти до п. 5, p>
інакше перейти до наступного пункту; p>
4) якщо ні x,
ні y не належать відрізку [0,5; 2,0], зменшити їх у 10 разів; p>
5) вивести
значення x і y; p>
6) кінець. p>
Program Usl; p>
Var X, Y:
Real; p>
Begin p>
Write ( 'Введіть два дійсних числа');
ReadLn (X, Y); p>
If (X <0) AND (Y <0) THEN p>
Begin p>
X =
ABS (X); p>
Y = ABS (Y) p>
End p>
ELSE p>
IF (X <0) OR (Y <0) THEN p>
Begin p>
X = X + 0.5; p>
Y = Y + 0.5 p>
End p>
ELSE p>
IF NOT (((X> = 0.5) AND (X
<= 2)) p>
OR ((Y> = 0.5) AND (Y
<= 2 ))) p>
THEN p>
Begin p>
X = X/10; p>
Y = Y/10 p>
End; p>
WriteLn ( 'Результат:'); WriteLn ( 'X =
', X: 10:6); WriteLn (' Y = ', Y: 10:6) p>
END. p>
Завдання 2. Дано
дійсне число a. Обчислити f (a), якщо p>
p>
Program Usl1; p>
Var A, F:
Real; p>
Begin p>
WriteLn ( 'Введіть дійсне число:
'); ReadLn (A); p>
IF A <= 0 THEN p>
F = 0 p>
ELSE p>
IF A <= 1 THEN p>
F = Sqr (A) - A p>
ELSE p>
F = Sqr (A) - SIN (Pi * Sqr (A )); p>
WriteLn ( 'Значення функції F (x) при x =
', A: 10:6,' дорівнює ', F: 10:6); p>
END. p>
Крім умовного
оператора як керуючої структури досить часто використовується оператор
вибору CASE. Ця структура дозволяє переходити на одну з гілок залежно
від значення заданого виразу (селектора вибору). Її особливість полягає в
те, що вибір рішення тут здійснюється не в залежності від істинності або
хибності умови, а є вичіслімим. Оператор вибору дозволяє замінити
кілька операторів розвилки (в силу цього його ще називають оператором
множинного розгалуження). p>
У конструкції
CASE обчислюється вираз K і вибирається гілку, значення якої мітки
таке саме, як K. Після виконання вибраної гілки відбувається вихід з
конструкції CASE. Якщо у послідовності немає мітки зі значенням, рівним K, то
управління передається зовнішньому оператору, наступному за конструкцією CASE (в
разі відсутності альтернативи ELSE; якщо вона є, то виконується наступний за
ній оператор, а вже потім управління передається зовнішньому оператору). p>
Запис
оператора вибору p>
CASE K OF p>
A1: серія 1; p>
A2: серія 2; p>
... p>
AN: серія N p>
ELSE серія N + 1 p>
END; p>
Будь-яка з
зазначених серій операторів може складатися як з єдиного оператора, так і
декількох (в цьому випадку, як звичайно, оператори, що відносяться до однієї мітці,
повинні бути укладені в операторні дужки begin .. end). p>
Вираз K
тут може бути будь-якого порядкового типу (нагадаємо, що до таких типів відносяться
всі цілі типи, Boolean, Char, що перераховуються тип, діапазонний тип, що базується
на будь-якому із зазначених вище типів). p>
Завдання 1. У
старояпонском календарі був прийнятий дванадцятирічний цикл. Роки всередині циклу
носили назви тварин: пацюка, корови, тигра, зайця, дракона, змії, коні,
вівці, мавпи, півня, собаки і свині. Написати програму, яка дозволяє ввести
номер року і друкує його назва по старояпонскому календарем. Довідка:
1996р .- рік щура-початок чергового циклу. P>
Оскільки цикл
є дванадцятирічним, поставимо назва року у відповідність залишку від
ділення номера цього року на 12. p>
Program Goroskop; p>
Var Year: Integer; p>
Begin p>
Write ( 'Введіть рік'); ReadLn (Year); p>
CASE Year
MOD 12 OF p>
0: WriteLn ( 'Рік Мавпи'); p>
1: WriteLn ( 'Рік Півня'); p>
2: WriteLn ( 'Рік Собаки'); p>
3: WriteLn ( 'Рік Свині'); p>
4: WriteLn ( 'Рік Щура'); p>
5:
WriteLn ( 'Рік Корови'); p>
6: WriteLn ( 'Рік Тигра'); p>
7: WriteLn ( 'Рік Зайця'); p>
8: WriteLn ( 'Рік Дракона'); p>
9: WriteLn ( 'Рік Змії'); p>
10: WriteLn ( 'Рік Коні'); p>
11: WriteLn ( 'Рік Вівці') p>
END; p>
END. p>
Завдання 2. Знайти найбільше з двох дійсних
чисел, використовуючи оператор вибору. p>
Program Maximum; p>
Var Max, X, Y: Real; p>
Begin p>
Write ( 'Введіть два нерівних числа :'); p>
ReadLn (X, Y); p>
Case X> Y
Of p>
TRUE: Max: = X; p>
FALSE: Max
: = Y p>
End; p>
WriteLn ( 'Максимальне з двох є', Max
: 12: 6) p>
End. p>
Завдання 3.
Перетворити символ, якщо він є рядкової російської буквою, до заголовної
літеру. p>
Так як в
альтернативній системі кодування ASCII рядкові російські букви йдуть не підряд, а
з деяким розривом, то в даному випадку, залежно від того, в яку частину
таблиці потрапляє введена літера, використовується та чи інша формула. Якщо
введений символ не є рядкової російської буквою, він виводиться без
зміни. p>
Program UpCase; p>
Var C: Char; p>
Begin p>
Write ( 'Введіть символ :'); p>
ReadLn (C); p>
Case C Of p>
'а' .. 'п': C: = Chr (Ord (C) - 32); p>
'р' .. 'я': C: = Chr (Ord (C) - 80) p>
End; p>
WriteLn (C); p>
End. p>
Як видно з
прикладу, як мітки може виступати не тільки окреме значення, але й
діапазон значень. Крім того, в якості мітки може виступати перелік
значень виразу (значення перераховуються через кому). p>
Контрольні
питання і завдання p>
Коли виникає
необхідність в організації розвилки? p>
Яка розвилка
називається повною? неповної? p>
Вираз
якого типу може виступати як умови при організації розвилки? Які
значення приймають такі вирази? p>
Чи можуть у
повної розвилці не виконається оператори ні по одній з гілок? виконатися по
обом гілкам? p>
Записати
приклади 1-3 по темі "Оператор вибору" за допомогою умовного оператора.
Скільки розвилок знадобилося в кожному з випадків? p>
У якому випадку
доцільно використовувати оператор вибору? p>
Якого типу
може бути вираз, що є селектором вибору? Наведіть приклади. p>
Використовуючи
оператор вибору вирішити завдання: "Визначити знак заданого цілого
числа ". p>
Наведіть
приклад оператора вибору, де вираз-селектор вибору має перечіслімий тип. p>
Список
літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://www.comp-science.narod.ru/
p>