Разберем задачу:
Определить порядок целого число N от 0 до 99999 и вывести на экран сообщение: «число однозначное», «число двузначное», «число трехзначное», «число четырехзначное» или «число пятизначное»
Можно решить данную задачу с использованием условных операторов. Тогда блок-схема фрагмента программы будет выглядеть так:
Соответственно программа будет содержать 4 вложенных условных оператора и получится громоздкой.
if n<=9 then writeln('число однозначное')
else if n<=99 then writeln('число двузначное')
else if n<=999 then writeln('число трехзначное')
else if n<=9999 then writeln('число четырехзначное')
else writeln('число пятизначное');
При решении многих задач требуется использовать ветвления по многим направлениям. Тогда удобнее использовать оператор выбора.
Формат оператора выбора
case k of
значение 1: оператор 1;
значение 2: оператор 2;
значение 3: оператор 3;
…
значение n: оператор n
else оператор n+1;
end;
Сначала вычисляется выражение k, если оно равно значению 1, то выполняется оператор 1 и происходит выход из оператора выбора. Если k не равно значению 1, то сравнивается со значением 2 и т.д. Если k не равно ни одному из предложенных значений, то выполняется оператор n+1. Ветка else может отсутствовать.
Тогда при решении предыдущей задачи фрагмент программы примет вид:
case x of
0..9: writeln(‘однозначное’);
10..99: writeln(‘двузначное’);
100..999: writeln(‘трехзначное’);
1000..9999: writeln(‘четырехзначное');
10000..99999: writeln(‘пятизначное’);
end;
Задание 1. Какое значение примет переменная a после выполнения оператора выбора:
case a of
1..3: a:=a+b;
4..8: a:=a-b;
9,11,15: a:=a*b;
end;
для чисел:
a=1, b=2;
a=3, b=3;
a=6, b=2;
a=11, b=5;
Задание 2. Составьте программу, решающую следующую задачу: Вводится оценка цифрами, необходимо напечатать соответствующую оценку словами.
program ozenka;
var x:integer;
begin
writeln('введите оценку числом');
readln(x);
case x of
5: writeln(‘отлично’);
4: writeln(‘хорошо’);
3: writeln(‘удовлетворительно’);
2: writeln(‘неудовлетворительно’);
1:writeln('плохо');
else writeln(‘оценка введена неправильно’);
end;
end.
Задание 3. Написать программу, которая по введенному номеру месяца, выдавала бы время года.
Фрагмент программы:
case n of
12, 1, 2: writeln(‘зима’);
3, 4, 5: writeln(‘весна’);
6, 7, 8: writeln(‘лето’);
9, 10, 11: writeln(‘осень’);
else writeln(‘некорректные данные’);
end;
Задание 4. Для целого числа k от 1 до 99 напечатать фразу «Мне k лет», учитывая, что может быть год, лет, года.
год: 1, 21, 31, 41 … n mod 10 = 1
лет: 5-20, 25-30, 35-40, 45-50 … n mod 10 = 0, 5, 6, 7, 8, 9
года: 2, 3, 4, 22-24, 32-34, 42-44 … n mod 10 = 2, 3, 4
Фрагмент программы:
case n of
1: writeln(‘Мне’, k, ‘год’);
2, 3, 4: writeln(‘Мне’, k, ‘года’);
5..20: writeln(‘Мне’, k, ‘лет’);
else
case n mod 10 of
1: writeln(‘Мне’, k, ‘год’);
0, 5..9: writeln(‘Мне’, k, ‘лет’);
2..4: writeln(‘Мне’, k, ‘года’);
end;
end;