Тема уроку: "Вказівка вибору та її опис мовою програмування"

Мета уроку: Дати поняття про вказівку вибору (повну та скорочену форми).
Тип уроку: Лекційний з практичними прикладами.

Лекційний матеріал:
Цей оператор є узагальненням оператора if і дозволяє зробити вибір із довільного числа наявних варіантів. Він складається з виразу, що називається селектором, і списку параметрів, кожному з яких передує список констант вибору (список може складатися і з однієї константи). Як і в операторі if, тут може бути присутнім слово else, що має той же зміст.

Формат опису:
case < вираз-селектор > of
< список констант вибору1 > : < оператор 1 >;
< список констант вибору 2 > : < оператор 2 >;
...
< список констант вибору n > : < оператор n >;
else < оператор >
end;

Оператор case працює наступним чином. Спочатку обчислюється значення виразу-селектора, потім забезпечується реалізація того оператора, константа вибору якого дорівнює поточному значенню селектора. Якщо жодна з констант не дорівнює поточному значенню селектора, виконується оператор, що знаходиться за словом else. Якщо слово else відсутнє, активізується оператор, що знаходиться за словом end, тобто перший оператор за межею дії case. Селектор повинен відноситися до одного з перелічувальних типів (цілого, булівського або літерного). Дійсні та рядкові типи використовувати в якості селектора заборонено. Список констант вибору складається з довільної кількості значень або діапазонів, відділених один від одного комами. Межі діапазону записуються двома константами через складений символ діапазону "..". Тип констант у будь-якому випадку повинен збігатися з типом селектора.
Щоб краще зрозуміти використання оператора вибору, розглянемо кілька типових задач.

Задача №134.
Умова: Розробити діалогову програму, яка запитує вік користувача і визначає, до якої вікової категорії він належить:
1) від 1 до 10 років - дитина;
2) від 11 до 15 років - підліток;
3) від16 до 20 років - юнак (юнка);
4) від 21 до 30 років - молода людина;
5)після 31 року - доросла людина.
Особливих пояснень ця задача не потребує, адже її можна розв'язати і за допомогою команди розгалуження. Однак зробимо її за допомогою команди вибору, причому, щоб скористатися гілкою Else, будемо вважати, що людина може мати вік не більше 150 років (навіть за всіма відомими рекордами, людина не може жити більше 150 років). Якщо ж користувач введе число, що не входить в дозволений діапазон, будемо вважати, що він пожартував.

Program Example_134; 
Uses crt; 
Var Years:byte;    {Years – вік користувача} 
Begin 
  Clrscr;          {Очищення екрану} 
  Write(‘Введіть Ваш вік: ’); 
  Readln(Years); 
  Write(‘Ви ’); 
  Case Years of 
   0..10: Writeln(‘- дитина.’); 
   11..15: Writeln(‘- підліток.’); 
   16..20: Writeln(‘- юнак (юнка).’); 
   21..30: Writeln(‘- молода людина.’); 
   31..150: Writeln(‘- доросла людина.’) 
   Else writeln(‘, мабуть, пожартували? Людина  
                   стільки не живе!’); 
  End; 
  Readkey;      {Затримка зображення на екрані до  
                 натискання будь якої клавіші} 
End. 

Задача №149.
Умова: Розробити програму видачі номеру кварталу, до якого відноситься місяць, заданий числом від 1 до 12.

Uses crt; 
Var Month:byte;    {Month – номер місяця} 
Begin 
  Clrscr;          {Очищення екрану} 
  Write(‘Введіть номер місяця: ’); 
  Readln(Month); 
  Case Month of 
   1..3: Writeln(‘Перший квартал.’); 
   4..6: Writeln(‘Другий квартал.’); 
   7..9: Writeln(‘Третій квартал.’); 
   10..12: Writeln(‘Четвертий квартал.’); 
   Else writeln(‘Помилка вхідних даних.’); 
  End; 
  Readkey;      {Затримка зображення на екрані до  
                 натискання будь якої клавіші} 
End. 

Задача №151.
Умова: Розробити програму виведення інформації про день тижня, - вихідний він чи робочий, якщо задано його номер від 1 до 7 (1 - понеділок).

Program Example_149; 
Uses crt; 
Var Day:byte;    {Day – номер дня тижня} 
Begin 
  Clrscr;          {Очищення екрану} 
  Write(‘Введіть номер дня тижня: ’); 
  Readln(Day); 
  Case Day of 
   1..5: Write(‘Це робочий день ’); 
   6,7: Write(‘Це вихідний день ’); 
   Else write(‘Це не день ’); 
  End; 
  Writeln(‘тижня.’); 
  Readkey;      {Затримка зображення на екрані до  
                 натискання будь якої клавіші} 
End. 

Задача №160.
Умова: Дано ціле число N (1 <= N <= 3) та дійсне число X. За даним значенням змінної N, яка є номером функції, визначити:
1) sin X;
2) cos X;
3) tg X.

Program Example_160; 
Uses crt; 
Var N:byte;      {N – номер функції, що обчислюється} 
    X,Y:real;    {X – значення змінної, Y – значення  
                  функції} 
Begin 
  Clrscr;          {Очищення екрану} 
  Write(‘Введіть значення Х: ’); 
  Readln(Х); 
  Write(‘Введіть номер функції, що обчислюється: ’); 
  Writeln(‘1 - sin’); 
  Writeln(‘2 - cos’); 
  Writeln(‘3 - tg’); 
  Readln(N); 
  Writeln(‘Результат обчислень:’) 
  Case N of 
   1: begin Y:=sin(X); writeln(‘sin(x)=’,Y:8:2); end; 
   2: begin Y:=cos(X); writeln(‘cos(x)=’,Y:8:2); end; 
   3: begin Y:=sin(X)/cos(X); writeln(‘tg(x)=’,Y:8:2);  
      end; 
   Else writeln(‘Помилка вхідних даних.’); 
  End; 
  Readkey;      {Затримка зображення на екрані до  
                 натискання будь якої клавіші} 
End. 

Задача №164.
Умова: Розробити алгоритм-"лотерею", який, використовуючи генератор випадкових чисел, визначатиме призи:
1) комп'ютер;
2) принтер;
3) сканер;
4) компакт-диск;
5) набір дискет.
Якщо ми хочемо зробити безпрограшну лотерею, необхідно примусити генератор випадкових чисел генерувати числа в діапазоні від 1 до 5. Для цього можна скористатися наступним виразом:
Random(4) + 1.
Нагадуємо, що генератор генерує цілі числа в діапазоні від 0 до числа, що вказано в дужках після слова random, але додаванням до цього виразу одиниці ми позбавимось числа 0. Таким чином програма для розв'язання цієї задачі має наступний вигляд:

Program Example_164; 
Uses crt; 
Var N:byte;      {N – генерований номер лотереї} 
Begin 
  Clrscr;          {Очищення екрану} 
  Randomize;       {Процедура, що примушує програму  
                    генерувати при кожному новому  
                    запуску програми нові числа} 
  N:=random(4)+1; 
  Write(‘Вітаємо! Ви виграли  ’) 
  Case N of 
   1: writeln(‘комп’ютер!!!’);  
   2: writeln(‘принтер!!!’); 
   3: writeln(‘сканер!!!’);  
   4: writeln(‘компакт-диск!!!’);  
   5: writeln(‘набір дискет!!!’);  
  End; 
  Readkey;      {Затримка зображення на екрані до  
                 натискання будь якої клавіші} 
End. 

Задача №165.
Умова: Дано натуральне число N (N <= 100), яке позначає вік людини. Додати до цього числа відповідно слова: "рік", "роки", "років", наприклад: 1 рік, 12 років, але 43 роки.
Очевидно, що для того, щоб правильно дописати відповідне слово, необхідно виділити останню цифру числа, що позначає вік людини. Тоді, якщо це цифра "1", то дописується слово "рік", якщо цифри "2", "3" або "4" - дописується слово "роки", а в усіх останніх випадках - дописується слово "років". Виключенням являється діапазон між 10 та 20 роками: в цих випадках завжди пишеться слово "років".

Program Example_165; 
Uses crt; 
Var Years:byte;       {Years – вік людини} 
Begin 
  Clrscr;             {Очищення екрану} 
  Write(‘Введіть Ваш вік: ’); 
  Readln(Years); 
  Write(‘Вам ’,Years); 
  If (Years>=10) and (Years<=20)  
  Then writeln(‘років’) 
  Else  
    Case Years mod 10 of 
      1: writeln(‘рік.’);  
      2..4: writeln(‘роки.’); 
      0,5..9: writeln(‘років.’);  
  End; 
  Readkey;      {Затримка зображення на екрані до  
                 натискання будь якої клавіші} 
End. 

Домашнє завдання: