Составной оператор используется в том случае, когда по правилам синтаксиса сложного оператора должен стоять только один оператор, а в алгоритме необходимо выполнить некоторую последовательность действий. Составной оператор объединяет эту последовательность в единый по синтаксису оператор путем заключения в операторные скобки begin и end. Например:
ВEGIN
<оператор1>;
<оператор2>;
...;
<операторN>
END;
Для составного оператора допускается любая глубина вложенности:
BEGIN
BEGIN
...
BEGIN
...
END;
...
END;
END;
Пустой оператор не выполняет никаких действий и может быть использован для передачи управления в конец составного оператора. Пустой оператор записывается в виде точки с запятой.
Например, пустыми операторами будут следующие записи:
1) ;; 2) <метка> :;
Оператор безусловного перехода
Оператор безусловного перехода позволяет изменить обычный последовательный порядок выполнения операторов и непосредственно перейти к нужному оператору, предварительно помеченному меткой.
Структура такого оператора:
GOTO < метка >;
где GOTO - ключевое слово, обозначающее перейти к < метке >,
< метка > является произвольным идентификатором, который позволяет пометить любой оператор в программе и потом ссылаться на него. Оператор от метки отделяется двоеточием. В языке Pascal ABC допускается использовать в качестве метки также целое число без знака.
Пример:
LABEL m1, loop;
VAR a, b, c, d: word;
BEGIN
m1: a: = b+c*d;
...
goto m1;
loop: END.
Все использованные в программе метки должны быть описаны в разделе описаний программы с указанием ключевого слова “LABEL”. Описанные в этом операторе метки обязательно должны быть использованы в программе.
|
Метки, описанные в функции или процедуре, локализуются только в ней, передача управления извне процедуры на метку внутри ее невозможна. С помощью оператора GOTO не рекомендуется осуществлять переход во внутреннюю часть сложного оператора (цикла, составного оператора). Запрещается переход с одной альтернативной части (ветви) сложного оператора на другую.
Современная технология структурного программирования основана на принципе программирования без GOTO. Считается, что злоупотребление этими операторами затрудняет чтение программы, усложняет ее отладку.
Тем не менее, в некоторых случаях использование оператора перехода может упростить программу. Обычно GOTO используется для досрочного выхода из любого сложного оператора или вложенных операторов цикла.
Пример и задания с оператором IF
Пример. Вычислить значения функции y(x) в зависимости от интервала, в который попадает аргумент x.
Для xÎ [-10,5]
где а = 1. 5, b = 0. 5;
Напишем программу, соответствующую схеме алгоритма (рис. 5):
Program Lr2;
Label m1, 10;
Const A = 1.5; B = 0.5;
var x, y: real; // переменные вещественного типа
Begin
m1: read(x); // вводим значение переменной x
IF (x < -10) or (x>5) then goto m1;
IF x<0 then begin y: = a*x+b; goto 10 end;
if (x >= 0) and (x<=2) then y: =A*SQR(x)*LN(x+1);
if x>2 then y: = EXP(A*x+1)*COS(B*x);
10: writeln(' x= ', x: 8: 1, ' y= ', y: 8: 2); // вывод значений x и y
End.
|
|
|
|
|
|
|
|
|
|
Рис. 5
Задания к самостоятельному выполнению (программа_2_1)
Вычислить значение функции в зависимости от интервала, в который попадает вводимый с клавиатуры аргумент:
1. Для t [0,3], at2lnt при 1 £ t £ 2,
где a = -0.5,b = 2 z = 1 при t < 1,
eatcosbt при t > 2,
2. Для x [0,4], при x > 2,
где а = 2.3 f = х при 0.3 < x £ 2,
cos(x-a) при x £ 0.3,
3. Для x [0,7], (a+b)/(ex+cosx) при 0 £ x < 2.3,
где a = -2.7,b = -0.27 z = (a+b)/(x+1) при 2.3 £ x < 5,
ex+sinx при 7 ³ х ³ 5,
4. Для i [7,12], ai4+bi при I < 10,
где a = 2.2,b = 0.3. y = tg(i+0.5) при I = 10,
e2i+ при I > 10,
5. Для x [0.9,5], x2-7/x2 при x < 1.3,
где a = 1.5 y = ax3+7 при 1.3 £ x < 3,
lg(x+7 ) при x ³ 3,
6. Для t [-1.4], при t < 0.1,
где a = 2.1,b = 0.37. z = at+b при 0.1 £ t < 2,
при t ³ 2,
7. Для x [0,6], a esinx+2.5 при x < 0.3,
где a = 1.5. y = ecosx+a при 0.3 £ x < 4,
(sin x)/(a+ex) при x ³ 4,
|
где a = 1.8,b = -0.5, c = 3.5 (a+bx)/ при x > 1.2,
9. Для t [1,5], t при t > a,
где a = 2.5 z = t sin at при t = a,
e-at cos at при t < a,
10. Для x [0,4], e-bx sin bx при x < 2.3,
где a = 1,b = 3 y = сos bx при 2.3 £ x £ 3,
e-ax cos bx при x ³ 3,
11. Для t [0.5,3], at2-b при t < a,
где a = 1.3, b = 6.5 z = a-b при a £ t £ b,
a t2/3- при t > b,
12. Для x [0,2], |e-2x sin bx| при x >1,
где b = -2.9 y = cos bx при x = 1,
e-x cos bx при x < 1,
13. Для x [0.5,2] sin (cos ax) при x >1,
где a = -0.8 z = tg ax при x = 1,
a2 x при x < 1,
14. Для x [1,2], ln bx - 1/(bx+1) при x < 1.3,
где b = 1.3 y = bx + 1 при 1.3 ³ x ³ 1.7,
ln bx +1/(bx+1) при x > 1.7,
|
15. Для x [-1,1], ax2+bx2/3 при x < 0.1,
где a = 2.5,b = -0.9 z = a x2 при x = 0.1,
b x2/3 при x > 0.1.
16. Ввести координаты точки (x, y). Напечатать, в каком квадранте или на какой оси координат находится эта точка.
17. Ввести радиусы R1, R2 и высоту. Вычислить объем усеченного конуса: , где S – площадь оснований. Если R1 = R2 – объем и площадь цилиндра, если R1 = 0 или R2 = 0 – объем (hπr2) и площадь πr() поверхности конуса.
18. Ввести с клавиатуры цифру. Определить, какой системе счисления она может принадлежать.
19. Ввести число. Определить, делится ли оно нацело на два, три или на пять.
20. Ввести a, b, h. Если h = 0, вычислить площадь прямоугольника; при a = b, найти площадь квадрата; в противном случае подсчитать площадь трапеции.
4.6. Оператор выбора варианта CASE
Оператор CASE позволяет в зависимости от значения какой-либо переменной или выражения порядкового типа выполнить те или иные действия.
Его структура имеет следующий вид:
CASE <ключ_выбора> OF
<константа_выбора1>: <оператор1>;
<константа_выбора2>: <оператор2>;
...
<константа_выбораN>: <операторN>
ELSE <оператор>
END;
где <ключ_выбора> - переменная (или выражение) любого порядкового типа; <константа_выбора> - константа того же типа, что и <ключ_выбора>; <оператор> - произвольный оператор Pascal ABC.
Принцип действия оператора. Сначала вычисляется <ключ_выбора>, затем в списке констант выбора отыскивается нужная константа, равная <ключу_выбора>, и выполняется стоящий за ней оператор. После этого оператор CASE завершает работу. Если в списке не найдена константа, совпадающая с "ключом", выполняется оператор, стоящий после ELSE.
Заметим, что стоящая в конце часть ELSE <оператор> является не обязательной. При отсутствии в списке выбора нужной константы оператор выбора просто завершает свою работу.
Любому из операторов <списка выбора> может предшествовать несколько <констант выбора>. В этом случае они разделяются запятыми или представляют собой диапазон значений.
Пример:
CASE <ключ> OF
1: <оператор1>;
2, 3: <оператор2>;
4 .. 6: <оператор3>
ELSE <оператор>
END;
<Константа_выбора> не является меткой оператора, поэтому в разделе меток описывать её нельзя.