Реферат: Оператор выбора CASE
Оператор CASE представляет собой частный случай структуры ВЕТВЛЕНИЕ, когда возникает необходимость выбора одного из нескольких возможных вариантов вычислений в зависимости от значений некоторого выражения (ключа, селектора).
Порядок выполнения оператора Case следующий: вычисляется значение выражения K; полученное значение сравнивается с K1, K2, …, KN; если оно совпадает с одним из этих значений, то управление передается соответствующему оператору и выполнение оператора CASE завершается. Если значение выражения K не совпадает ни с одним из возможных значений, далее все зависит от типа оператора CASE: если он полный (в нем присутствует служебное слово ELSE), то управление передается команде S; в противном случае выполнение оператора завершается.
Конструкция | ИнтАл | Паскаль |
Выбрать_По K K1: S1 K2: S2... KN: SN Иначе S Конец_Выбора K – переменная целого типа; K1, K2, …, KN – возможные значения переменной К; S1, S2, …, SN, S – выполняемые команды | CASE K OF K1: S1; K2: S2;... KN: SN ELSE S END; K – выражение, определяющее значение ключа; K1, K2, …, KN – возможные значения ключа; S1, S2, …, SN, S – выполняемые операторы (простые или составные) |
Вариант записи, полученный после зачеркивания блока и строк в приведенных выше схемах, соответствует оператору выбора (или, как его еще называют, оператору варианта) в неполной (сокращенной) форме.
Селектор K представляет собой выражение порядкового типа. К порядковому типу относятся целочисленные типы, логический тип и символьный, с которым Вы познакомитесь в разделе 4.
В Паскале допускается использование нескольких возможных значений ключей, разделенных запятой (перечисление значений) или двумя точками “..” (диапазон значений).
Пример 1. По номеру дня недели требуется определить его название.
Program Day ;
Var Num: Byte ;
Begin
Writeln ('Введите номер дня недели') ;
|
Case Num of
1: Writeln ('Понедельник') ;
2: Writeln ('Вторник') ;
3: Writeln ('Среда') ;
4: Writeln ('Четверг') ;
5: Writeln ('Пятница') ;
6: Writeln ('Суббота') ;
7: Writeln ('Воскресенье')
Else
Writeln ('Это не номер дня недели')
End;
End.
Пример 2. Составить программу, которая для заданных номеров месяца и года позволит определить количество дней в этом месяце.
Дано: month, year – номера месяца и года.
Найти: kol_days – количество дней в этом месяце.
Связь:
year – високосный, если year делится без остатка на 4, кроме тех, которые делятся на 100 и не делятся на 400. Например, 1900 год – не високосный, 2000 год – високосный.
Будем считать, что данные корректны.
Program Days ;
Var Year: Integer ;
month, kol_days: Byte ;
Sto: Boolean;
Begin
Write ('Введите номер месяца ') ;
Readln (month) ;
Case month of
1, 3, 5, 7, 8, 10, 12: kol_days := 31 ;
4, 6, 9, 11: kol_days := 30 ;
2: Begin {февраль}
Write ('Введите номер года ') ;
Readln (Year) ;
Sto:=(Year mod 100)=0;
if ((Sto=True) and (Year mod 400 =0)) or
((Sto=False) and (Year mod 4=0)) Then
kol_days := 29
Else kol_days := 28
End;
End ;
Writeln (kol_days);
End .
Пример 3. Составить программу проверки, делится ли заданное натуральное число на 7.
Пусть х – заданное натуральное число. Составим выражение сравнения: x mod 7 =0. Используем это выражение в качестве селектора; его возможные значения: True, False. Ниже приводятся два варианта использования оператора выбора (в полной и неполной формах):
Program PRIM_3; Var x: LongInt; Begin Write ('Введите натуральное число '); Readln (x); | |
Case x mod 7 = 0 of True: Writeln ('делится на 7'); False: Writeln ('не делится на 7') | Case x mod 7 = 0 of True: Writeln ('делится на 7') Else Writeln ('не делится на 7') |
End; End. |
1. Какова структура условного оператора? * оператора выбора?
2. Каков порядок выполнения условного оператора? * оператора выбора?
1. Напишите программы решения следующих задач:
1) На экран компьютера выводится текст:
После того как пользователь сделает выбор, необходимо вывести знак препинания, каким должно заканчиваться предложение данного типа.
2) По номеру класса, в котором учится школьник, требуется определить, в школе какого типа он обучается (подготовительная, начальная, базовая, средняя).
3) На экран компьютера выводится текст:
После того как пользователь сделает выбор, необходимо ввести значения требуемых элементов, вычислить площадь и вывести полученный результат.
4) Таблица К. Купера позволяет определить степень физической подготовленности человека в зависимости от суммы очков, набранных им на занятиях по физической культуре за неделю:
Сумма очков, набранных за неделю | Степень физической подготовленности | |
Юноша | Девушка | |
Не менее 75 | Не менее 65 | Превосходно |
51-74 | 41-64 | Отлично |
32-50 | 27-40 | Хорошо |
21-31 | 16-26 | Удовлетворительно |
10-20 | 8-15 | Плохо |
Меньшее 10 | Меньше 8 | Очень плохо |
Программа должна предложить ввести сумму набранных очков, уточнить, кто их набрал (юноша или девушка) и вывести на экран компьютера оценку физической подготовленности.
5) Программа предлагает ввести возраст человека (если необходимо, также его пол) и выводит, к какой группе он относится: дошкольник, ученик, работник, пенсионер.
6) В пятиэтажном доме на каждом этаже по 4 квартиры. Программа должна предложить ввести номер этажа и вывести номера квартир на этом этаже.
7) Программа предлагает ввести число k полных лет человека (от 1 до 120) и вывести фразу: «Вам k лет». Например, при k=3 – «Вам три года», k=18 – «Вам 18 лет», k=101 – «Вам 101 год».
8) Определить наиболее подходящий возраст партнера для вступления в брак. Программа должна запросить данные пользователя: возраст, признак пола (из выведенного на экран меню: 1 – юноша, 2 – девушка) и вывести подходящий возраст партнера, который вычисляется так: возраст девушки равен увеличенной на 7 половине возраста юноши, возраст юноши определяется как удвоенный возраст девушки минус 14.
9) Вывести в римской системе нумерации век, к которому относится заданный год (номер года вводится с клавиатуры).
10) Программа должна предложить выбрать способ вычисления площади круга (по заданному радиусу, или диаметру, или длине окружности), запросить требуемые данные, произвести вычисления и вывести результат на экран.
11) Программа должна предложить ввести текущее время и вывести период суток (день, ночь, утро, вечер, обед).