
- •Глава 4. Операторы языка. Основные конструкции турбо паскаля
- •Составной оператор
- •4.2. Разветвляющиеся вычислительные процессы и операторы перехода
- •4.2.1. Оператор условного перехода
- •4.2.2. Оператор безусловного перехода
- •4.2.3. Оператор выбора
- •4.3. Циклические вычислительные процессы и операторы цикла
- •4.3.1. Оператор цикла с параметром
- •4.3.2. Оператор цикла с предварительным условием (с предусловием)
- •4.3.3. Оператор цикла с последующим условием (с постусловием)
- •4.3.4. Вложенные циклы
4.2.3. Оператор выбора
Оператор выбора CASE обеспечивает организацию разветвлений путем выбора одного из нескольких операторов.
Формат записи оператора выбора:
case <селектор> of
c1: <оператор 1>;
c2: <оператор 2>;
. . . . . . . .
cn: <оператор n>
else <оператор>
end;
Селектором в операторе выбора является выражение целого (кроме longint), символьного, логического типа, либо типа, определяемого пользователем (перечисляемого и ограниченного). Из операторов 1, 2, ..., n выполняется тот, для которого соответствующая константа c1, c2, ..., cn совпадает со значением селектора. Константы должны быть одного типа с селектором.
Если для нескольких констант нужно выполнить один и тот же оператор, то их можно перечислить через запятую (или указать диапазон).
Оператор выбора работает следующим образом: сначала вычисляется значение селектора, затем в последовательности операторов 1, 2, ..., n отыскивается тот, которому соответствует константа, равная вычисленному значению селектора. Найденный оператор выполняется, оператор case завершает работу.
Если в списке констант не будет найдена константа, соответствующая вычисленному значению селектора, то выполняется оператор, стоящий в программе за case, если в case нет ветви else, а если такая ветвь есть, то оператору, стоящему за else.
Примеры записи оператора выбора:
1) case k+1 of
5: y:=sqr(x);
3,11: y:=sqrt(x);
4: z:=4*(a-b);
6..10: Writeln(a,b)
end;
2) case s of
'+', '-', '*', '/': Write('знак операции');
'A'..'Z': Write('буква');
'0'..'9': Write('цифра')
else Write('другой символ')
end;
Задача 1. По заданному номеру определить день недели.
program Day_Week;
var Day : byte;
begin
write (‘Введите номер дня недели : ‘); readln (Day);
case Day of
1 : writeln (‘ Понедельник ‘);
2 : writeln (‘ Вторник ‘);
3 : writeln (‘ Среда ‘);
4 : writeln (‘ Четверг ‘);
5 : writeln (‘ Пятница ‘);
6 : writeln (‘ Суббота ‘)
7 : writeln (‘ Воскресенье ‘);
end;
end.
Задача 2. Даны два действительных числа x и y. Арифметические действия над числами пронумерованы (1 – сложение, 2 – вычитание, 3 – умножение, 4 - деление). Составить программу, которая по введенному номеру выполняет то или иное действие над числами.
program year;
var
x, y, k: integer;
begin
write ('Введите первое число x: '); readln (x);
write (' Введите второе число y: '); readln (y);
write ('Введите номер арифметического действия k: '); readln (k);
{В зависимости от введенного номера арифметической операции k выбирается необходимое действие}
case k mod 10 of
1 : writeln ('Операция сложения x + y = ',x + y);
2 : writeln ('Операция вычитания x – y = ',x - y);
3 : writeln ('Операция умножения x * y = ',x * y);
4 : writeln 'Операция деления x / y = ',x / y)
end;
end.
Задача 3. Составить программу, которая для целого числа k (от 1 до 100), напечатает фразу “Мне k лет”, где k - введенное с клавиатуры число, при этом в нужных случаях слово “лет” заменить на слово “год” или “года”. (Например: при k=70 “Мне 70 лет”, при k=15 “Мне 15 лет”, k=23 “Мне 23 года” и т.п.)
program Year;
var
k: 1.. 100 ;
begin
write ('Сколько вам лет? : ');
readln (k);
if ( k >= 11) and (k <= 14)
then writeln ('Мне ',k, ' лет)
else
begin
case k mod 10 of
1 : writeln ('Мне ',k,' год');
2..4 : writeln ('Мне ',k,' года ');
0, 5..9 : writeln ('Мне ',k,' лет')
end;
end;
end.
Задачи для самостоятельного решения
Вычислить значение у при заданном значении х:
Для функций, заданных графически, определить значение y при заданном значении x.
а) б)
y
y
2
1
0
2 x
0 1
x
3. Дано целое число. Определить:
а) является ли оно четным;
б) оканчивается ли оно четной цифрой.
Известны год и номер месяца рождения человека, а также год и номер месяца сегодняшнего дня (январь — 1 и т. д.). Определить возраст человека (число полных лет). В случае совпадения указанных месяцев считать, что прошел полный год.
Даны радиус круга и сторона квадрата. У какой фигуры площадь больше?
Известны сопротивления двух не соединенных друг с другом участков электрической цепи и напряжение на каждом из них. По какому участку протекает меньший ток?
7. Дано двузначное число. Определить:
а) какая из его цифр больше, первая или вторая;
б) является ли сумма его цифр двузначным числом;
в) больше ли числа а сумма его цифр;
г) кратна ли трем сумма его цифр;
Дано трехзначное число. Выяснить, является ли оно палиндромом («перевертышем»), т. е. таким числом, десятичная запись которого читается одинаково слева направо и справа налево.
Даны три вещественных числа a, b, c. Если существует треугольник со сторонами a, b, c, то определить его вид (прямоугольный, остроугольный или тупоугольный) и особенности (равносторонний, равнобедренный, разносторонний).
Написать программу, которая по вводимому числу от 1 до 11 (номеру класса) выдает соответствующее сообщение «Привет, k-классник». Например, если k=1, «Привет, первоклассник»; k=4: «Привет, четвероклассник».
Мастям игральных карт условно присвоены следующие порядковые номера: «пики» — 1, «трефы» — 2, «бубны» — 3, «червы» — 4. По заданному номеру масти т (1<т<4) определить название соответствующей масти.
Игральным картам условно присвоены следующие порядковые номера в зависимости от их достоинства: «валету» -11, «даме»-12, «королю»-13, «тузу»-14. Порядковые номера остальных карт соответствуют их названиям («шестерка», «девятка» и т. п.) По заданному номеру карты k (6
k 14) определить достоинство соответствующей карты.