Операторы передачи управления
Назначение операторов передачи управления заключается в организации ветвлений в программе: условных или безусловных. С помощью этих операторов вычислительный процесс передается в указанную оператором точку программы по указанному в операторе условию либо без условия.
Оператор безусловного перехода
Действие оператора GOTO состоит в передаче управления соответствующему оператору. Структура оператора:
GOTO метка;
Метка в Турбо Паскале – это произвольный идентификатор, позволяющий именовать некоторый оператор программы и таким образом ссылаться на него. Метка располагается непосредственно перед помечаемым оператором и отделяется от него двоеточием. Перед тем как появиться в программе, метка должна быть задана в разделе описания. Описание меток состоит из зарезервированного слова LABEL (метка), за которым следует список меток.
Пример:
LABEL 1; {в разделе описания};
goto 1; {в разделе операторов} {перейти на метку 1}
1:read(x,y); {строка с меткой 1 в разделе операторов}
При исполнении меток необходимо руководствоваться следующими правилами:
1. метка, на которую ссылается оператор GOTO, должна быть задана в разделе описаний и она обязательно должна встретиться где-нибудь в разделе операторов программы;
2. метки, описанные в процедуре (функции), локализуется в ней, поэтому передача управления извне процедуры (функции) на метку внутри неё невозможна.
Однако в программировании не рекомендуется использование оператора GOTO , т.к. это затрудняет понимание программ, делает ее запутанной и сложной в отладке. Современная технология структурного программирования основана на принципе программирования без GOTO.
Операторы условного перехода
Структура условного оператора имеет следующий вид:
IF <условие> THEN <оператор 1> ELSE <оператор 2>;
где: IF, THEN, ELSE – зарезервированные слова (если, то, иначе);
<условие> – произвольное выражение логического типа;
<оператор 1>, <оператор 2> – любые операторы языка Турбо Паскаль.
Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение <условие>. Если результат есть TRUE (истина), то выполняется <оператор 1>, а <оператор 2> пропускается; если результат есть FALSE (ложь), наоборот, <оператор 1> пропускается, а выполняется <оператор 2>.
Поскольку любой из операторов <оператор 1> и <оператор 2> может быть любого типа, в том числе и условным, а в то же время не каждый из «вложенных» условных операторов может иметь часть ELSE <оператор 2>, то возникает неоднозначность трактовки условий. Эта неоднозначность в Турбо Паскале решается следующим образом: любая встретившаяся часть ELSE соответствует ближайшей к ней «сверху» части THEN условного оператора. Условный оператор позволяет проверить некоторое условие и в зависимости от результатов поверки выполнить то или иное действие. Таким образом, условный оператор – это средство ветвления вычислительного процесса.
Операторы условного перехода подразделяются на: простые и составные, короткие и полные.
Простой, короткий IF (если)
Структура оператора имеет вид:
IF (условие) THEN (оператор или метка);
Пример:Написать программу алгоритма ветвления.
Вычислить y: = ln x , если x > 0.
Решение:Программа алгоритма ветвления имеет вид:
Program PR2;
var y, x : real;
begin
writeln(‘ввести x’);
Readln (x);
IF x > 0 THEN y: = ln(x); {простой, короткий IF}
writeln (‘x=’, x: 7:2, ‘y=’, y :7 :2);
end.
Простой, полный IF
Пример:Написать программу алгоритма ветвления. Вычислить y = ln x , если х>0, иначе y=cos x. В примере рассматривается не только вариант «тогда», но и «иначе».
Решение:Программа алгоритма ветвления имеет вид:
Program PR3;
var x, y: real;
begin
writeln(‘ввести X’);
Readln (X);
if x>0 THEN y:= ln (x) ELSE y:=cos(x); {простой, полный IF}
Writeln (`x = `, x:6:2 , `y = `, y:7:2)
end.
Если х>0, тогда выполняется оператор за словом THEN (тогда), иначе выполняется оператор, следующий за словом ELSE (иначе).
Cоставной, короткий IF
Составной оператор – это последовательность произвольных операторов программ, заключенная в операторные скобки – зарезервированные слова BEGIN…END.
Составные операторы – важный инструмент Турбо Паскаля, дающий возможность писать программы по современной технологии структурного программирования (без перехода GOTO).
Язык Турбо Паскаль не накладывает никаких ограничений на характер операторов, входящих в составной оператор.
Пример:Вычислить y=ln x, z=y–5×x, если x > 0.
Оператор условия запишется в виде:
IF x>0 then Begin y:=Ln(x); z:=y–5*x;
Writeln (‘y=’, y:7:2, ‘z=’, z:8:3);end;
Составной, полный IF
Пример:Вычислить y=ln x, z=y–5×x, если x > 0. Вывод производить для каждого условия.
Решение : Оператор условия запишется в виде:
IF x>0 then Begin
Y:=ln (x);
Writeln (`x = `, x:6:2 ,`y =`, y:7:2);
End
Else begin
Y:=cos (x);
Writeln (`x = `, x:6:2,`y =`, y:7:2);
End;
В примере оператор условия составной, так как после слов then, еlse операторы заключены в операторные скобки.