Ваш город: Не указано

Оператор выбора (case)

Оператор выбора CASE осуществляет выполнение определенных действий, напрямую зависящих от значений одной и той же переменной.

Оператор выбора немного похож на условный оператор (if), но имеет более легкую структуру. Допустим, есть программа, позволяющая преобразовать поведение (или оценки) учеников в текстовый вид (2-неудовл., 3-плохо, 4-хорошо, 5-отлично). Программа, написанная с помощью условных операторов будет выглядеть следующим образом:

...
if  i=2 then
writeln('Неудовлетворительно!');
if i=3 then
writeln('Плохо');
if i=4 then
writeln ('Хорошо');
if i=5 then
writeln ('Отлично!');
...

Заметьте, что мы постоянно отслеживаем поведение одной и той же переменной i, которая принимает значения от 2 до 5 (в моем случае). Оператор вывода при этом выводит различные значения. Но используя оператор CASE, получаем следующий код:

...
case i of
2: writeln('Неудовлетворительно!');
3: writeln('Плохо');
4: writeln ('Хорошо');
5: writeln ('Отлично!');
end;
...

Как видно, сразу после CASE ставится переменная (i) и OF. После CASE BEGIN ставить не нужно, даже если необходимо сделать множество выборов для переменной. Затем пишем значение, которое может принимать переменная, ставим знак двоеточия (:) и описываем дальнейшие действия. Если нужно прописать не одно, а несколько действий, то ставим BEGIN, и прописываем все эти действия, после которых обязательно ставим END;. Оператор выбора тоже всегда закрывается END;. Тип переменной (i) не обязательно должен быть именно INTEGER. Какие еще существуют типы, мы узнаем немного позднее.

Таким образом все дальнейшие действия программы будут зависеть от значений переменной. Следующий код показывает каким образом можно выполнить одно и то же действие для определенного диапазона или отдельных значений переменной:

...
case i of
1..5: writeln('Выполняется для значений i от 1 до 5');
6,7, 10: writeln('Выполняется при значении i равным 10, 13 и 14');
8..9: writeln('Выполняется для значений i от 8 до 9'); {В этом выражении
значения переменной можно взять через запятую: 8,9}
end;
...

Задания:

  • Написать программу, отображающую на экране времена года, при вводе номера месяца.
  • Написать программу преобразования цифр (0-10) в слова.
  • Составить программу, которая меняла бы окончания, в зависимости от возраста человека ("мне 1 год", "мне 4 года", "мне 75 лет").


Ответы к заданиям предыдущей статьи:

  • Определить, является ли число k четным и вывести значение "истина" или "ложь".

Определение четного числа на Pascal

Чтобы определить, является ли число четным, либо делится ли оно на три, пять, семь и т.д., нужно чтобы остаток от деления на эти числа равнялся нулю!

  • Проверить, равны ли суммы первых двух и последних двух цифр четырехзначного числа x.

Эта программа имеет множество решений. Вот одно из них:

Pascal Равны ли суммы двух первых и двух последних цифр числа

В данном примере в переменной A хранится введенное число (например 5348).

Далее переменная B присваивает значение деления переменной A на 1000 (5348/1000=5, остаток откидываем). Таким образом найдено первое число.

Затем переменная C присваивает значение более сложной операции. Вначале мы вычитаем из введенного нами числа полученное число B, умноженное на 1000 (5348-5*1000=5348-5000=348). Полученный результат делим нацело на 100 (348/100=3).

У нас уже есть два числа.

Третье число находится в переменной D. Сначала мы отнимаем из введенного числа (5348) первое полученное число, увеличенное в тысячу раз, а затем и полученное второе число, увеличенное в сто раз (5348-5*1000-3*100=5348-5000-300=348-300=48) и делим нацело на 10 (48/10=4). Четвертое число (в переменной E), находится таким же образом. Чтобы понять схему нахождения данных цифр числа, давайте разложим число 5348 на слагаемые: 5000+300+40+8. Как найти из таких простых чисел первую цифру числа, я думаю проблем не возникнет. Если задача по нахождению отдельных цифр числа до сих не понятна, попробуйте взять листочек бумаги, ручку и вместо переменной A подставить любое четырехзначное число. А дальше - чистая математика. Подставляем все значения в переменные и получаем готовые ответы. Дальше задания будут усложняться, именно поэтому очень важно на листке бумаги все заранее продумать, просчитать, и только после этого переписывать полученное решение в Паскаль.

Следующая часть кода находит сумму двух первых и последних цифр числа, сравнивает и, если сумма равна, то выведет TRUE, а если же нет - то выведет FALSE. Например для чисел 5216, 1423, 9155, 1221 выведет TRUE, а для 7891, 1333, 5641, 9147 выведет FALSE.

  • Есть три числа. Расположить их в порядке возрастания и проверить между собой на совпадение.

Сортировка чисел в Pascal

Хочу отметить, что комментарии, записанные в фигурных скобках, Pascal автоматически пропускает. В основном они очень важны для того, чтобы не забыть о том, что выполняет программа на данном промежутке кода. Можно неделю или максимум месяц не забыть, но потом не только Вам, но и любому другому программисту станет гораздо тяжелее разобраться в Вашей программе.

Чтобы программы не занимали слишком много места на жестком диске и в оперативной памяти, следует искать более короткие решения программы. Например, можно вместо (A<B) OR (A=B), написать сразу A<=B.

Теперь объясню о ходе решения данной задачи. Вначале проверяем, есть ли совпадения чисел A,B,C. Если хотя бы одно из них совпадет с другим, то записываем в переменную BOL (название переменной может содержать несколько символов латинского алфавита, цифры и подчеркивание. Более подробнее об этом рассказывалось в статье Знакомство с Turbo Pascal) значение TRUE, в остальных случаях - FALSE. Дальше проверяем каждое число по отдельности. Можно даже эту программу записать в виде блок схемы. Но ее мы будем учиться составлять немного позднее. Здесь никаких хитростей нет (хотя можно было бы их добавить), поэтому разобраться в ней совершенно не сложно.


<<Предыдущая статья                                     Следующая статья >>

Опубликовано: 2017-12-04 21:19:46