Вказівка варіанта CASE
Завантажити презентаціюПрезентація по слайдам:
Сьогодні наше завдання – це познайомитися із узагальненням вказівки розгалуження - вказівкою вибору та вказівкою, яка дає можливість порушити традиційний порядок виконання програми – вказівкою безумовного перехода.
Оператор варіанта є узагальненням оператора if і дозволяє зробити вибір із довільного числа наявних варіантів. Він складається з виразу, що називається селектором, і списку параметрів, кожному з яких передує список констант вибору (список може складатися і з однієї константи). Як і в операторі if, тут може бути присутнім слово else, що має той же зміст. Формат опису: case < вираз-селектор > of < список констант вибору1 > : < оператор 1 >; < список констант вибору 2 > : < оператор 2 >; ... < список констант вибору n > : < оператор n >; else < оператор > end;
Оператор case працює наступним чином. Спочатку обчислюється значення виразу-селектора, потім забезпечується реалізація того оператора, константа вибору якого дорівнює поточному значенню селектора. Якщо жодна з констант не дорівнює поточному значенню селектора, виконується оператор, що знаходиться за словом else. Якщо слово else відсутнє, активізується оператор, що знаходиться за словом end, тобто перший оператор за межею дії case. Селектор повинен відноситися до одного з перелічувальних типів (цілого, булівського або літерного). Дійсні та рядкові типи використовувати в якості селектора заборонено. Список констант вибору складається з довільної кількості значень або діапазонів, відділених один від одного комами. Межі діапазону записуються двома константами через складений символ діапазону "..". Тип констант у будь-якому випадку повинен збігатися з типом селектора. Формат опису: case < вираз-селектор > of < список констант вибору1 > : < оператор 1 >; < список констант вибору 2 > : < оператор 2 >; ... < список констант вибору n > : < оператор n >; else < оператор > end;
можуть бути подані наступним чином: Вигляд списка Список, що складається із одного значення ‘a’ 8 Список, що містить перелік значень 1, 4, 5 ‘a’, ‘b’,’*’,’@’ Список, що містить інтервали значень 1..5, 20..30 ‘a’..’z’ Список, що містить змішану форму подічі значень 1 .. 5, 15, 55 ‘a’..’z’, ’A’, ’B’
Щоб краще зрозуміти використання оператора вибору, розглянемо кілька типових задач. Умова: Розробити діалогову програму, яка запитує вік користувача і визначає, до якої вікової категорії він належить: 1) від 1 до 10 років - дитина; 2) від 11 до 15 років - підліток; 3) від16 до 20 років - юнак (юнка); 4) від 21 до 30 років - молода людина; 5)після 31 року - доросла людина. Особливих пояснень ця задача не потребує, адже її можна розв'язати і за допомогою команди розгалуження. Однак зробимо її за допомогою команди вибору, причому, щоб скористатися гілкою Else, будемо вважати, що людина може мати вік не більше 150 років (навіть за всіма відомими рекордами, людина не може жити більше 150 років). Якщо ж користувач введе число, що не входить в дозволений діапазон, будемо вважати, що він пожартував. Program vibor_1; 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.
Скласти програму, яка визначає пору року за порядковим номером місяця. Program Pora; Var m:integer; Begin Write (‘Введіть порядковий номер місяця:’); Readln(m); If (m12) then writeln(‘Такого місяця неіснує’) Else Case m of 3,4,5: writeln(‘Весна’); 6,7,8: writenl(‘Літо’); 9,10,11:writeln(‘Осінь’); 12,1,2:writeln(‘Зима’) end; end. Зразок.
Звичайно після запуску користувачем програми , вона виконується рядок за рядком, в тій послідовності, як вони записані в програмі. Program ZRAZOK; Uses …; … Begin ; ; . . . ; End . Але бувають ситуації, коли таку послідовність виконання потрібно порушити. Для цього використовують вказівку безумовного переходу: GOTO N де N – мітка.
Program ZRAZOK; Uses …; Label N,…; … Begin ; GOTO N; ; . . . N: ; End . Мітка ставиться напроти рядка, на який потрібно перейти. Після неї йдуть обов’язково “:”. Як мітку зручно використовуватм довільне ціле число. Хоча це не є обов’язковим. Міткою може бути ціле число, літера, комбінація літер та комбінація числа і літер. Мітки, що використовуються в програмі для вказівки безумовного переходу, мають бути описані після службового слова Label через кому, якщо їх декілька. Розділ опису міток пишеться після розділу опису модулів. Після виконання вказівки безумовного переходу GOTO N , програма продовжує виконуватися з того рядка напроти якого стоїть мітка N .
Зразок. Умова: Розробити алгоритм-"лотерею", який, використовуючи генератор випадкових чисел, визначатиме призи: 1) комп'ютер; 2) принтер; 3) сканер; 4) компакт-диск; 5) набір дискет. Якщо ми хочемо зробити безпрограшну лотерею, необхідно примусити генератор випадкових чисел генерувати числа в діапазоні від 1 до 5. Для цього можна скористатися наступним виразом: Random(4) + 1. Нагадуємо, що генератор генерує цілі числа в діапазоні від 0 до числа, що вказано в дужках після слова random, але додаванням до цього виразу одиниці ми позбавимось числа 0. Таким чином програма для розв'язання цієї задачі має наступний вигляд:
Зразок. Program Perehid; Uses crt; Label 1; Var N:byte; {N – генерований номер лотереї} Z:char; Begin 1:Clrscr; {Очищення екрану} Randomize; {Процедура, що примушує програму генерувати при кожному новому запуску програми нові числа} N:=random(4)+1; Write(‘Вітаємо! Ви виграли ’) Case N of 1: writeln(‘комп’ютер!!!’); 2: writeln(‘принтер!!!’); 3: writeln(‘сканер!!!’); 4: writeln(‘компакт-диск!!!’); 5: writeln(‘набір дискет!!!’); End; writeln(‘Якщо хочете ще спробувати, то натисніть Y’); readln(z); if z=’Y’ then goto 1; Readkey; {Затримка зображення на екрані до натискання будь якої клавіші} End.
Схожі презентації
Категорії