Оператор перехода. Пустой оператор. Составной оператор.
Оператор безусловного перехода GOTO служит для прерывания естественного хода выполнения программы. Следующим выполняется оператор, помеченный меткой, которая использована в данном операторе перехода. Один оператор может помечаться несколькими метками.
GOTO <метка> ;
<метка> - это целое без знака или идентификатор, обязательно описанный в разделе описания меток (LABEL).
Для того, чтобы пометить оператор, перед ним ставится метка, после которой записывается двоеточие.
<метка> :[<метка>: …] <оператор>;
Оператор GOTO не рекомендуется использовать при программировании, так как это существенно усложняет отладку и тестирование программы, тем более что остальных управляющих операторов языка вполне достаточно для реализации любого алгоритма.
Пустой оператор не обозначается и не вызывает никаких действий в программе, представляет собой дополнительную точку с запятой.
Если необходимо, чтобы группа операторов рассматривалась транслятором, как один оператор, эту группу операторов заключают в операторные скобки BEGINи END. Такой оператор называется составным оператором. Составной оператор может быть использован в любом месте программы, где разрешен простой оператор, но требуется выполнение группы операторов.
Условный оператор.
Условный оператор используется для программирования развилки, если условие сформулировано как логическое выражение.
IF <логическое выражение> THEN<оператор 1>
[ ELSE <оператор 2>] ;
<следующий оператор >;
Оператор выполняется таким образом: если результат вычисления логического выражения TRUE, то выполняется <оператор 1>, затем <следующий оператор >; если – FALSE, то выполняется <оператор 2>, затем <следующий оператор>. Операторы 1 и 2 могут быть простым или составным оператором. Если часть оператора, начинающаяся ELSE, отсутствует, то при логическом выражении равным FALSE, будет выполняться <следующий оператор>. При вложенности условных операторов ELSE всегда относится к ближайшему предшествующему IF. Следует избегать большой глубины вложенности условных операторов, так как при этом теряется наглядность и возможно появление ошибок.
Например,
… IF A > 0 THEN P := P + 1
ELSE
IF A < 0 THEN O := O + 1
ELSE N := N + 1 ; …
… IF A > 0 THEN
BEGIN
S := S+ A ; K := K + 1
END ;…
Оператор выбора.
Оператор выбора CASE может быть использован вместо условного оператора, если требуется сделать выбор более, чем из двух возможностей.
CASE<селекторное выражение> OF
<метка> ,<метка> : <оператор 1> ;
,<метка> . . <метка>
<метка> ,<метка> : <оператор 2> ;
,<метка> . . <метка>
. . . . .
<метка> ,<метка> : <оператор n>;
,<метка> . . <метка>
[ ELSE <оператор>]
END;
Селекторное выражение (селектор, переключатель) и метки-константы (метки варианта, метки выбора) должны иметь один и тот же простой тип (кроме вещественного). Метки-константы в отличие от меток программы не требуется описывать в разделе описания меток. Но на них нельзя ссылаться в операторе GOTO. Метки варианта могут быть перечисляемого и интервального типа.
<оператор 1>,<оператор 2>,<оператор n> - простой или составной оператор.
Оператор выбора выполняется следующим образом. Сначала вычисляется селекторное выражение; затем выполняется оператор, метка варианта которого равна текущему значению селектора; после этого происходит выход из оператора CASE на следующий оператор. Если значение селектора не совпадает ни с одной из меток варианта, будет выполнен оператор после ELSE. Если ветвьELSEотсутствует, то управление передается следующему за CASE оператору.
Например,
… CASE K OF
0: Z := LN(X) ;
1: Z := EXP(X) ;
2: Z := SIN(X) ;
3: Z := COS(X)
ELSE
Z := 0
END ; …
В этом примере результат вычисляется по одной из стандартных функций в зависимости от параметра К, который получает свое значение перед выполнением этого оператора.
В следующем примере переменная OTVET получает значение YES или NO в зависимости от введенного значения символьной переменной V.Здесь метки варианта задаются перечислением.
… VAR V : CHAR;
OTVET : STRING;
…
CASE V OF ‘D’, ‘d’, ‘Д’, ‘д’ : OTVET := ‘YES’;
‘N’, ‘n’, ‘Н’, ‘н’ : OTVET := ‘NO’
ELSE
OTVET := ‘ ‘
END; …
В следующем примере метки выбора заданы интервалом.
… VAR V : CHAR;
OTVET : STRING;
…
CASE V OF ‘A’ . . ‘Z’,’a’ . . ‘z’ : OTVET := ‘буква’;
‘0’ . . ‘9’ : OTVET := ‘цифра’
ELSE
OTVET := ‘специальный символ‘
END; …
Операторы цикла.
Операторы цикла используются для многократного повторения входящих в их состав операторов. В языке Турбо Паскаль различают операторы цикла типа арифметической прогрессии (оператор цикла со счетчиком – FOR) и операторы цикла итерационного типа (WHILE и REPEAT).
Оператор цикла типа арифметической прогрессии используется, если заранее известно количество повторений цикла и шаг изменения параметра цикла +1 или –1.
< параметр цикла > - это переменная цикла любого порядкового типа (целого, символьного, перечисляемого, интервального);
TO – шаг изменения параметра цикла +1;
DOWNTO - шаг изменения параметра цикла -1;
< выражение 1> - начальное значение параметра цикла, выражение того же типа, что и параметр цикла;
< выражение 2> -конечное значение параметра цикла, выражение того же типа, что и параметр цикла;
< оператор>- тело цикла - простой или составной оператор.
При выполнении оператора FOR выполняются следующие действия:
· вычисляется < выражение 1> , которое присваивается параметру цикла;
· проверяется условие окончания цикла: <параметр цикла> больше <выражения 2> при использовании конструкцииTO и <параметр цикла> меньше <выражения 2> при использовании конструкцииDOWNTO;
· выполняется тело цикла;
· наращивается (TO) или уменьшается (DOWNTO) на единицу параметр цикла;
· все этапы, кроме первого, циклически повторяются.
При использовании оператора необходимо помнить:
o Внутри цикла FOR нельзя изменять начальное, текущее или конечное значения параметра цикла.
o Если в цикле с шагом +1 начальное значение больше конечного, то цикл не выполнится ни разу. Аналогично для шага -1, если начальное значение меньше конечного.
o После завершения цикла значение параметр цикла считается неопределенным, за исключением тех случаев, когда выход из цикла осуществляется оператором GOTO или с помощью процедуры BREAK.
o Телом цикла может быть другой оператор цикла.
Например, для того, чтобы вычислить значение факториала F=N!можно воспользоваться следующими операторами:
a) … F:=1; b)… F:=1;
FOR I:=1 TO N DO FOR I:=N DOWNTO 1 DO
F:=F*I; … F:=F*I; …
В следующем примере цикл выполняется 26 раз и SIM принимает значения всех латинских букв от ’A’ до ‘Z’.
…
FOR SIM:=’A’ TO ‘Z’ DO
WRITELN( SIM);
…
Если телом цикла является другой цикл, то циклы называются вложенными или сложными. Цикл, содержащий в себе другой цикл, называют внешним. Цикл, содержащийся внутри другого цикла, называется внутренним. Внутренний и внешний циклы могут быть любыми из трех видов: FOR, WHILE или REPEAT. При построении вложенных циклов необходимо, чтобы все операторы внутреннего цикла полностью находились в теле внешнего цикла. Возможная глубина вложенности циклов ограничивается объемом памяти компьютера. Вначале выполняется самый внутренний цикл при фиксированных значениях параметров циклов с меньшим уровнем вложенности, затем изменяется параметр цикла следующего (за внутренним) уровня и снова выполняется самый внутренний цикл и т.д.
Пример. Вычислить значение Y , определяемое по формуле
PROGRAM SP;
CONST N=10;
M=15;
VAR A: ARRAY [1..N,1..M] OF REAL;
I,J: INTEGER;
P,Y: REAL;
BEGIN
FOR I:=1 TO N DO
FOR J:=1 TO M DO
READLN(A[I,J]);
Y:=0;
FOR I:=1 TO N DO
BEGIN
P:=1;
FOR J:=1 TO M DO
P:=P*A[I,J];
Y:=Y+P
END;
WRITELN(‘Y=’,Y)
END.
Операторы цикла итерационного типа используются обычно в том случае, если число повторений цикла заранее неизвестно или шаг изменения параметра цикла отличен от +1 или –1.
Оператор цикла с предусловием:
WHILE <логическое выражение> DO <оператор>;
Логическое выражение вычисляется перед каждым выполнением тела цикла. Если логическое выражение принимает значение TRUE, то тело цикла выполняется, если значение FALSE, происходит выход из цикла. Тело цикла может не выполниться ни разу, если логическое выражение сразу ложно. Телом цикла является простой или составной оператор.
Любой алгоритм, реализуемый с помощью оператора FOR, может быть записан с использованием конструкции WHILE.Например, вычисление значения факториала F=N!:
… F:=1;
I:=1;
WHILE I<=N DO
BEGIN
F:=F*I;
I:=I+1;
END; …
В следующем примере требуется подсчитать значение Sin (x) с использованием разложения функции в ряд:
В сумму включить только те члены ряда, для которых выполняется условие:
т.е. очередной член ряда должен быть больше заданной точности вычислений e.
Program SINX;
Var X,Y,E,U,Z : real;
K: integer;
Begin
Readln(X,E);
K:=0;
Y:=0;
U:=X;
Z:=sqr(X);
While abs(U)>E do
Begin
Y:=Y+U;
K:=K+2;
U:= -U* Z/ (K*(K+1));
End;
Writeln( ‘ SIN(X)=’, SIN(X), ‘ Y=’,Y);
End.
Для проверки правильности работы программы в оператор вывода включена печать значения синуса, вычисленного при помощи стандартной функции. Если полученное значение отличается от рассчитанного при помощи стандартной функции не более, чем на точность, можно считать, что программа работает правильно.
Рассмотрим пример вычисления значения квадратного корня из числа Х по итерационной формуле
Yi+1 =(Yi + X/ Y i ) /2с точностью Yi+1 - Yi <=e
Начальное приближение Y0=A является параметром.
Program SQRTX;
Var X: real; {аргумент }
EPS: real; {точность вычисления }
Y0: real; {предыдущее приближение}
Y1: real; {очередное приближение }
A: real; {начальное приближение }
Begin
Readln( A,EPS,X);
If X>0 then
Begin
Y0:=A;
Y1:=(Y0+X/Y0)/2;
While abs(Y1-Y0)>EPS do
Begin
Y0:=Y1;
Y1:=(Y0+X/Y0)/2
End;
Writeln(‘Y1=’,Y1,’ при X=’,X)
End
Else
Writeln(‘Число ’, X, ' меньше нуля');
End.
Оператор цикла с постусловием:
REPEAT
<оператор 1> [;
<оператор 2>] [;
…
<оператор n>]
UNTIL <логическое выражение>;
Данная конструкция оператора цикла используется, если число повторений цикла заранее неизвестно, но известно условие выхода из цикла. Управляющее циклом логическое выражение является условием выхода из цикла. Если оно принимает значение TRUE, то выполнение цикла прекращается. При использовании оператора REPEAT цикл выполняется хотя бы один раз. В отличие от других операторов цикла оператор данного вида не требует операторных скобок BEGIN - END, так как их роль выполняют REPEAT - UNTIL.
Вычисление F=N! с использованием конструкции REPEAT – UNTILбудет выглядеть следующим образом:
. . .
F:=1;
I:=1;
Repeat
F:=F*I;
I:=I+1;
Until I>N;
. . .
Рассмотрим другой пример использования этого оператора. Вводится последовательность чисел. Определить количество элементов кратных 7.
Program rep;
Var A,K: integer;
C : char;
Begin
K:=0;
Repeat
Writeln(‘ Введите очередное число ‘);
Readln( A);
If A mod 7=0 then K:=K+1;
Writeln(‘Хотите выйти из цикла? д/y’ );
Readln( C ) ;
Until ( C=’д‘ ) or ( C=’y’) ;
Writeln(‘kol=’,K);
End.
Здесь условием выхода из цикла является ввод символов Дили Y при ответе на вопрос о выходе из цикла. Если вводится одна из этих букв, логическое выражение, записанное после UNTIL, становится TRUE и происходит выход из цикла.
В следующем примере требуется поменять местами максимальный и минимальный элементы, найденные среди элементов четных строк матрицы А(M,N).
Program Obmen;
Var A: array[1..30,1..30] of integer;
I,J : integer;
K1,L1,K2,L2 : integer;
T,M,N: integer;
Begin
Readln(M,N);
For I:=1 to M do
For J:=1 to N do
Readln( A[I,J]);
K1:=1;L1:=1; {координаты максимального элемента}
K2:=1;L2:=1; {координаты минимального элемента}
I:=2;
While I<=M do
Begin
For J:=1 to N do
If A[K1, L1]< A[I,J] then
Begin
K1:=I;L1:=J;
End
Еlse
If A[K2, L2]> A[I,J] then
Begin
K2:=I;L2:=J;
End;
I:=I+2;
End;
T:= A[K1, L1];
A[K1, L1]:= A[K2, L2];
A[K2, L2]:=T;
For I:=1 to M do
Begin
For J:=1 to N do
Write ( A[I,J] :6);
Writeln ;
End;
End.
Здесь используется цикл WHILE для индексации строк, т.к. нас интересуют только четные строки, следовательно, шаг для строк должен быть равен 2. В цикле FOR этого сделать нельзя.
В языке Турбо Паскаль 7.0 имеются процедуры BREAKи CONTINUE . Эти процедуры могут использоваться только внутри циклов FOR, WHILEили REPEAT. Процедура BREAK прерывает выполнение цикла и вызывает переход к оператору, следующему за циклом (может использоваться вместо оператора GOTO).Процедура CONTINUE осуществляет переход к следующему повторению цикла с пропуском последующих операторов тела цикла.
Например, необходимо определить номер первого элемента одномерного массива, оканчивающегося на 3.
Program Kon;
Var A:array [1.. 30] of integer;
FL: Boolean;
I,N: Integer;
Begin
Readln(N);
For I:=1 to N do
Readln( A[I] );
FL:=false;
For I:=1 to N do
Begin
If A[I] mod 10 <> 3 then Continue;
Writeln(‘Номер первого числа на 3 ’,I);
FL:=true;
Break;
End;
If not FL then Writeln(‘ нет чисел на 3‘);
End.
Если встречается число, оканчивающееся на 3, происходит вывод сообщения об этом, флаг – переменная FL – становится равным TRUE и программа заканчивает свою работу, т.к. цикл прерывается. Если же такое число не встречается, происходит нормальное завершение цикла, переменная FL остается равной FALSE и выводится сообщение о том, что таких чисел нет.
Вопросы к главе 2.
1. Дать определение языка программирования.
2. Дать классификационную характеристику языков программирования.
3. Определить особенности языков высокого уровня.
4. Назначение и особенности машинно-ориентированных языков программирования.
5. Основные особенности языка Турбо Паскаль.
6. Алфавит языка Турбо Паскаль.
7. Особенности построения арифметических, строковых и логических выражений в Паскале.
8. Приоритет выполнения операций в выражениях различного типа.
9. Классификация типов данных.
10. Описание типизированных констант.
11. Описание нетипизированных констант.
12. Описания целых типов.
13. Описания вещественных типов.
14. Что такое идентификатор?
15. Описание интервальных типов.
16. Описание перечисляемых типов.
17. Какую структуру имеет программа на Турбо Паскале?
18. Способы написания комментариев в Турбо Паскале.
19. Что такое пустой оператор?
20. Что такое операторные скобки?
21. Что такое составной оператор?
22. Назначение и особенности использования оператора безусловного перехода.
23. Способы записи условного оператора.
24. Назначение и варианты использования оператора выбора.
25. Форма записи меток варианта.
26. Формы оператора цикла.
27. Принципы выбора типа оператора цикла.
28. Особенности записи и использования оператора цикла типа арифметической прогрессии.
29. Особенности записи и использования оператора цикла итерационного типа с предусловием.
30. Особенности записи и использования оператора цикла итерационного типа с постусловием.
31. Особенности организации вложенных циклов.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|