1.2. Оператор if Общий вид: If булевское выражение then оператор else оператор; Работа оператора: вначале вычисляется булевское выражение, значение которого в конечном итоге может быть только TRUE или FALSE. Если булевское выражение TRUE, то выполняется оператор, следующий за словом then, а затем происходит переход к оператору, следующему за if. Если булевское выражение false, то выполняется оператор, следующий за словом else, затем происходит переход к оператору, следующему за оператором if. Замечание: после оператора, следующего за then, перед else символ ';' не ставится, так как оператор if еще здесь не закончен, а ';' ставится после окончания оператора. Возможно применение сокращенного оператора if: If булевское выражение then оператор; Здесь, если булевское выражение true, выполняется оператор, следующий за словом then, и происходит переход к оператору, следующему за оператором if. Если булевское выражение false, то оператор if игнорируется (вообще не выполняется), а выполняется оператор, следующий за if. Переделаем "бесконечную" программу п. 1.1. в такую, которая остановится тогда, когда х станет равным 0.1. Program Prim4; BEGIN x:=0; M: writeln('x=',x,' cos x = ',cos(x)); x:=x+0.01; if x<=0.1 then goto M; readln; END. Программа выдает результаты вычислений cos(x) для х = 0.01, 0.02, 0.03 и т.д., до 0.01. В последней программе булевское выражение х < = 0.1. Какие бывают булевские выражения? Вообще говоря, булевское выражение после вычисления всегда истинно или ложно, т.е. TRUE или FALSE. Действительно, выражение х < = 0.1 может быть истинно, если х меньше или равно 0.1, и ложно - в противном случае. Вообще булевское выражение может строиться из: Здесь следует расшифровать, что такое отношения и булевские операции. Примером отношения может быть приведенное выше х < = 0.01, т.е. в общем случае отношение - это два арифметических выражения, соединенных между собой операциями отношения. Операции отношения: = (равно), < > (неравно), > (больше), > = (больше или равно), < (меньше), < = (меньше или равно). Пример отношений: а + b < = sin(c) exp(p) > (cos(i) - a)/sgr(b). Как мы уже говорили, эти отношения могут быть истинны или ложны в зависимости от конкретного значения величин, в них входящих, на момент вычисления. Логические операции - это нам уже известные. Напомним, как они работают: or (или), and (и). Имеется описание Var A,B: boobean; Or - логическое сложение, читается как "или". Результат операций - истина, если или А, или В - истина, и ложь, если А и B ложны. Например: А В А ог В true true true true false true false true true false false false Замечание: данная операция аналогична арифметической OR, если TRUE заменить 1, а FALSE - 0. АND - логическое умножение, читается "и". Результат операции - истина только тогда, когда и А, и В - истина, в остальных случаях результат - ложь. А В A and B true true true true false false false true false false false false Кроме того, удобно применять однокомпонентную операцию Not, которая вводится следующим образом: если А есть TRUE, то Not А есть FALSE и если А есть FALSE, то Not А есть TRUE. С помощью этих операций можно построить условия любой сложности. Например, пусть необходимо решить задачу: Напишем программу: Program Prim5; Var a,x:real; BEGIN writeln('введите а,х'); readln(a,x); if (a>0) and (x>0) and (x<=0.5) then writeln('z=',a*sqr(x)/sin(x)) else if (a>0) and (x>=0.5) and (x<3) then writeln('z=',exp(x)) else if (a<=0) or (x<=0) then writeln('z=',sqrt(a)*sqrt(x)/sin(x)) else writeln('z=0'); readln; END. Замечание: в последнем примере мы видим, что операторы if могут быть вложены друг в друга. Вкладывать их можно неограниченное количество раз, причем новый if может начинаться как после слова then, так и после слова else. Еще один пример: пусть дана область (заштрихованная). Мы вводим с клавиатуры координаты точки. Машина должна определить, принадлежит ли данная точка этой области или нет. Разобьем область на несколько простых: 1. Внутренняя часть сектора, ограниченного отрицательной частью оси OX, положительной OY и окружностью с центром в начале координат и радиусом, равным 2. 2. Прямоугольник, ограниченный осями OX, OY и прямыми x=4, y=2. 3. Прямоугольник, ограниченный осями OX, ОУ и прямыми x=-2, y=-4. 4. Внутренняя часть сектора, ограниченного положительной частью оси OX, отрицательной OY и окружностью с центром в начале координат и радиусом, равным 3. 5. Внутренняя часть квадрата, ограниченного прямыми линиями x=2, x=3, y=-3, y=-4. 6. Область, лежащая внутри окружности с центром x=5, y=-3 и радиусом= 1,5. Программа: Program Prim6; Label N,K,L; Var x,y:real; f:char; BEGIN N: writeln('введите координаты точки'); readln(x); writeln('x=',x); readln(y); writeln('y=',y); if (x<=0) and (y>=0) and (sqr(x)+sqr(y)<=4) {1-я область} or (x>=0) and (x<4) and (y>=0) and (y<=2) {2- я область} or (x<=0) and (x>=-2) and (y<=0) and (y>=-4) {3- я область} or (x>=0) and (y<=0) and (sqr(x)+sqr(y)<=9) {4- я область} or (x>=2) and (x<=3) and (y<=-3) and (y>=-4) {5- я область} or (sqr(x-5)+sqr(y+3)<=2.25) {6- я область} then writeln('точка с координатами х=',x,' y=',y, 'принадлежит области') else writeln('точка с координатами х=',x,' y=',y, 'не принадлежит оласти); L: writeln('будем ли ещё вводить координаты точки?, Y, N'); readln(f); if (f='Y') or (f='y') then goto N else if (f='N') or (f='n') then goto K else writeln('неправильно нажали клавишу, попробуйте ещё раз'); goto L; K: readln; End. Замечание: для того, чтобы построить область, необходим здравый смысл и элементарные знания аналитической геометрии. Так, х>=0 определяет область x>=0 and x<=4 определяет полосу Вспомнив, что уравнение окружности с центром в начале координат x2+y2=r2, имеем x2+y2=4 , x 0 является полуплоскостью, y 0 определяет полуплоскость, x 0 and y 0 есть квадрант и, наконец, x 0 and y 0 and sqr(x)+sqr(y)=4 есть сегмент |