Циклы
Многократно повторяющиеся действия записывают с помощью операторов цикла. Если количество повторов известно заранее, то используется оператор цикла с параметром. Если же количество повторов неизвестно, а критерием выхода из цикла служит выполнение некоторого условия, то используют циклы с предусловием и циклы с постусловием.
Цикл с предусловием
Формат оператора:while <условие> do <тело цикла>
В теле цикла используются любые допустимые в языке операторы, в том числе операторы цикла.
Перед каждым выполнением тела цикла происходит вычисление условия. Если условие истинно, происходит выполнение операторов тела цикла и снова вычисляется условие. Если после выполнения операторов тела цикла условие стало ложным, то происходит выход из цикла на следующий после while оператор.
Пример1. Найти сумму n введенных целых чисел.
var i, n : integer; a, sum : integer; begin read (n); i := 1; sum := 0; while i <= n do begin read (a); sum := sum + a; i := i + 1; end; writeln (sum); end. |
{ n — количество чисел } { i – номер очередного введенного числа } { почистили переменную sum, в которой будет собираться сумма вводимых чисел } { пока не перебрали все числа }
{ вводим число в переменную a } { добавляем a в сумму } { увеличиваем номер обрабатываемого числа на 1 } |
Если перед первым выполнением оператора while условие было ложным, цикл не выполнится ни разу и сразу произойдет переход на следующий после while оператор.
Пример 1.2.
var i, n : integer; a, sum : integer; begin read (n); i := n + 1; sum := 0; while i <= n do begin read (a); sum := sum + a; i := i + 1; end; writeln (sum); end. |
|
В данном случае операторы тела цикла не будут выполнены, так как условие с самого начала имеет значение false.
Очевидно, что среди операторов тела цикла обязательно должен быть оператор, влияющий на выполнение условия. В противном случае цикл будет бесконечным.
var i, n : integer; a, sum : integer; begin read (n); i := 1; sum := 0; while i <= n do begin read (a); sum := sum + a; end; writeln (sum); end. |
{ нет увеличения i на 1 } |
При использовании параметра цикла очень важно правильно определить значения переменнных, используемых в условии цикла.
Пример 1.4.
var i, n : integer; a, sum : integer; begin read (n); i := 1; sum := 0; while i < n do begin read (a); sum := sum + a; i := i + 1; end; writeln (sum); end. |
{ i изменяется от 1 до n - 1 }
|
Пример 2. С клавиатуры вводятся целые числа. Суммировать числа, пока не будет введен 0.
var a, sum : integer; begin read (a); sum := 0; while a <> 0 do begin sum := sum + a; read (a); end; writeln (sum); end. |
{ ввели первое число } { почистили sum } { пока очередное введенное число не равно 0 } { пока не перебрали все числа }
{ добавим число в сумму } { ввовдим очередное число a } { увеличиваем номер обрабатываемого числа на 1 } |