Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava5_6.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
563.2 Кб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]