Оператор if позволяет выполнять переходы на ту или иную ветвь по значению булевского (логического) условия. Используя несколько операторов if, можно производить ветвление по последовательности условий.
Пример 5.4. Преобразование введенного целого числа из диапазона (0..4) в его словесное представление
Program Digitl; var Num: integer; begin write('Введитечисло:'); readln(Num); if Num = 0 then writeln('Нуль'); if Num = 1 then writeln('Один'); if Num = 2 then writeln('Два'); if Num = 3 then writeln( 'Три'); if Num = 4 then writeln('Четыре'); readln end.
Выполним ту же задачу, используя другую управляющую структуру — оператор выбора case ... of. Формат записи оператора таков:
Case <выражение порядкового типа> of <значение1>:<оператор1>; <значениеN>:<операторN> else <оператор> end
Пример 5.5. Использование структуры case ... of для перевода целого числа в его словесное представление
Program Digit2; var Num: integer; begin write('Введитечисло:'); readln(Num); caseNumof 0:writeln('Нуль'); 1:writeln('Один'); 2:writeln('Два' ); 3:writeln('Три '); 4:writeln('Четыре') elsewriteln('Введено другое число') end; readln end.
Ниже приведена блок-схема алгоритма решения этой задачи (рис. 5.9).
Рис. 5.9. Блок-схема алгоритма, выводящая словесное представление введенного с клавиатуры числа (не большего 4)
Переменная Num является селектором в операторе case. По значению селектора происходит переход на соответствующую метку.
Селектор должен принадлежать к порядковому типу (то есть он не может иметь тип real)!
Пример 5.6. Определение номера квартала по введенному номеру месяца
Program Digit3; var Num:integer; begin write('Введите номер месяца:'); readln(Num); case Num of 1,2,3 : writeln('Первыйквартал'); 4,5,6 : writeln('Второй квартал'); 7.. 9 : writeln('Третий квартал'); { метка 7..9 - интервал чисел от 7 до 9: то же самое, что и 7,8,9} 10..12: writeln('Четвертый квартал') elsewriteln('Некорректный ввод') end; readln end.
При переходе на метку может выполняться целый блок операторов, который оформляется с помощью структуры begin ... end.
Задание 5.11. Написать программу, в которой в переменную типа Char вводится символ с клавиатуры. Программа выдает сообщение о том, какой символ был введен: - цифра от 0 до 9; - латинская строчная буква; - латинская заглавная буква.
При записи меток в операторе case можно использовать интервальный тип. Например, интервал для латинских заглавных букв записывается: 'A'. .'Z'. Если нужно учесть строчную латиницу, то интервал для меток будет выглядеть так: 'A'. .'Z','a'. .'z'.
Выводы
1. Существуют задачи, решение которых включает анализ логического условия. Такие задачи описываются разветвляющимся алгоритмом (сравните с линейным алгоритмом). 2. При ветвлении анализируется логическое выражение и, в зависимости от его результата, выполняется та или иная ветвь алгоритма. 3. В Паскале оператор ветвления называется if. Он имеет две формы записи — полную и неполную. 4. При полной форме записи if в случае истинности логического условия выполняется один блок программы (после слова then), а в случае ложности — другой (после слова else). 5. При неполной записи оператора if блок else опускается. 6. При переходе на ту или иную ветвь алгоритма после анализа логического условия возможно выполнение блока операторов, который оформляется с помощью структуры begin ... epd. 7. Точка с запятой слева и справа от then и от else не ставится. 8. В случае, когда анализируемое выражение может иметь более двух значений, и при разнйх значениях нужно выполнять разные инструкции, используют оператор case. 9. Оператор case должен заканчиваться ключевым словом end. Это один из тех редких случаев, когда количество операторов begin в программе не будет совпадать с количеством операторов end. 10. Чтобы текст программы был более понятен, вложенные (подчиненные) блоки операторов принято оформлять со сдвигом вправо, лесенкой. При каждом следующем вложении операторы сдвигают еще на несколько позиций вправо.
Контрольные вопросы
1. Чем отличается линейный алгоритм от ветвления? 2. Какие ключевые слова используются в Паскале для организации ветвления? Что находится между ними? 3. Чем полное ветвление отличается от неполного? 4. Как оформлять текст программы, чтобы он был понятнее? 5. Что необходимо использовать, если в случае истинности некоторого условия нужно выполнить несколько операторов? 6. Как быть, если в случае истинности некоторого условия никаких действий выполнять не требуется, а в случае ложности нужно выполнить несколько действий? 7. Какую управляющую структуру Паскаля нужно использовать, если проверяемое выражение может принимать несколько возможных значений, и в каждом случае необходимо выполнить разные действия? saw 8. В каком случае количество операторов begin в программе не должно соответствовать количеству операторов end?