Оставим пока числовые
последовательности, их существует большое
многообразие и позднее мы к ним вернемся. А
сейчас попробуем решить следующую задачу:
Составить программу, которая в зависимости
от порядкового номера дня недели (1, 2, ..., 7) выводит
на экран его название (понедельник, вторник, ...,
воскресенье).
Для этого воспользуемся условным оператором.
Var x: byte;
Begin
Write(' введите число от 1 до 7');
Readln(x);
If x=1 then writeln('понедельник');
If x=2 then writeln('вторник');
If x=3 then writeln('среда');
If x=4 then writeln('четверг');
If x=5 then writeln('пятница');
If x=6 then writeln('суббота');
If x=7 then writeln('воскресенье');
Readln
End.
А если бы речь шла о названия месяца, то
операторов пришлось бы использовать еще больше,
так как условный оператор позволяет
осуществлять ветвление программы только по двум
направлениям, одно из которых соответствует
выполнению проверяемого условия, а другое -
невыполнению этого же условия. А если для
переменной необходимо выполнить в зависимости
от условий ряд действий придется использовать
вложенные операторы или несколько операторов
подряд.
В таком случае лучше подойдет оператор
ВАРИАНТА (или ВЫБОРА).
Если условный оператор напоминает
дорожную развилку, то оператор выбора - это
разделение пути на множество дорог, по одной из
которых пойдет выполнение программы.
Формат оператора:
CASE выражение OF
P1:<оператор 1>;
P2:<оператор 2>;
. . .
PN:<оператор N>;
ELSE <оператор N+1>
END;
Выражение порядкового типа вычисляется,
и его значение отыскивается в одном из списков
констант. После этого выполняется
соответствующий оператор. Если значение
выражения не совпало ни с одной из меток, то
выполняется оператор из строки ELSE. Cокращенная
форма оператора не содержит ELSE. Метки оператора
варианта могут быть константами любого типа, но
их тип должен совпадать с типом выражения.
Тогда код нашей программы будет
выглядеть иначе:
Var x: byte;
Begin
Write(' введите число от 1 до 7'); Readln(x);
Case x of
1: writeln('понедельник');
2: writeln('вторник');
3: writeln('среда');
4: writeln('четверг');
5: writeln('пятница');
6: writeln('суббота');
7: writeln('воскресенье');
end;
Readln
End.
Если при выборе альтернативы необходимо
выполнение нескольких операторов, то нужно
заключить их в операторные скобки BEGIN . . . END;, т.е.
использовать составной оператор.
При использовании оператора CASE можно
использовать диапазон допустимых значений
параметра. Например, чтобы определить, введена ли
как символьная переменная цифра, можно написать:
CASE I OF
'0'..'9':writeln('цифра');
ELSE writeln ('не цифра')
END;
Задача. Для целого числа K от 1 до 99
напечатать фразу "Мне k лет", учитывая при
этом, что при некоторых значениях K слово
"лет" надо заменить на слово "год" или
"года". Например, 11 лет, 22 года, 51 год. (Данное
решение можно улучшить используя дополнительно
условный оператор. Попробуйте.)
var k:byte;
begin
write('Введите число лет'); readln(k);
case k of
1,21,31,41,51,61,71,81,91:writeln('Мне ',k,' год');
2..4,22..24,32..34,42..44,52..54,62..64,72..74,82..84,92..94:writeln('Мне ',k,'
года');
else writeln('Мне ',k,' лет');
end;
readln;
end.
Тренировочные
задания:
1. Составить программу, которая в зависимости
от порядкового номера месяца (1, 2, ..., 12) выводит на
экран его название (январь, февраль, ..., декабрь).
2. Написать программу, которая бы по введенному
номеру месяца выдавала соответствующее этому
месяцу время года.
3. Составить программу, которая читает
натуральное число N в десятичном представлении
(N<=10000), а на выходе выдает это же число в
десятичном представлении и на естественном
языке. Например: 7 - семь, 204 - двести четыре, 52 -
пятьдесят два.
Задачи на
повторение:
4. Дано натуральное число. Определить,
является ли разность его максимальной и
минимальной цифр четным числом.
5. Дано натуральное число. Определить, сколько раз
в нем встречается цифра, равная старшей.
Разбор заданий
урока 15.
3.Вводится последовательность чисел, 0-конец
последовательности. Найти два наименьших числа.
var x,min1,min2:integer;
begin
write('Введите число '); readln(x);
min1:=x;
write('Введите число '); readln(x);
min2:=x;
repeat
if x<=min1 then
begin
min2:=min1;
min1:=x
end
else if x<min2 then min2:=x;
write('Введите число '); readln(x);
until x=0;
write('Два наименьших числа ',min1,' и ', min2);
readln;
end.
4.Вводится последовательность из N целых чисел.
Найти наибольшее из всех отрицательных чисел.
var i,n,x,max:integer;
begin
write('Введите длину последовательности N= ');
readln(n);
repeat
write('Введите число '); readln(x);
n:=n-1;
if x<0 then max:=x;
until (x<0) or (n=0);
for i:=1 to n do
begin
write('Введите число'); readln;
if (x<0)and(max<x) then max:=x
end;
if max=0 then writeln('отрицательных чисел нет ')
else writeln('наибольшее из отрицательных ',
max);
readln;
end.
Желаю успехов!
Ганилова Татьяна Евгеньевна school6@rikt.ru
Гимназия №6, г. Междуреченск.