Оператор выбора case презентация

Содержание

Слайд 2

Для начала решим одну задачу уже известным способом
Условие: по введенному 8-мизначному числу

определить является ли это датой (в формате дд.мм.гггг), если такой даты не существует сообщить на экран

Для начала решим одну задачу уже известным способом Условие: по введенному 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 ( ' такой даты не существует ' );

Вводится восьмизначное число в формате ДДММГГГГ. Необходимо выяснить, существует ли такая дата. if

Слайд 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.

РЕШЕНИЕ var a, d, m,o1, vis,o2:integer; BEGIN read (a); d:=a div 1000000; {день}

Слайд 8

Тестируем программу:
Программа работает вполне корректно.
Задача решена.

Тестируем программу: Программа работает вполне корректно. Задача решена.

Слайд 9

СЛОЖНО!!!

Можно проще!!!
Для этого сначала разберем
Оператор выбора case

СЛОЖНО!!! Можно проще!!! Для этого сначала разберем Оператор выбора case

Слайд 10

СУТЬ ОПЕРАТОРА

Оператор выбора case является обобщением оператора if и позволяет сделать выбор из

произвольного числа имеющихся вариантов.
Как и в операторе if здесь может присутствовать слово else, имеющее тот же смысл

СУТЬ ОПЕРАТОРА Оператор выбора case является обобщением оператора if и позволяет сделать выбор

Слайд 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;

ПРАВИЛО РАБОТЫ ОПЕРАТОРА: 1.Вычисляется значение выражения. 2.Это значение сравнивается с константами, стоящими после

Слайд 15


Оператор case работает следующим образом.
Если в одном из списков выбора найдено

текущее значение переключателя, то выполняется оператор, соответствующий данному списку.
Если же значение переключателя не найдено ни в одном списке, то выполняется оператор по ветке else или, если ветка else отсутствует, оператор case не выполняет никаких действий.

Оператор 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’

Список выбора состоит либо из одной константы, либо из диапазона значений вида a..b

Слайд 18

Списки выбора не должны пересекаться. Например, следующий фрагмент приведет к ошибке компиляции "Пересечение

диапазонов меток в операторе case".
case i of 2,5: write(1); 4..6: write(2); end;
Здесь в обоих списках выбора содержится число 5

Списки выбора не должны пересекаться. Например, следующий фрагмент приведет к ошибке компиляции "Пересечение

Слайд 19

Задача

Нарисовать блок-схему и составить
программу, позволяющую получить
словесное описание школьных отметок
(1-плохо, 2-неудовлетворительно,
3-удовлитворительно,4-хорошо,5-отлично)
Если число не

находится в диапазоне , то вывести строку «ошибка».

Задача Нарисовать блок-схему и составить программу, позволяющую получить словесное описание школьных отметок (1-плохо,

Слайд 20

Блок-схема

начало

Ввод N

N=1

N=2

N=3

N=4

N=5

ДА

ДА

ДА

ДА

ДА

НЕТ

НЕТ

НЕТ

НЕТ

ПЛОХО

НЕУДОВЛЕТВОРИТЕЛЬНО

УДОВЛЕТВОРИТЕЛЬНО

ХОРОШО

ОТЛИЧНО

НЕПР. ВВОД

конец

Блок-схема начало Ввод 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.

На Паскале Program Zadacha; var n:integer; begin writeln (‘Введите номер оценки’); readln(n); case

Слайд 22

Вводиться число от 1 до 4, определяющее пору года. Дать название этой поры

года
(1 - зима, 2 - весна,
3 - лето, 4 - осень).

Вводиться число от 1 до 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.

Вводиться число от 1 до 4, определяющее пору года. Дать название этой поры

Слайд 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.

program prim1; var z: integer; begin writeln('введи номер дня недели'); readln(z); case z

Слайд 26

по введенному номеру дня недели определить рабочий день или будний, в случае ошибки

ввода сообщить на экран

по введенному номеру дня недели определить рабочий день или будний, в случае ошибки

Слайд 27

ПРИМЕРЫ
Решение:
var n: integer;
BEGIN
Read(n);
case n of 1..5: writeln('Будний день'); 6,7: writeln('Выходной день'); else: writeln('Нет такого дня'); end;
END.

Условие:

по введенному номеру дня недели определить рабочий день или будний, в случае ошибки ввода сообщить на экран

ПРИМЕРЫ Решение: var n: integer; BEGIN Read(n); case n of 1..5: writeln('Будний день');

Слайд 28

Составить программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до

99), обозначающего денежную единицу, дописывает слово «Копейка» в правильной форме.
Например, 5 копеек, 41 копейка и т. д.

Составить программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до

Слайд 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.

Программа:

program c; var a: integer; begin writeln ('количество копеек = '); readln (a);

Слайд 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.

var a:integer; BEGIN readln(a); case a of 1..4 :writeln(‘несколько’); 5..9 :writeln(‘немного’); 10..19 :writeln(‘отряд’);

Слайд 32

Найти наибольшее из двух действительных чисел, используя оператор выбора.

Найти наибольшее из двух действительных чисел, используя оператор выбора.

Слайд 33

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 это изменение формата числа

Найти наибольшее из двух действительных чисел, используя оператор выбора.
I способ

Program Usl1; Var A, F : Real; Begin WriteLn('Введите действительное число: '); ReadLn(A);

Слайд 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.

Найти наибольшее из двух действительных чисел, используя оператор выбора. II способ Var Max,

Слайд 35

Дано действительное число a. Вычислить f(a), если

Дано действительное число 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 это изменение формата числа

Program Usl1; Var A, F : Real; Begin WriteLn('Введите действительное число: '); ReadLn(A);

Слайд 37

Написать программу которая показывает чётное число или нет, если оно меньше 10. В

случае, если 9

Написать программу которая показывает чётное число или нет, если оно меньше 10. В случае, если 9

Слайд 38

Примеры:

Программы показывает чётное число или нет, если оно меньше 10. В случае, если

9 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;

Примеры: Программы показывает чётное число или нет, если оно меньше 10. В случае,

Слайд 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.

Program Goroskop; Var Year : Integer; Begin Write('Введите год '); ReadLn(Year); CASE Year

Слайд 42

Пример программы, которая по введённому числу вида 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.

Пример программы, которая по введённому числу вида nn.nn.nnnn выводит название месяца и год

Слайд 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.

Program first; var n:integer; begin writeln('введите номер месяца'); readln(n); case n of 1:writeln('январь');

Слайд 45

Теперь решим другим способом задачу решенную в самом начале
Условие: по введенному 8-мизначному числу

определить является ли это датой (в формате дд.мм.гггг), если такой даты не существует сообщить на экран

Теперь решим другим способом задачу решенную в самом начале Условие: по введенному 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.

РЕШЕНИЕ

var a,d,m,g,vis:integer; BEGIN read (a); d:=a div 1000000; m:=a mod 1000000; g:=m mod

Имя файла: Оператор-выбора-case.pptx
Количество просмотров: 27
Количество скачиваний: 0