5.. Оператор вибору варіантів
Розробимо програму "найпростіший калькулятор" . Будемо використовувати змінну signop іззначеннями 1, 2, 3 або 4, що познає знаки операцій відповідно "+", "-", "*", "/". Її значення, отримане врезультаті читання, порівнюємо з 1, 2, 3, 4 та виконуємо відповідні їм дії:
if signop=1 then first:=first+second else
if signop=2 then first:=first-second else
if signop=3 then first:=first*second else
{signop=4}
first:=first/second;
Цейоператорзадаєвибірпотрібногооператоразтих, якізаписанопісляслів then, залежновідзначеннязмінноїsignop. Такий вибір у мові Паскаль можна задати інакше, використавши оператор вибору варіантів, абоcase-оператор (case – англійське "випадок"). У даній програмі він має вигляд:
case signop of
1: first:=first+second;
2: first:=first-second;
3: first:=first*second;
4: first:=first/second
end;
Виразпісляслова case (тутцеім'я signop) називаєтьсяселекторомваріантів. Його значення послідовнопорівнюється з числами, що "відмічають" оператори-варіанти. Як тільки значення селектора співпаде з числом, будевиконано відповідний оператор, і все закінчиться. Якщо ж значення селектора відрізняється від усіх чисел-відміток
варіантів, то жодний із варіантів не виконується.
Селектором може бути довільний вираз будь-якого перелічуваного типу. Варіант може бути відмічений списком ізкількох сталих відповідного типу; вони записуються через кому. Наприклад, нехай робочий час у робочі дні 8годин, а у вихідні – 0. За дії означення типу Weekd ми можемо запам'ятати в змінній wt робочий час:
var dd : Weekd; wt : integer;
…
case dd of
Mon, Tue, Wed,Thu, Fri : wt:=8;
Sat, Sun : wt := 0
end.
Значення селектора порівнюється з усіма значеннями в черговому списку, і варіант виконується, якщо вонодорівнює одному зі значень списку. Множини значень у списках можуть перетинатися – буде виконано тойваріант, у списку якого вперше знайдене значення селектора.
У мові Бор ланд-Паскаль у списках, що відзначають варіанти, можна записувати не тільки сталі, але й діапазони.
Наприклад, останній оператор можна переписати так:
case dd of
Mon .. Thu, Fri: wt:=8;
Sat, Sun: wt:=0
end.
За останнім варіантом можна після слова else указати необов'язковий альтернативний варіант. Цей варіантвиконується, якщо значення селектора немає в жодному зі списків. Наприклад, останній оператор можна переписати втакому вигляді:
case dd ofMon .. Fri: wt:=8;
Sun: wt:=0
else wt:=0
end.
Задачі
1)Переписати "найпростіший калькулятор із використанням case-оператора і читанням знаків операцій увигляді символів.
2)У давньояпонському календарі був прийнятий 60-річний цикл із п'яти 12-річних підциклів, послідовно позначенихкольорами – зеленим, червоним, жовтим, білим та чорним. У кожному підциклi послідовні роки мали назви тварин: пацюка,
корови, тигра, зайця, дракона, змії, коня, вівці, мавпи, курки, собаки та свині. 4-й рік нової ери – рік зеленого пацюка – бувпочатком чергового циклу.
Написати програму читання року нової ери та друкування його назви за давньояпонським календарем.