Реализация разветвляющихся алгоритмов со структурой выбора
Структура выбора
Второй алгоритмической структурой, определяющей разветвляющийся алгоритм, является структура выбора (рис. 13.1).
Рис. 13.1. – Алгоритмическая структура выбора
Структура выбора используется в алгоритмах, в которых при разных значениях одного и того же выражения (которое называют ключевым выражением) необходимо выполнять различные действия (различные варианты действий, каждый из которых имеет свой уникальный ключ варианта). Выполняется тот вариант, к которому "подошел ключ", полученный в результате вычисления ключевого выражения (значение ключевого выражения и константа, представляющая ключ варианта совпали).
IV.2 6. Оператор выбора
Назначение
Оператор предназначен для реализации структуры выбора, в которой в качестве ключевого выражения используется выражение, дающее результат простого порядкового типа.
Синтаксис
Синтаксическая диаграмма оператора выбора приведена на рис. 13.2.
Синтаксические ограничения:
- ключевое выражение может быть любым выражением, дающим результат простого порядкового типа, имеющего не более 65535 значений;
- все константы, являющиеся ключами вариантов, должны быть уникальными и по типу совместимыми с типом ключевого выражения.
Рис. 13.2. – Оператор выбора
Семантика
1) вычисляется ключевое выражение между символами case и of, получается единственное значение простого порядкового типа;
2) полученное значение последовательно сравнивается с константами, являющимися ключами вариантов;
3) при обнаружении совпадения выполняется оператор данного варианта и выполнение оператора выбора прекращается;
4) при отсутствии совпадения выполняется оператор после символа else, если ветвь else существует.
Задача определения сезона года
Постановка задачи
По номеру месяца определить название сезона года.
Математическая модель
если номер месяца m = 12, 1 или 2, то сезон зима;
если m=3, 4 или 5 - весна;
если m=6, 7 или 8 - лето;
если m=9, 10 или 11 - осень.
Метод решения
Решение заключается в том, что при разных значениях переменной m необходимо выполнять разные выводы. Таким образом, используется структура выбора, в которой ключевое выражение состоит из переменной m, ключи вариантов – констант от 1 по 12, серии команд вариантов состоят из вывода соответствующих символьных значений названий сезонов года:
выбор по m из вариантов
при 12,1,2 вывод('зима');
при 3,4,5 вывод('весна');
при 6,7,8 вывод('лето');
при 9,10,11 вывод('осень')
Информационная модель
Входные данные - номер месяца m типа INTEGER;
выходные - тексты 'зима', 'весна', 'лето', 'осень', 'решения нет';
промежуточные - отсутствуют.
Программная модель
program p_sezon;
var m:integer;{номер месяца}
begin
{ввод исходных данных}
writeln('Введите номер месяца');
readln(m);
{реализация метода решения}
case m of
12, 1, 2: writeln('зима');
3, 4, 5: writeln('весна');
6, 7, 8: writeln('лето');
9, 10, 11: writeln('осень')
else writeln('решения нет')
end {Сase}
end.
Исполнение программы p_sezon
0) До выполнения программы осуществляется распределение свободного участка памяти под переменные величины, описанные в разделе переменных программы (рис. 13.3).
ОП | .. | |
m | ? | INTEGER |
Рис.13.3. – Распределение памяти
Содержимое выделенного участка памяти - неопределенное;
1) выполняется обращение к процедуре вывода:
writeln('Введите номер месяца')
На экране, начиная с текущего положения курсора, появляется сообщение:
Введите номер месяца
2) выполняется обращение к процедуре ввода:
readln(m)
Пользователь на клавиатуре набирает информацию:
5 и нажимает клавишу ввод (Return или Enter).
ЭВМ: 5 помещает в память под именем m;
ОП | .. | |
m | ? | INTEGER |
Рис.13.4. – Распределение памяти после ввода
3) начинается выполнение оператора выбора:
Сase m of
12, 1, 2: writeln('зима');
3, 4, 5: writeln('весна');
6, 7, 8: writeln('лето');
9, 10, 11: writeln('осень')
else writeln('решения нет')
end {Сase}
В начале вычисляется ключевое выражение (в нашем случае состоящее из переменной целого типа m), получается ответ 5;
4) производится последовательное сравнение результата вычисления ключевого выражения с константами-ключами вариантов.
Во втором по порядку варианте обнаруживается совпадение ключа 5 с результатом 5;
5) выполняется оператор по ключу 5, остальные действия в операторе Сase не выполняются:
writeln('весна')
На экране, начиная с текущего положения курсора, появляется сообщение:
весна