Безусловный оператор перехода
Это единственный оператор, в котором используется метка. Он имеет вид:
Go To <метка>;
После выполнения этого оператора будет осуществлен переход на оператор, перед которым стоит указанная метка.
Использование безусловных передач управления в программе считается теоретически избыточным для многих языков высокого уровня и способствует созданию малопонятных и трудно модифицируемых программ, которые вызывают сложности при отладке и сопровождении. Если же программист считает, что без условных переходов не обойтись, то необходимо выполнять следующие условия:
1. Не допускаются переходы внутрь подпрограмм (процедур и функций) или из них.
2. Переход внутрь структурного оператора может вызвать непредсказуемые эффекты, хотя компилятор не выдает сообщение об ошибке.
Примером на условный и безусловный операторы можно считать алгоритм вычисления кубического корня, хотя реально для этих целей удобнее и нагляднее использовать один из операторов цикла без параметра.
Program S;
Label L;
Const Eps = 1E-6; {определим точность как константу}
Var a,x,y:real;
Begin
WriteLn (‘Введите число для определения кубического корня’);
Read (a);
x := a;
L: y := x; {«старим» предыдущее значение}
x := 1/3*(a/sqr(y)+2*y); {вычисляем новое значение}
If Abs(x-y)>Eps Then
GoTo L; {повторим, если разность старого и нового значений не достигла заданной точности}
WriteLn (‘Значение корня:’, x:10:6);
End.
Условный оператор
При составлении по алгоритму программы на месте блока «Решение» записывается условный оператор, который может иметь 2 формы. В общем виде полная форма записывается как:
If <логическое выражение> Then <оператор1> Else < оператор2>;
а сокращенная:
If < логическое выражение > Then < оператор1>;
В первом случае, если логическое выражение истинно (True), то выполняется оператор1, а если ложно, то оператор2. Во втором случае при ложности логического выражения просто осуществляется переход к следующему оператору.
Наиболее простой пример – вычисление значения кусочно-непрерывной функции:
Program Function;
Var
f,x:real;
Begin
Read (x);
If x>=0 Then F := x*x {первый вариант}
Else F := sqrt (x); {второй вариант}
WriteLn ('Значение функции =',F:8:3);
end.
Заметим, что значение функции используется как имя переменной. Оно не должно содержать скобок, поэтому здесь вместо F(x) используется просто F (можно функцию назвать и по-другому, например Fx).
Дата добавления: 2016-06-29; просмотров: 2697;