Операторы циклов
Содержание:
- Оператор цикла с параметром
- Оператор цикла с предусловием
- Оператор цикла с постусловием
Очень часто возникает необходимость выполнить один и тот же оператор (или группу операторов) несколько раз. Для этого в языке Pascal предусмотрены операторы циклов.
Циклом в программировании называют повторение одних и тех же действий (шагов). Последовательность действий, которые повторяются в цикле, называют телом цикла.
Существует несколько типов алгоритмов циклической структуры.
Оператор цикла с параметром
Этот оператор используют, когда количество повторений цикла известно заранее или необходимо изменять какую-либо величину на одно и то же значение в определенном диапазоне. Форма записи оператора:
For <параметр> := <начальное значение> To <конечное значение> Do <оператор>;
Служебное слово To указывает направление изменения параметра – увеличение на 1 (начальное значение меньше конечного значения; если это условие не выполнится, оператор не выполнится ни разу). Если необходимо, чтобы параметр уменьшался на 1, то используется слово DownTo (начальное значение больше конечного значения). В качестве оператора можно использовать любой простой или составной оператор.
Пример: требуется вычислить суму целых чисел от M до N путем прямого суммирования. Здесь M и N – целые числа. Задачу можно сформулировать так:
Здесь целая переменная I последовательно принимает значения в диапазоне от M до N. При каждом значении I выполняется тело цикла. После последнего выполнения тела цикла при I = N происходит выход из цикла на продолжение алгоритма. Цикл выполняется хотя бы один раз, если M ? N, и не выполняется ни разу при M > N.
Program Summering Var I, M, N, Summa : Integer; Begin Write (‘M=’); ReadLn (M); Write(‘N=’); ReadLn (N); Summa := 0; For I := M To N Do Summa := Summa + I; WriteLn (‘Сумма=’, Summa) End.
Пример: в рассмотренной выше задаче можно складывать и в обратном порядке, т.е. от N до M (N / M). Для этого можно использовать второй вариант оператора цикла
For: Summa := 0; For I := N DownTo M Do Summa := Summa + I;
При использовании оператора цикла For нужно помнить следующие правила:
- в качестве параметра можно использовать простую переменную, описанную в этом же блоке;
- параметр цикла не может иметь тип Real;
- начальное и конечное значения должны иметь тот же тип, что и параметр;
- в теле цикла (операторе) явное изменение значения параметра (например, оператором присваивания) может привести к бесконечному циклу;
- нельзя в теле цикла изменить начальное и конечное значение параметра, если они заданы переменными;
- после завершения работы цикла значение параметра становится равным конечному значению параметра, если цикл не был прерван оператором перехода;
- параметр цикла может изменяться (увеличиваться или уменьшаться) каждый раз при выполнении тела цикла только на единицу. Если нужен другой шаг изменения параметра, предпочтительнее циклы Repeat и While.
Для каждого значения параметра между начальным значением и конечным оператор в теле цикла выполняется только один раз.
Примеры:
- Вывести на экран все символы от ‘a’ до ‘z’:
For I := ‘a’ To ‘z’ Do Write (I,‘ ’,);
- Вычислить y = x2 при x = 2, 4, 6, 8, 10.
x := 2; For I := 1 To 5 Do Begin y := x *x ; WriteLn (x : 3, y); x := x + 2; {НЕ рекомендуется так делать!} End;
Оператор цикла с предусловием
Форма записи:
while <условие> do <оператор>;
В качестве оператора может быть любой простой или составной оператор. Оператор выполняется только в том случае и до тех пор, пока условие истинно, причем условие проверяется каждый раз после выполнения оператора. Если с самого начала условие ложно, то есть имеет значение false, оператор цикла не выполнится ни разу.
Примеры:
- Вычисление факториала:
while x <=N do begin Fact := Fact*x; x := x + 1 end;
- Вычислить у=х2 при х=2, 4, 6, 8, 10:
x:=2; while x<=10 do begin y:=sqr(x); writeln(‘x=’,x:3, ‘y=’,y:5); x:=x+2 end;
Если в операторе цикла условие всегда истинно, то такой цикл называется бесконечным:
t:=true; while t do x:=x+5;
Оператор цикла с постусловием
Форма записи:
repeat <оператор1>; <оператор2>; … until <условие>;
Последовательность операторов может состоять из одного или нескольких любых операторов. В отличие от цикла с предусловием, в этом цикле условие проверяется всегда после выполнения оператора (или последовательности операторов), если оно ложно – оператор снова выполняется, иначе цикл прекращается. При такой структуре, оператор хотя бы один раз обязательно выполнится.
Примеры:
- Вычислить у=х2 при х=2, 4, 6, 8, 10:
x:=2; repeat y:=sqr(x); writeln(x:3,y:5); x:=x+2 until x>10;
- Вводить символы с клавиатуры до тех пор, пока не будет введен символ “!”
repeat writeln(‘введите символ’); readln(c) until c=’!’;
Циклы с предусловием и постусловием называют условными циклическими алгоритмами. Нетрудно заметить, что эти циклы взаимозаменяемы и обладают некоторыми отличиями:
- в цикле с предусловием условие проверяется до тела цикла, в цикле с постусловием – после тела цикла;
- в цикле с постусловием тело цикла выполняется хотя бы один раз, в цикле с предусловием тело цикла может не выполниться ни разу;
- в цикле с предусловием проверяется условие продолжения цикла, в цикле с постусловием – условие выхода из цикла.
При написании условных циклических алгоритмов следует помнить следующее:
- чтобы цикл имел шанс когда-нибудь закончиться, содержимое его тела должно обязательно влиять на условие цикла;
- условие должно состоять из корректных выражений и значений, определенных еще до первого выполнения тела цикла.