Similar presentations:
Оператор выбора case
1. Оператор выбора case
Долгих Н. 10 «з»2.
Для начала решим одну задачу ужеизвестным способом
Условие: по введенному 8-мизначному
числу определить является ли это датой (в
формате дд.мм.гггг), если такой даты не
существует сообщить на экран
3. Вводится восьмизначное число в формате ДДММГГГГ. Необходимо выяснить, существует ли такая дата.
В решении необходимо учитывать числомесяцев, количество дней в каждом
месяце, а также високосные года.
4. Вводится восьмизначное число в формате ДДММГГГГ. Необходимо выяснить, существует ли такая дата.
Нам понадобятся переменные для самого числа (а), длядня(d), месяца(m), года(g).
Сначала определим, високосный ли год. Восьмизначное
число записано в формате ДДММГГГГ, то есть последние
4 цифры – год (g).
Уберем из числа ДДММ, для этого воспользуемся
MOD – делением с выводом на экран остатка.
Разделим на 10 000. Запись в Паскале будет следующей:
g:=m mod 10000;
Если остаток равен нулю – год високосный, во втором
месяце года 29 дней, а не 28. Это нужно четко отразить в
задаче.
vis:=g mod 4;
if (vis=0) and (m=2) and (d<30) then …
5. Вводится восьмизначное число в формате ДДММГГГГ. Необходимо выяснить, существует ли такая дата.
Итак, если год високосный, месяц второй, и число,обозначающее день<30, можем вывести на экран дату:
if (vis=0) and (c1=2) and(d<30) then writeln(d,'.', m,'.', g,'.')
else …
6. Вводится восьмизначное число в формате ДДММГГГГ. Необходимо выяснить, существует ли такая дата.
if (vis=0) and (m=2) and (d<30) then writeln(d,'.', m,'.', g,'.')else …
Рассуждаем дальше. Если год не високосный, то есть какой то
остаток от деления месяца(m),
число дней в феврале = 28, а остальные числа можно объединить
группами, так, например,
31 день содержат 1, 3, 5, 7, 8, 10, 12 месяцы,
30 дней – 4, 6, 9, 11. В остальных случаях дата не существует.
Используем IF:
if ((m=1) or (m=3) or (m=5) or (m=7) or (m=8) or (m=10) or (m=12)) and (d<32)
or (m=2) and (d<29)
or ((m=4) or (m=6) or (m=9) or (m=11)) and (d<31)
then writeln (d,'.', m,'.', g,'.')
else writeln ( ' такой даты не существует ' );
7. решение
var a, d, m,o1, vis,o2:integer;BEGIN
read (a);
d:=a div 1000000;
{день}
m:=a mod 1000000;
{ммгггг}
g:=m mod 10000;
{гггг}
m:=m div 10000;
{мм}
vis:=g mod 4;
if (vis=0) and (m=2) and(d<30) then writeln(d,'.', m,'.', g,'.')
else
if ((m=1) or (m=3) or (m=5) or (m=7) or (m=8) or (m=10) or (m=12)) and (d>0) and (d<32)
or (m=2) and (d>0) and (d<29)
or ((m=4) or (m=6) or (m=9) or (m=11)) and (d>0) and (d<31)
then writeln (d,'.', m,'.', g,'.')
else writeln ( 'такой даты не существует ' );
END.
8.
Тестируем программу:Программа работает вполне корректно.
Задача решена.
9. СЛОЖНО!!!
МожноДля
проще!!!
этого сначала разберем
Оператор выбора case
10. Суть оператора
Оператор выбора case являетсяобобщением оператора if и позволяет
сделать выбор из произвольного числа
имеющихся вариантов.
Как и в операторе if здесь может
присутствовать слово else, имеющее тот же
смысл
11.
Операторвыбора выполняет одно
действие из нескольких в зависимости от
значения некоторого выражения,
называемого переключателем.
Он имеет следующий вид:
case переключатель of
список выбора 1: оператор 1;
список выбора 2: оператор 2;
...
;
список выбора N: оператор N
else оператор 0
end;
12.
Переключатель представляет собойвыражение целого, символьного типа или
логического типа,
а списки выбора содержат константы того
же типа, что и переключатель.
Как и в операторе if, ветка else может
отсутствовать.
13.
Если при выполнении условия действийбольше одного, то вид оператора выбора
будет таким:
case переключатель of
список выбора 1: begin группа действий 1; end;
...
список выбора N: begin группа действий N; end;
else begin группа действий 0; end
end;
группа
действий перечисляется через
;
14.
ПРАВИЛО РАБОТЫ ОПЕРАТОРА:1.Вычисляется значение выражения.
2.Это значение сравнивается с константами, стоящими после
слова of
3.Если значение выражения равно какой-либо константе, то
выполняется оператор, стоящий после этой константы.
4.Если значение выражения не совпадает ни с какой
константой, то управление передается оператору,
следующему после слова End;
5.Если используется 2-ой формат записи оператора, то
управление передается оператору, следующему после
слова Else.
Если вместо одного оператора в строке нужно
использовать несколько, то используют операторные
скобки Begin … End;
15.
Операторcase работает следующим
образом.
Если
в одном из списков выбора найдено
текущее значение переключателя, то
выполняется оператор, соответствующий
данному списку.
Если же значение переключателя не
найдено ни в одном списке, то
выполняется оператор по ветке else или,
если ветка else отсутствует, оператор case
не выполняет никаких действий.
16. Блок - схема
17.
Список выбора состоитлибо из одной константы,
либо из диапазона значений вида a..b
(константа a должна быть меньше
константы b);
можно также перечислить несколько
констант или диапазонов через запятую.
Например: 1..5 или 1,2,3,4,5 или 1, 2..5
Или так: ‘a’, ’b’, ’c’, ’d’ или ‘a’ .. ’d’
или ‘d’, ’a’ .. ’c’
18.
Спискивыбора не должны пересекаться.
Например, следующий фрагмент приведет
к ошибке компиляции "Пересечение
диапазонов меток в операторе case".
case i of
2,5: write(1);
4..6: write(2);
end;
Здесь в обоих списках выбора содержится
число 5
19. Задача
Нарисовать блок-схему и составитьпрограмму, позволяющую получить
словесное описание школьных отметок
(1-плохо, 2-неудовлетворительно,
3-удовлитворительно,4-хорошо,5-отлично)
Если число не находится в диапазоне , то
вывести строку «ошибка».
20. Блок-схема
началоВвод N
ДА
ПЛОХО
N=1
НЕТ
ДА
НЕУДОВЛЕТВОРИТЕЛЬНО
N=2
НЕТ
ДА
УДОВЛЕТВОРИТЕЛЬНО
N=3
НЕТ
ДА
ХОРОШО
N=4
НЕТ
ДА
N=5
НЕПР. ВВОД
конец
ОТЛИЧНО
21. На Паскале
Program Zadacha;var n:integer;
begin
writeln (‘Введите номер оценки’);
readln(n);
case n of
1:writeln (‘Плохо’);
2:writeln (‘Неудовлетворительно’);
3:writeln (‘Удовлетворительно’);
4:writeln (‘Хорошо’);
5:writeln (‘Отлично’);
else writeln (‘ошибка’);
end;
readln;
end.
22.
Вводиться число от 1 до 4,определяющее пору года. Дать
название этой поры года
(1 - зима, 2 - весна,
3 - лето, 4 - осень).
23.
Вводиться число от 1 до 4, определяющее поругода. Дать название этой поры года (1 - зима,
2 - весна, 3 - лето, 4 - осень).
program zadacha2;
var n:byte;
BEGIN
writeln('Введите номер поры года');
readln(n);
case n of
1: writeln('зима');
2: writeln('весна');
3: writeln('лето');
4: writeln('осень');
Else writeln('неправильно ввели номер поры года');
end;
END.
24.
По номеру дня недели вывестисоответствующее ему название
25.
program prim1;var z: integer;
begin
writeln('введи номер дня недели');
readln(z);
case z of
1:writeln('понедельник');
2: writeln('вторник');
3: writeln('среда');
4: writeln('четверг');
5: writeln('пятница');
6: writeln('суббота');
7: writeln('воскресенье');
else writeln('нет такого дня недели');
end;
readln;
end.
26.
по введенному номеру дня недели определитьрабочий день или будний, в случае ошибки
ввода сообщить на экран
27. Примеры
Условие: по введенному номерудня недели определить рабочий
день или будний, в случае ошибки
ввода сообщить на экран
Решение:
var n: integer;
BEGIN
Read(n);
case n of
1..5: writeln('Будний день');
6,7: writeln('Выходной день');
else: writeln('Нет такого дня');
end;
END.
28.
Составить программу, которая после введенного склавиатуры числа (в диапазоне от 1 до 99),
обозначающего денежную единицу, дописывает
слово «Копейка» в правильной форме.
Например, 5 копеек, 41 копейка и т. д.
29. Программа:
program c;var a: integer;
begin
writeln ('количество копеек = ');
readln (a);
case (a) of
1,21,31,41,51,61,71,81,91: writeln ('копейка');
2..4,22..24,32..34,42..44,52..54,62..64,72..74,
82..84,92..94: writeln ('копейки');
else writeln ('копеек');
end;
end.
30.
Водной компьютерной игре не существует
числительных. Потому фраза «у вас семь
чёрных драконов, а у вашего врага —
сорок» будет выглядеть так: «у вас
немного чёрных драконов, а у вашего
врага — толпа». Необходима программа
заменяющая число (вводится число от 1 до
2000) на существительное по следующей
закономерности:
1 до 4 = несколько; от 5 до 9 = немного; от
10 до 19 = отряд; от 20 до 49 = толпа; от 50
до 99 = орда; от 100 до 249 = множество; от
250 до 499 = сонмище; от 500 до 999 =
полчище; от 1000 = легион
31.
var a:integer;BEGIN
readln(a);
case a of
1..4
:writeln(‘несколько’);
5..9
:writeln(‘немного’);
10..19 :writeln(‘отряд’);
20..49 :writeln(‘толпа’);
50..99 :writeln(‘орда’);
100..249:writeln(‘множество’);
250..499:writeln(‘сонмище’);
500..999:writeln(‘полчище’);
else
writeln(‘легион’);
end; END.
32.
Найтинаибольшее из двух действительных
чисел, используя оператор выбора.
33.
Найтинаибольшее из двух действительных
чисел, используя оператор выбора.
I способ
Program Usl1;
Var A, F : Real;
Begin
WriteLn('Введите действительное число: '); ReadLn(A);
IF A <= 0 THEN
F=0
ELSE
IF A <= 1 THEN
F = Sqr(A) - A
ELSE
F = Sqr(A) - SIN(Pi * Sqr(A));
WriteLn ('Значение функции F(x) при x = ', A:10:6, ' равно ', F:10:6);
END.
Где A:10:6 и F:10:6 это изменение формата числа
34.
Найтинаибольшее из двух действительных
чисел, используя оператор выбора.
II способ
Var Max, X, Y : Real;
BEGIN
Write('Введите два числа:');
ReadLn(X, Y);
Case X > Y Of
TRUE : Max := X;
FALSE : Max := Y;
End;
WriteLn(‘большее из двух:',Max)
END.
35.
Данодействительное число a. Вычислить
f(a), если
36.
Program Usl1;Var A, F : Real;
Begin
WriteLn('Введите действительное число: '); ReadLn(A);
IF A <= 0 THEN
F=0
ELSE
IF A <= 1 THEN
F = Sqr(A) - A
ELSE
F = Sqr(A) - SIN(Pi * Sqr(A));
WriteLn('Значение функции F(x) при x = ', A:10:6, ' равно
', F:10:6);
END.
Где A:10:6 и F:10:6 это изменение формата числа
37.
Написать программу которая показывает чётноечисло или нет, если оно меньше 10. В случае, если
9<n<101, программа нам об этом сообщает.
38. Примеры:
Программы показывает чётное число или нет, еслионо меньше 10. В случае, если 9<n<101, программа
нам об этом сообщает.
case Operator of plus: X := X+Y;
minus: X := X-Y;
times: X := X*Y;
end;
case I of 0, 2, 4, 6, 8: Writeln('Четная цифра');
1, 3, 5, 7, 9: Writeln('Нечетная цифра');
10..100: Writeln('Между 10 и 100');
end;
39.
В старояпонском календаре был принятдвенадцатилетний цикл. Годы внутри цикла
носили названия животных: крысы, коровы,
тигра, зайца, дракона, змеи, лошади, овцы,
обезьяны, петуха, собаки и свиньи.
Написать программу, которая позволяет
ввести номер года и печатает его название
по старояпонскому календарю. Справка:
1996 г. — год крысы — начало очередного
цикла.
40.
Посколькуцикл является
двенадцатилетним, поставим название
года в соответствие остатку от деления
номера этого года на 12.
41.
Program Goroskop;Var Year : Integer;
Begin
Write('Введите год '); ReadLn(Year);
CASE Year MOD 12 OF
0 : WriteLn('Год Обезьяны');
1 : WriteLn('Год Петуха');
2 : WriteLn('Год Собаки');
3 : WriteLn('Год Свиньи');
4 : WriteLn('Год Крысы');
5 : WriteLn('Год Коровы');
6 : WriteLn('Год Тигра');
7 : WriteLn('Год Зайца');
8 : WriteLn('Год Дракона');
9 : WriteLn('Год Змеи');
10 : WriteLn('Год Лошади');
11 : WriteLn('Год Овцы')
END;
END.
42. Пример программы, которая по введённому числу вида nn.nn.nnnn выводит название месяца и год по китайскому календарю
Пример программы, которая по введённому числу видаnn.nn.nnnn выводит название месяца и год по китайскому
календарюprogram mesyac;
var a:longint;
var b,c:integer;
begin
writeln (‘введите число');
readln(a);
b:=(a div 10000)mod 100 ;
write (‘число ', a div 1000000);
case b of
1 : write (' январь');
2 : write (' февраль');
3 : write (' март');
4 : write (' апрель');
5 : write (' май');
6 : write (' июнь');
7 : write (' июль);
8 : write (' август');
9 : write (' сентябрь');
10 : write (' октябрь');
11 : write (' ноябрь');
12 : write (' декабрь');
end;
c:= (a mod 10000) mod 12;
case c of
0 : write (‘обезьяна ');
1 : write (' петух');
2 : write (' собака');
3 : write (' свинья');
4 : write (' крыса ');
5 : write (' бык');
6 : write (' тигр');
7 : write (' кролик');
8 : write (' дракон');
9 : write (' змея');
10 : write (' лошадь');
11 : write ( ‘овца ');
end;
end.
43.
САМОСТОЯТЕЛЬНО!Составить программу, которая по номеру
месяца, введенного с клавиатуры,
выводит количество дней в нем. В
программе учесть количество дней в
феврале для високосного и не
високосного годов.
44.
Program first;var n:integer;
begin
writeln('введите номер
месяца');
readln(n);
case n of
1:writeln('январь');
2:writeln('Февраль');
3:writeln('март');
4:writeln('апрель');
5:writeln('май');
6:writeln('июнь');
7:writeln('июль');
8:writeln('август');
9:writeln('сентябрь');
10:writeln('октябрь');
11:writeln('ноябрь');
12:writeln('декабрь');
end;
case n of
1,3,5,7,8,10,12:writeln('31 день');
4,6,9,11:writeln('30 день');
2:write('в невисокосном году 28,
в високосном 29');
else writeln('нет такого месяца')
end;
end.
45.
Теперьрешим другим способом задачу
решенную в самом начале
Условие: по введенному 8-мизначному
числу определить является ли это датой (в
формате дд.мм.гггг), если такой даты не
существует сообщить на экран
46.
var a,d,m,g,vis:integer;BEGIN
read (a);
d:=a div 1000000;
m:=a mod 1000000;
g:=m mod 10000;
m:=m div 10000;
vis:=g mod 4;
case vis of
0 : if ((m=2) and (d<30)) then writeln(d,'.',m,'.',g)
else writeln('error');
1..3: case m of
1,3,5,7,8,10,12: if d<32 then writeln(d,'.',m,'.',g)
else writeln('error');
4,6,9,11: if d<31 then writeln(d,'.',m,'.',g)
else writeln('error');
2: if d<29 then writeln(d,'.',m,'.',g)
else writeln('error');
else writeln('error');
end; end; END.
47. Эти задачи решите сами:
Дана точка (x;y) и круг радиуса R с центром в точке (0;0).Определить, где находится точка: внутри, на границе, или за
пределами круга.
Составить программу, которая по номеру месяца, введенного с
клавиатуры, выводит количество дней в нем. В программе
учесть количество дней в феврале для високосного и не
високосного годов.
Даны два целых числа: D(день) и M(месяц),определяющую
правильную дату.
Вывести знак Зодиака, соответствующий этой
дате:"Водолей(20,1-18,2) "Рыбы"(19,2-20,3) "Овен"(21,3-19,4)
"Телец" (20,4 - 20,5) "Близнецы" (21,5 -21,6) "Рак"(22,6-22,7 )
"Лев" (23,7-22,8) "Дева"(23,8-22,9) "весы" (23,9-22,10)
"Скорпион"(23,10,-22,11) "стрелец"(23,11-21,12)
"козерог"(22,12,-19,1).
По введенной дате выдать все данные разных гороскопов
Китайский,
Друидов
…