3.2. Оператор goto, раздел описания меток
Последовательное выполнение операторов в программе может быть нарушено оператором перехода. Общий вид оператора: goto метка; где метка – буква, либо цифра, либо набор букв и цифр, из которых первая – всегда буква, Например, М1, LI, NK. Метка, стоящая после goto, указывает, куда нужно пойти. Достигается это тем, что если в программе находится оператор goto метка; то в этой же программе обязательно имеется какой-либо оператор вида метка: оператор; который считается помеченным, и машина, встретив goto метка; не будет выполнять оператор, записанный после оператора goto метка; а перейдет к выполнению оператора метка: оператор;
Иллюстрация:
а: = b+с;
с: = sgrt (a+exp(b));
goto M1;
z: = x+y;
writeln (z);
M1: S: = P;
В случае, если бы не было оператора goto М1; все операторы выполнялись бы последовательно один за другим. здесь же после оператора с: =... стоит goto М1; следовательно, машина не будет выполнять z:=... и writeln..., а сразу после с: =... перейдет к выполнению оператора М: S: = Р;
Метки, применяемые в программе, должны быть описаны в разделе описания меток, который желательно ставить первым среди описаний. Выглядит раздел так: Label М1, М2, L, NK; т.е. после слова Label перечисляются через запятую все метки, которые будут применяться в данном блоке (программе). Заканчивается описание символом ';'.
Пример: составить программу, вычисляющую значения функции cos х, где начальное х = 0, следующее х = 0.01 и т.д.
Program Prim3; Label M; Var x:real; BEGIN x:=0; M: writeln('x=',x,'cos x = ',cos(x)); x:=x+0.01;
goto M; readln; END.
Программа будет работать следующим образом: х присвоится значение 0; writeln выведет на экран текст, который указан в первых кавычках х =, далее извлечет из ячейки х значение и выведет его на экран; затем снова выведет текст cos х =, затем вычислит значение cos х и выдаст его на экран, т.е. машина выведет первую строку в виде
x = 0.0000000000Е + 00 cos х = 9.9999999999Е - 01.
После этого возьмется то х, которое было извлечено из ячейки памяти х (прежнее значение х), т.е. 0.0, к нему прибавляется величина 0.01 и результат снова занесется в ячейку памяти х так, что в х будет 0.01, после этого оператор goto m; передаст управление оператору, помеченному меткой м, т.е. оператору writeln, и машина выдаст новую строку:
x = 1.0000000000Е - 02 cos х = 9.9995000041Е - 01;
– выполнит оператор
х: =x + 0.01, получит х = 0.02;
– выведет строку
x = 2.0000000000Е - 02 cos х = 9.9980000666Е – 01;
– сделает х = 0.03 и т.д., до бесконечности, так как в данном алгоритме окончание работы не предусмотрено. Для завершения работы следует применить оператор if.
3.3. Оператор if
Общий вид: If булевское выражение then оператор else оператор;
Работа оператора: вначале вычисляется булевское выражение, значение которого в конечном итоге может быть только TRUE или FALSE. Если булевское выражение TRUE, то выполняется оператор, следующий за словом then, а затем происходит переход к оператору, следующему за if. Если булевское выражение false, то выполняется оператор, следующий за словом else, затем происходит переход к оператору, следующему за оператором if.
Замечание: после оператора, следующего за then, перед else символ ';' не ставится, так как оператор if еще здесь не закончен, а ';' ставится после окончания оператора. Возможно применение сокращенного оператора if:
If булевское выражение then оператор;
Здесь, если булевское выражение true, выполняется оператор, следующий за словом then, и происходит переход к оператору, следующему за оператором if. Если булевское выражение false, то оператор if игнорируется (вообще не выполняется), а выполняется оператор, следующий за if.
Переделаем "бесконечную" программу п. 3.2. в такую, которая остановится тогда, когда х станет равным 0.1.
Program Prim4; Label M; Var x:real;
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, и ложно – в противном случае. Вообще булевское выражение может строиться из булевских констант TRUE и FALSE; переменных булевского типа (в которых могут храниться TRUE или FALSE); обращений к функциям, которые возвращают TRUE или FALSE и отношений, соединенных между собой булевскими операциями и круглыми скобками.
Здесь следует расшифровать, что такое отношения и булевские операции. Примером отношения может быть приведенное выше х < = 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.
Еще один пример: пусть дана область (заштрихованная на рис. 3.3). Мы вводим с клавиатуры координаты точки. Машина должна определить, принадлежит ли данная точка этой области или нет.
Разобьем область рис. 3.3 на несколько простых:
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 определяет область (рис. 3.4)
x>=0 and x<=4 определяет полосу (рис. 3.5)
Вспомнив, что уравнение окружности с центром в начале координат x2+y2=r2, имеем x2+y2£4 (рис. 3.6),
x £0 является полуплоскостью (рис. 3.7),
y ³0 определяет полуплоскость (рис. 3.8),
x £0 and y ³0 есть квадрант (рис. 3.9)
и, наконец,
x £0 and y ³0 and sqr(x)+sqr(y)£4 есть сегмент (рис. 3.10)
... ячейка, а имя переменной превращается в адрес ячейки. Появление этого адреса происходит в результате работы специального оператора языка (NEW), однако его значение в большинстве случаев не используется при программировании на алгоритмических языках типа Паскаль. Условимся считать, что адрес ячейки, которая будет хранить переменную А, есть А. Или, другими словами, А - это общее имя переменной и ...
... на условном языке, каждое, из слов которого заменяет десятки, а то и сотни команд процессора. Таким образом, программа становится еще нагляднее и короче. Существует множество условных языков высокого уровня, для каждого из них написано немало вариантов программы, переводящей условный код в последовательность машинных команд. Один из таких языков – Паскаль, который из наиболее известных языков ...
... , тем не менее, использование программ с перекрытиями снимает это ограничение. Два библиотечных модуля TURBO3 и GRAPH3 введены для совместимости с ранней версией 3.0 системы Турбо Паскаль. 2 Объекты Базовым в объектно-ориентированном программировании является понятие объекта. Объект имеет определённые свойства. ...
... выбрать режим Quit <Alt>-<X>, после чего нажать либо <Enter>, либо комбинацию <Alt>-<X>. ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ Функциональные клавиши используются для управления средой Турбо Паскаля. Они обозначаются F1, F2,..., F12 и располагаются в самом верхнем ряду клавиатуры. С каждой из этих клавиш связывается некоторая команда меню. Действие почти всех функциональных ...
0 комментариев