
- •Глава 5. Программирование линейных вычислительных процессов
- •5.1. Оператор присваивания
- •5.2. Простейший ввод и вывод данных
- •5.2.1. Ввод числовых данных с клавиатуры
- •5.2.2. Вывод данных на экран монитора
- •5.3. Составление программы
- •5.4. Вопросы для самоконтроля
- •If l then оператор1 else оператор2 ,
- •6.1.2. Краткая форма условного оператора if
- •6.2. Оператор перехода goto
- •Пример 6.7
- •6.3. Оператор варианта case
- •Пример 6.10
- •Пример 6.12
- •6.4. Вопросы для самоконтроля
6.2. Оператор перехода goto
Изменить естественный порядок выполнения операторов и передать управление другой части программы при необходимости можно оператором перехода в виде
goto метка,
где метка - константа целого типа без знака в диапазоне 1 - 9999 или имя.
Оператор goto передаёт управление помеченному оператору программы.
Метка записывается перед помечаемым оператором; между ним и меткой ставится двоеточие.
Метки выбираются программистом по своему усмотрению. Помечать несколько операторов программы одной и той же меткой запрещено.
Метки должны быть описаны в разделе описаний программы, причем каждая не более одного раза. Описание имеет вид:
label метка1, метка2, ...
Описанные метки должны быть обязательно использованы в программе.
Пример 6.7
label 27, betta;
Первая из описанных меток представляет собой константу, вторая - имя.
Пример 6.8
goto 32;
10 : a := 2;
.........
32 : y := x / a;
Здесь после оператора goto 32 выполняется оператор y := x / a, помеченный меткой 32.
_______________________________________________________
Оператор, следующий за оператором goto, должен быть помечен, иначе все операторы в программе между операторами goto и оператором, на который передаётся управление, не будут выполнены.
Пример 6.9
Значения переменных a, b, c отсортировать в порядке возрастания, т.е. так, чтобы выполнялось неравенство a < b < c.
program example69;
label 1, 2;
var
a, b, c, d : integer;
begin
write ('введите a,b,c '); readln (a,b,c);
2:
if a < b then
if b < c then goto 1
else begin
d := c; c := b; b := d; goto 2
end
else begin
d := a; a := b; b := d; goto 2
end;
1: writeln (a:5, b:5, c:5)
e nd.
Использование оператора goto в программе теоретически считается лишним, так как противоречит идеям структурного программирования - делает программы менее понятными и вызывает сложности при отладке. Поэтому его применения по возможности следует избегать.
Если все же такая необходимость возникла, рекомендуется соблюдать приведенные ниже правила:
по возможности применять оператор перехода для передачи управления только вниз по тексту программы; если же требуется передача управления вверх, следует воспользоваться операторами цикла (см. главу 7);
недопустимы переходы из главной программы в подпрограмму и обратно (см. главу 9);
нежелательны переходы внутрь структурных операторов; последствия таких переходов непредсказуемы.
6.3. Оператор варианта case
В отличие от условного оператора, который позволяет выбрать один из двух взаимоисключающих путей решения задачи, оператор варианта дает возможность сделать выбор одного пути из нескольких. Он используется в основном при программировании переключений.
Оператор варианта можно рассматривать как обобщение условного оператора.
Оператор варианта записывается в виде
case селектор of
n1: оператор1;
n2: оператор2;
………………….
nk: операторK;
else
операторM
end
где селектор - переменная или выражение скалярного типа (за исключением типа real); n1, n2,..., nk – метки выбора; оператор1, оператор2,..., операторK – простые или составные операторы (рис. 6.2, 6.3).
Операторы и предшествующие им метки будем называть альтернативами. Выбор альтернативы определяется значением селектора.
Рис. 6.2. Синтаксическая диаграмма оператора case
Рис. 6.3. Синтаксическая диаграмма альтернативы
Выполнение
оператора case
начинается с вычисления значения
селектора. Затем полученное значение
сравнивается с метками. Если это значение
совпадает с какой-либо меткой, выполняется
тот оператор, перед которым она стоит,
остальные операторы игнорируются.
Если такого совпадения не обнаружено, выполнятся ветвь else, состоящая из одного или нескольких операторов.
И в том и в другом случае следующим оператором, подлежащим выполнению, будет оператор программы, расположенный после ключевого слова end.
Ветвь else не является обязательной и в операторе может отсутствовать.
Использование оператора case предполагает соблюдение следующих правил:
1) перед каждым оператором альтернативы может располагаться несколько меток, отделенных друг от друга запятыми;
2) метки, предшествующие альтернативам, должны иметь тип одинаковый с типом селектора;
3) повторение меток в альтернативах недопустимо;
4) метки не описываются в разделе label программы и на них нельзя передавать управление с помощью оператора Goto.