Операторы циклических повторений

Исполняемые операторы

Простейшим из них является оператор присваивания := , например X:=Y*SIN(2*PI/F).

Оператором является также процедура. Она вызывается путём указания её имени. Если у процедуры имеются параметры, они указываются после имени в ( ), например:

STR(X,S);

WRITE(X);

RANDOMIZE.

Структурные операторы строятся из служебных слов, логических выражений и других операторов.

Условный оператор IF

Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить те или иные действия. Его структура имеет следующий вид:

IF <условие> THEN <оператор 1>

ELSE <оператор 2>,

где <условие> - выражение логического типа; <оператор 1>, <оператор 2> - любые операторы.

Работу условного оператора можно пояснить блок-схемой (рис.1):

Операторы циклических повторений - student2.ru

Рис.1

Часть оператора, начиная со слова ELSE может быть опущена (рис.2):

IF X>=0 THEN Y:=SQRT(X)

ELSE WRITE(‘Число меньше 0’);

IF X<>0 THEN Y:= 5/X;

Операторы циклических повторений - student2.ru

Рис.2

После оператора Y:=SQRT(X)(перед ELSE) точка с запятой не ставится, Возможно вложение одного оператора IF в другой.

IF X>=10 THEN

IF X>10 THEN Y:=2*X

ELSE Y:=3*X

ELSE Y:=X*X;

При использовании вложенных операторов IF возможна двоякая интерпретация:

Y:=0;

WRITELN(‘введите X=’);

READLN(X);

IF X>=10 THEN

IF X>10 THEN Y:=2*X

ELSE Y:=3*X

WRITELN(Y);

В этом примере оператор Y:=3*Xбудет выполняться только в том случае, когда X=10, т.к. он является частью вложенного оператора IF. Если же требуется выполнить этот оператор для случая, когда X<10, т.е. сделать оператор Y:=3*Xчастью внешнего оператора IF, то следует построить программу по-другому:

Y:=0;

WRITELN(‘введите X=’);

READLN(X);

IF X>=10 THEN

BEGIN

IF X>10 THEN Y:=2*X

END

ELSE Y:=3*X

WRITELN(Y);

Оператор выбора CASE

Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Его структура:

CASE <ключ выбора> OF

<список выбора>

ELSE <оператор>

END

где <ключ выбора> - выражение порядкового типа (обычно целого или символьного); <список выбора> - одна или более конструкций следующего вида: <константа выбора> : <оператор>, где <константа выбора> - константа того же типа, что и выражение <ключ выбора>.

Вначале вычисляется значение выражения <ключ выбора>. Затем в последовательности операторов <список выбора> отыскивается такой, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор CASE заканчивает свою работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, то выполняется оператор, стоящий после слова ELSE:

VAR

S:CHAR;

BEGIN

WRITE(‘введите b, c или d: ’);

READLN(S);

CASE S OF

‘b’: WRITELN(‘bird’);

'c': WRITELN(‘cat’);

‘d’: WRITELN('dog')

ELSE WRITELN(‘Неверная буква’);

END;

END.

Любому из операторов списка выбора может предшествовать несколько констант выбора, разделенных запятыми, а часть оператора CASE, начиная со слова ELSE, может быть опущена:

VAR

S:CHAR;

BEGIN

WRITE(‘введите b, c или d: ’);

READLN(S);

CASE S OF

‘B’,‘b’: WRITELN(‘bird’);

‘C’,'c': WRITELN(‘cat’);

‘D’,‘d’: WRITELN('dog')

END;

END.

Можно также указать диапазон, которому принадлежит константа выбора для некоторого оператора:

VAR

X:INTEGER;

BEGIN

WRITE(‘введите X= ’);

READLN(X);

CASE X OF

0..99: WRITELN(‘Первая сотня’);

100..199: WRITELN(‘Вторая сотня’);

WRITELN('Третья сотня')

END;

END.

Оператор CASEиногда называют развитием условного оператора IF. Оба этих оператора осуществляют ветвление вычислительного процесса на несколько направлений. Но, если оператор IFможет осуществить ветвление вычислительного процесса только на два направления, то оператор CASE– на много направлений.

Операторы циклических повторений

В Турбо Паскале имеются три оператора циклов: FOR, WHILEи REPEAT, позволяющие организовать повторение каких-то вычислительных операций. Оператор цикла FOR используется в тех случаях, когда заранее известно число повторений. Если же число повторений заранее не известно. то используют операторы цикла WHILE или REPEAT. В них на каждом этапе повторения (итерации) вычисляется условие выхода из цикла (условие повторения цикла) и в зависимости от его значения цикл повторяется или заканчивает свою работу.

Оператор цикла FOR

Его структура:

FOR <счётчик цикла>:=<нач. зн.> TO <кон. зн.> DO <оператор>

где <счётчик цикла>- переменная порядкового типа, чаще всего INTEGER. Его работу можно пояснить блок-схемой (рис.3):

Операторы циклических повторений - student2.ru Операторы циклических повторений - student2.ru

Рис. 3

Пример: Вычислить сумму заданного числа целых чисел.

PROGRAM SUMMA;

VAR

S: REAL;

N,K: INTEGER;

BEGIN

WRITE(‘Введите количество чисел: ’);

READLN(N);

S:=0;

FOR K:=1 TO N DO S:=S+K;

WRITELN(‘Сумма целых чисел от 1 до ’,

N,’ равна ‘,S ) ;

END.

Шаг изменения счётчика цикла строго равен 1. Если конечное значение счетчика цикла меньше начального, то цикл FOR не выполнится ни разу.

Возможен другой вариант оператора FOR, когда счётчик цикла уменьшается на 1:

FOR <счётчик цикла>:=<нач. зн.> DOWNTO <кон. зн.> DO <оператор>

Здесь цикл будет повторяться, пока

<счётчик цикла> ≥ <кон. зн.>.

После выполнения цикла FOR значение счётчика цикла становится неопределённым. Не следует в ходе выполнения цикла изменять какими-то операторами значение как счетчика цикла, так и его начального и конечного значений.

Оператор цикла WHILE

Это цикл с предварительной проверкой условия повторения цикла. Его структура:

WHILE <условие> DO <оператор>

Пока проверяемое условие справедливо (TRUE) то выполняется оператор, стоящий после слова DO. Если проверяемое условие равно FALSE, то оператор WHILE заканчивает свою работу.

Пример: Составить программу, которая генерировала бы случайные числа в диапазоне от 0 до 10 включительно до тех пор, пока их сумма не превысит некоторое число N.

VAR

X,S,N:INTEGER;

BEGIN

WRITE(‘Введите число N=’);

READLN(N);

S:=0;

WHILE S<N do

BEGIN

X:=RANDOM(11);

S:=S+X;

END;

END.

Оператор цикла REPEAT

Это цикл с постусловием. Он имеет следующую структуру:

REPEAT

<Тело цикла>

UNTIL <условие>

Все операторы, входящие в тело цикла, повторяются, пока не выполнится условие выхода из цикла, стоящее после слова UNTIL. После этого цикл заканчивает свою работу. В тело цикла можно включать любое количество операторов, не оформляя их, как составной оператор.

Пример: Составить программу, которая генерировала бы случайные числа в диапазоне от 0 до 10 включительно до тех пор, пока их сумма не превысит некоторое число N.

VAR

X,S,N:INTEGER;

BEGIN

WRITE(‘Введите число N=’);

READLN(N);

S:=0;

REPEAT

X:=RANDOM(11);

S:=S+X;

UNTIL S>N;

END.

Сравнивая три циклических оператора можно отметить следующее:

· Если точно известно, сколько раз нужно повторять цикл, то лучше использовать оператор FOR.

· Если проверку условия повторения цикла следует выполнить до выполнения оператора, то следует использовать цикл WHILE.

· Если требуется, чтобы тело цикла повторялось хотя бы один раз, а условие выхода из цикла нужно проверить после выполнения всех операторов тела цикла, то целесообразно использовать цикл REPEAT.

· Для бесконечного повторения цикла можно использовать:

WHILE TRUE DO <оператор>

или

REPEAT <тело цикла> UNTIL FALSE.

Наши рекомендации