Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal_lectures_small.doc
Скачиваний:
13
Добавлен:
23.03.2015
Размер:
339.46 Кб
Скачать
    1. Оператор безусловного перехода и метки

Оператор безусловного перехода – это инструкция перейти к указанному оператору.

Формат оператора:

<оператор безусловного перехода>::= "Goto" <метка>.

После выполнения этого оператора будет выполняться оператор, помеченный меткой, указанной после слова Goto. Говорят, что оператор Goto передает управление на помеченный оператор.

Синтаксис помеченного оператора:

<помеченный оператор>::= <метка> ":" <оператор>.

Синтаксис метки в стандартном Паскале:

<метка>::= <целое без знака>.

Во многих реализациях Паскаля, в частности, в системе Turbo Pascal, синтаксис метки расширен:

<метка>::= <целое без знака> | <имя>.

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

<описание меток>::= <метка> {"," <метка>} ";".

Запрещается передавать управление извне сложного оператора (составного оператора, условного оператора, оператора цикла) на оператор, вложенный в сложный оператор. Нельзя также передавать управление извне процедуры или функции на операторы внутри их и изнутри процедуры или функции на операторы вне соответствующей процедуры или функции.

Следует избегать использования оператора Goto, так как его использование затрудняет анализ алгоритма и отладку программы. Реальная потребность в операторе Goto при программировании на Паскале возникает редко, обычно при этом он используется в сочетании с условными операторами, например, для выхода по дополнительному условию из середины цикла.

Пример:

Program A;

Label 1; {описана метка 1}

Var i,j: integer;

Begin

..... {пропускаем фрагмент программы}

While true do Begin {начало тела цикла}

..... {пропускаем фрагмент программы}

If i>20 then goto 1; {выход из середины цикла по условию}

..... {пропускаем фрагмент программы}

end; {конец тела цикла}

1: j:=j+1; {помеченный оператор}

..... {пропускаем фрагмент программы}

End.

    1. Пустой оператор

В принципе синтаксис Паскаля можно определить без понятия "пустой оператор". Однако такая конструкция традиционно присутствует во многих языках программирования, начиная с машинного кода (пустая команда). Причем, в ряде языков пустой оператор присутствует явно. В Паскале он определяется неявно. Синтаксис:

<пустой оператор>::=.

Примеры пустых операторов:

A:=1;; B:=2; {пустой оператор между двумя знаками ;}

For i:=1 to 20 do; {пустой оператор после слова do и перед точкой с запятой}

Begin a:=3; b:=5; end; {пустой оператор перед словом end}

Пустой оператор может быть помечен так же, как и любой другой оператор, и тогда на него можно передавать управление оператором Goto. Обычное использование пустого оператора – обход заключительной части тела цикла с помощью оператора перехода. Например:

Program SkipZero;

Label 1; {описана метка 1}

Var i,j: integer; A: array [1..21] of real;

Begin

..... {пропускаем фрагмент программы}

For i:=1 to 21 do Begin {начало тела цикла}

j:=-11+i;

If j=0 then goto 1; {обход части тела цикла}

A[i]:=1/j

1: End; {конец тела цикла с помеченным пустым оператором}

..... {пропускаем фрагмент программы}

End.

Здесь деление 1/j пропускается в случае, когда j=0. Однако в Паскале это можно сделать и без применения помеченного пустого оператора:

Program SkipZero;

Var i,j: integer; A: array [1..21] of real;

Begin

..... {пропускаем фрагмент программы}

For i:=1 to 21 do Begin {начало тела цикла}

j:=-11+i;

If j<>0 then A[i]:=1/j

end; {конец тела цикла}

..... {пропускаем фрагмент программы}

End.

Здесь деление 1/j выполняется в случае, когда j не равно 0. Не нужна ни метка, ни оператор безусловного перехода.

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