Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_2лабработа_401.doc
Скачиваний:
14
Добавлен:
14.11.2019
Размер:
280.06 Кб
Скачать

5.3. Оператор безусловного перехода Goto и оператор

отбора Case

Оператор безусловного перехода Goto используют для изменения последовательности (порядка) выполнения операторов и перехода к выполнению программы, начиная с оператора, имеющего метку. Эта же метка должна быть указана и в операторе Goto. Пример:

Goto 1;

1: Write (‘ОПЕРАТОР С МЕТКОЙ’);

Метки, используемые в Turbo Pascal, могут быть двух типов:

  • целым числом (в пределах от 0 до 9999);

  • обычным идентификатором.

Все используемые метки должны быть описаны в разделе объявления меток, начинающемся зарезервированным словом Label, пример:

Label 1, 2, 3, A, B, X2;

Для того, чтобы пометить оператор, перед ним пишут метку, двоеточием отделяя её от оператора. Таким образом, можно пометить только один оператор. Следует иметь ввиду, что использовать оператор Goto нужно очень осторожно. Частое его применение приводит к затруднению понимания логики работы программы. При написании блок-схемы этот оператор отображается стрелкой перехода в нужную часть алгоритма.

Оператор отбора – обобщение условного оператора: он даёт возможность выполнить одно из нескольких действий. В зависимости от значений выражения (селектора отбора), относящихся к перечисляемому или ограниченному (но не вещественному) типу, этот оператор производит выбор из нескольких операторов.

В общем случае конструкция оператора отбора имеет вид:

Case <селектор> Of

C1 : <оператор 1>;

C2 : <оператор 2>;

. . . . .

CN : <оператор N>;

[Else <оператор (N+1)>]

End;

В этой структуре: CaseOf … [Else …] End – зарезервированные слова языка PASCAL, которые можно перевести соответственно как ВЫБОР … ИЗ … [ИНАЧЕ …] КОНЕЦ;

C1, C2,…, CN – константы, с которыми сравнивается значение выражения "селектор";

оператор 1, оператор 2,…, оператор N – операторы, из которых выполняется тот, с константой которого совпадает значение выражения "селектор";

оператор (N+1) – оператор, который выполняется, если значение выражения "селектор" не совпадает ни с одной из констант C1, …, CN.

Ветвь оператора ELSE является необязательной. Если она отсутствует и значение выражения "селектор" не совпадает ни с одной из перечисленных констант, то выполняется оператор, стоящий за End. В отличие от оператора If перед словом Else точку с запятой можно ставить.

Если для нескольких констант нужно выполнить один и тот же оператор, их можно перечислить через запятую (или даже указать диапазон, если возможно), сопроводив их одним оператором. Например:

Case I Of

0, 2, 4, 6, 8: WriteLn (‘Четная цифра’);

1, 3, 5, 7, 9: WriteLn (‘Нечетная цифра’);

10…100: WriteLn (‘Число от 10 до 100’);

Else

WriteLn (‘Отрицательное число или больше 100’)

End;

Примером, использования оператора отбора, также может служить программа следующего задания.

Покупатель в 2002 году, имея 100 рублей, заплатил за покупку 23 рубля. Определить минимальное количество купюр в наборе, которое он получит в качестве сдачи. (Возможные купюры: 5 руб., 10 руб., 50 руб.).

Один из вариантов программы решения этой задачи выглядит так:

В блоке 1 вводим имеющуюся сумму А и сумму за покупку B в рублях. Далее в блоке 2 находим оставшуюся сумму N и обнуляем счётчик купюр K. Затем проверяем в блоке 3 больше ли оставшееся сумма, чем 50 (руб.), если да, то селектору R присваиваем значение 2, и осуществляем переход в блок 10, где оператор выбора передаёт управление блоку 11.

Рис. 5.4

В нём из оставшейся суммы N вычитаем 50 (руб.) и в блоке 14 увеличиваем счётчик купюр на 1. После этого возвращаемся к блоку 3 и сравниваем оставшуюся сумму N с достоинством трёх купюр, т.о. процесс повторяется до тех пор, пока оставшаяся сумма не станет меньше 5 руб. Как результат вычислений печатаем значение счётчика купюр K.

Program MONEY;

{ Минимальное количество купюр в качестве сдачи }

Label 1, 7;

Var

A, B, N, K, R: Integer;

Begin

Write (‘Исходная сумма’); ReadLn (A);

Write (‘Потраченная сумма’); ReadLn (B);

N := A B;

K := 0; { обнуление оставшейся суммы }

1: If N >= 50 Then R := 2 Else

If (N < 50) And (N >= 10) Then R := 3 Else

If (N < 10) And (N >= 5) Then R := 4 Else

Begin

WriteLn (‘Минимальное количество купюр = ’, K);

Goto 7

End;

Case R Of

2: N := N - 50;

3: N := N - 10;

4: N := N - 5;

End;

K := K + 1;

Goto 1;

7: End.

Результат выполнения программы

Исходная сумма 100

Потраченная сумма 23

Минимальное количество купюр = 4