
- •3. Основные алгоритмические структуры § 19. Алгоритмическая структура ветвление
- •19.1. Логические величины и выражения
- •19.2. Условный оператор
- •* 19.3. Оператор выбора case
- •§ 20. Алгоритмическая структура повторение
- •20.1. Пока – цикл с предусловием (while)
- •20.3. Смешанные алгоритмы
- •§ 21. Алгоритмические структуры и графические построения
- •21.1. Графические построения
- •21.2. Программирование движущихся объектов
* 19.3. Оператор выбора case
Оператор CASE представляет собой частный случай структуры ВЕТВЛЕНИЕ, когда возникает необходимость выбора одного из нескольких возможных вариантов вычислений в зависимости от значений некоторого выражения (ключа, селектора).
Порядок выполнения оператора Case следующий: вычисляется значение выражения K; полученное значение сравнивается с K1, K2, …, KN; если оно совпадает с одним из этих значений, то управление передается соответствующему оператору и выполнение оператора CASE завершается. Если значение выражения K не совпадает ни с одним из возможных значений, далее все зависит от типа оператора CASE: если он полный (в нем присутствует служебное слово ELSE), то управление передается команде S; в противном случае выполнение оператора завершается.
Конструкция |
ИнтАл |
Паскаль |
|
Выбрать_По K K1: S1 K2: S2 . . . K Конец_Выбора
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 ('Введите номер дня недели') ;
If Num = 1 then Writeln
('Понедельник')
Else if Num=2 then Writeln ('Вторник')
Else if Num=3 then Writeln ('Среда')
Else if Num=4 then
Writeln ('Четверг')
Else if Num=5 then
Writeln ('Пятница')
Else if Num=6 then
Writeln ('Суббота')
Else if Num=7 then
Writeln ('Воскресенье')
Else Writeln ('Это не номер дня …') ;
Readln (Num);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) На экран компьютера выводится текст:
Вывод знака препинания в зависимости от типа предложения:
Повествовательное
Вопросительное
Восклицательное
Выберите номер типа предложения G
После того как пользователь сделает выбор, необходимо вывести знак препинания, каким должно заканчиваться предложение данного типа.
2) По номеру класса, в котором учится школьник, требуется определить, в школе какого типа он обучается (подготовительная, начальная, базовая, средняя).
3) На экран компьютера выводится текст:
Вычисление площади треугольника по следующим элементам:
Основанию и высоте
Двум сторонам и углу между ними
Трем сторонам
Выберите номер G
После того как пользователь сделает выбор, необходимо ввести значения требуемых элементов, вычислить площадь и вывести полученный результат.
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) Программа должна предложить ввести текущее время и вывести период суток (день, ночь, утро, вечер, обед).