Презентация

Download Report

Transcript Презентация

Оператор множественного выбора
CASE
Сегодня наша задача – познакомиться со
способами организации в программах
ветвления из трех и более ветвей.
Операторы ветвления
В языке Pascal имеются два оператора ветвления:

If (ветвление по условию);
 Case (ветвление по выбору).
Если число уровней вложения условного оператора If
больше двух-трёх, то лучше воспользоваться оператором
ветвления по выбору Case.
3
Оператор выбора CASE OF
Здесь селектор – проверяемое целое
арифметическое, логическое или
символьное выражение. Причем оно
может принимать значения лишь
некоторых типов, общим свойством для
которых является то, что их значения
известны точно. Поэтому, в частности,
тип селектора не может быть
вещественного типа (Real),
<Списки> представляют собой
перечисления возможных значений
выражения селектор.
При совпадении значения выражения
хотя бы с одним из значений <списка>
будет выполняться соответствующее
<действие> и на этом выполнение
команды выбора завершается.
<Списки> могут быть заданы следующими способами:
Вид списка
Список, состоящий из одного
значения
Значение
Список, содержащий
перечисление значений
‘a’
8
TRUE
1, 4, 5
‘a’, ‘b’,’*’,’@’
Список, содержащий интервалы
значений
1..5, 20..30
‘a’ ..’z’
Список, содержащий смешанную
форму представления значений
1 .. 5, 15, 55
‘a’ ..’z’, ’A’, ’B’
Работу этого оператора можно
проиллюстрировать следующим примером:
Составить программу, которая спрашивает у пользователя
номер месяца и выводит соответствующее названия
времени года. В случае, если пользователь укажет
недопустимое число, программа должна вывести
сообщение об ошибке «Ошибка ввода данных».
Ниже приведен рекомендованный вид экрана во время
работы программы:
Введите номер месяца (число от 1 до 12) и нажмите <Enter>
-> 12
Зима
Program Pr;
Var month: Integer;
Begin
Writeln (‘Введите номер месяца (число от 1 до 12) и
нажмите <Enter>’);
Read (month);
Case month of
1, 2, 12: Writeln(‘Зима’);
3 . . 5: Writeln(‘Весна’);
6 . . 8: Writeln(‘Лето’);
9 . .11: Writeln (‘Осень’);
Else Writeln (‘Ошибка ввода данных – число должно
быть от 1 до 12’);
End;
End.
Найти наибольшее из двух действительных
чисел, используя оператор выбора.
Program Maximum;
Var Max, X, Y : Real;
Begin
Write('Введите два неравных числа:');
ReadLn(X, Y);
Case X > Y Of
TRUE : Max := X;
FALSE : Max := Y
End;
Write('Максимальное из двух есть ', Max : 12 : 6)
End.
Сравнить значение переменной ch с различными
диапазонами значений.
var ch: char;
begin write ('Введите символ: '); readln (ch);
case ch of
'0'..'9': write ('Это число');
'a'..'z','A'..'Z': write ('Это английская буква');
'а'..'я','А'..'Я': write ('Это русская буква')
end;
end.
Составить программу, которая по номеру дня недели выводит
на экран его название:
Program dni_nedeli;
Var n: byte;
Begin Readln(n);
Case n of
1: writeln(‘понедельник ’);
2: writeln(‘вторник ’);
3: writeln(‘среда ’);
4: writeln(‘четверг ’);
5: writeln(‘пятница ’);
6: writeln(‘суббота ’);
7: writeln(‘воскресенье’);
else writeln(‘дня недели с номером’, n,’нет’);
end;
end.
Преобразовать символ, если он является строчной
русской буквой, в заглавную букву.
Так как в альтернативной системе кодировки ASCII строчные русские
буквы идут не подряд, а с некоторым разрывом, то в данном случае, в
зависимости от того, в какую часть таблицы попадает введенная буква,
используется та или иная формула. Если введённый символ не является
строчной русской буквой, он выводится без изменения.
Program UpCase;
Var C : Char;
Begin
Write('Введите символ:'); ReadLn(C);
Case C Of
'а'..'п' : C := Chr(Ord(C) - 32);
'р'..'я' : C := Chr(Ord(C) - 80)
End;
WriteLn(C);
End.
Задача №303. Коровы
По данному числу n закончите фразу "На лугу пасется..."
одним из возможных продолжений: "n коров", "n корова", "n
коровы", правильно склоняя слово "корова".
Формат входных данных
Дано число n (n<100).
Формат выходных данных
Программа должна вывести введенное число n и одно из слов
(на латинице): korov, korova или korovy, например, 1 korova, 2
korovy, 5 korov. Между числом и словом должен стоять ровно
один пробел.
Пример
Ввод
1
Вывод
1 korova
program z303;
var n: longint;
begin
readln (n);
case n mod 100 of
11..14: writeln(n,'korov':6)
else case n mod 10 of
0,5..9: writeln (n,' korov');
1: writeln (n,' korova');
2..4: writeln (n,' korovy');end;
end;
end.
program z303;
var n:longint; p1,p2,p3,p4: boolean; s:string;
begin
readln(n);
p1:=(abs(n mod 100)>=11) and (abs(n mod 100)<=14);
p2:=(abs(n mod 10)=1);
p3:=(abs(n mod 10)>=2) and (abs(n mod 10)<=4);
p4:=((abs(n mod 10)>=5) and (abs(n mod 10)<=9)) or
(abs(n mod 10)=0);
if p1 then s:='korov'
else if p2 then s:='korova'
else if p3 then s:='korovy'
else if p4 then s:='korov';
if p1 or p4 then writeln(n,s:6 )else if p2 or p3 then
writeln(n,s:7);
end.
В старояпонском календаре был принят двенадцатилетний цикл. Годы
внутри цикла носили названия животных: крысы, коровы, тигра, зайца,
дракона, змеи, лошади, овцы, обезьяны, петуха, собаки и свиньи.
Написать программу, которая позволяет ввести номер года и печатает его
название по старояпонскому календарю. Справка: 1996 г. — год крысы —
начало очередного цикла.
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.
Задача №1459. Римская система счисления
Дано число X. Требуется перевести это число в римскую
систему счисления.
Формат входного файла
Дано число X в десятичной системе счисления (1 ≤ X ≤ 100).
Формат выходного файла
Выведите X в римской системе счисления.
Примеры
Ввод
Вывод
4
IV
19
46
XIX
XLVI
program z1459;
var n,z:integer;s:string;
begin
readln(n);
s:='';
if (n>=40) and (n<=100) then
case n div 10 of
10: s:='C';
9: поиска
s:='XC';
Блок
символов С, XC,L,XL
(т.е. 100, 90, 50, 40)
5..8:s:='L';
4: s:='XL';
end;
z:=0;{desyatki}
if (n>50) and (n<>100) then
z:=(n-50)div 10;
Блок поиска количества десяток
if (n>10) and(т.е.
(n<40)
then
X)
z:=n div 10;
case z of
1: s:=s+'X';
Блок
прибавления символа десятки
2: s:=s+'XX';
(например XX, LXX)
3: s:=s+'XXX';
end;
if n mod 100=10 then s:='X';
case n mod 10 of{edinicy}
1: s:=s+'I';
2: s:=s+'II';
3: s:=s+'III';
4: s:=s+'IV';
Блок прибавления символа единицы
5:
s:=s+'V';
(например II - 2, LXXII - 72)
6: s:=s+'VI';
7: s:=s+'VII';
8: s:=s+'VIII';
9: s:=s+'IX';end;
writeln(s);
end.
Составить программу, вычисляющую стоимость междугородного
телефонного разговора (цена одной минуты определяется по
таблице). Исходными данными для программы являются код
города и продолжительность разговора. Ниже представлен
рекомендуемый вид экрана во время работы программы:
Вычисление стоимости разговора по телефону.
Введите исходные данные:
Код города -> 812
Длительность (целое количество минут) -> 3
Город: Владивосток
Цена минуты:2.20 руб,
Стоимость разговора: 6.60 руб.
Город
Код
Цена минуты
(руб.)
Владивосток
Москва
Мурманск
Самара
423
095
815
846
2,2
1,0
1,2
1,4
1. Выучить конспект.
2. Составить программу, которая после введенного с
клавиатуры числа (в диапазоне от 1 до 99),
обозначающего денежную единицу, дописывает
слово «Копейка» в правильной форме. Например, 5
копеек, 41 копейка и т. д.
3. Составить программу, которая по номеру
месяца, введенного с клавиатуры, выводит
количество дней в нем. В программе учесть
количество дней в феврале для
високосного и не високосного годов.