Затем выполняются цикл ввода 10 чисел и их суммирование. Вначале оператор условия while проверяет условие Count < Limit. Если условие верно, то выполняется составной оператор в теле цикла:
Begin
Count : = Count+1;
Write('Введите ', Count, '—в целое число: ';
Readln(Item); Sum:= Sum+Item;
End.
В нем вводится значение очередного числа, и на это значение увеличивается значение суммы. После этого управление в программе вновь передается оператору цикла while, опять проверяется условие Count < Limit. Если условие верно, то выполняется составной оператор и т. д., пока значение переменной Count будет меньше 10.
Как только значение Count станет равно 10 и условие Count < Limit не будет соблюдено, выполнение цикла завершится, а управление в программе будет передано на оператор, находящийся за словом end, т. е. первый оператор за границей while. Это вызов процедуры Writeln, которая выведет сообщение 'Сумма введенных чисел равна' и напечатает значение переменной Sum.
Упражнение 4.Введите текст программы, откомпилируйте ее и исполните для разных значений чисел. Проверьте выполнение программы, пронаблюдав значения переменных Sum, Item и условия Count < Limit в режиме отладки "по шагам".
Оператор повтора repeat.Оператор повтора repeat аналогичен оператору while, но отличается от него, во-первых, тем, что условие проверяется после очередного выполнения операторов тела цикла (очередной итерации) и таким образом гарантируется хотя бы однократное выполнение цикла, а во-вторых, тем, что критерием прекращения цикла является равенство выражения константе True. За это цикл repeat часто называют циклом с постусловием, или циклом "ДО", так как он прекращает выполняться, как только значение выражения условия, записанного после слова until, равно True (истина).
Оператор повтора repeat состоит из заголовка repeat, тела и условия окончания until.
Синтаксическая диаграмма выглядит следующим образом:
Формат записи
Repeat
<оператор>
…
<оператор>
unltil <условие окончания цикла>
Операторы, заключенные между словами repeat и until, являются телом цикла. В начале выполняется тело цикла, затем проверяется условие выхода из цикла. Именно поэтому цикл, организованный с помощью оператора repeat, в любом случае выполнится хотя бы один раз. Если результат булевского выражения равен False, то тело цикла активизируется еще раз; если результат True, происходит вы ход из цикла.
При программировании операторов тела цикла следует обеспечить влияние по крайней мере одного из операторов тела цикла на значение условия, иначе цикл будет выполняться бесконечно.
В следующем фрагменте показано, как оператор repeat используется для ожидания нажатия клавиш Y и N. Нажатие других клавиш будет игнорироваться:
uses Crt;
Var
YH: char;
Begin
Repeat
YN:= ReadKey;
until Upcase(YN) in [‘Y’, ‘N’];
End.
Примером действия оператора repeat может служить программа DemoRepeat, которая вводит и суммирует любое количество целочисленных значений. Если введено значение 999, то на экран выводится результат суммирования.
program DemoRepeat;
Var
X: integer;
Sum: real;
Begin
Sum:=0;
repeat {Повторять}
Write('Значение X= ');{Начало тела цикла}
Readln(X); {Считать очередное значение X с клавиатуры)
if X <> 999 then
Sum:= Sum+X;
until X = 999; {Условие окончания цикла}
Writeln('Сумма введенных чисел* ',Sum);
End.
В данном примере в разделе описания переменных описана переменная X целочисленного типа integer и Sum вещественного типа real.
В начале выполнения программы обнуляется значение суммы чисел. Затем зарезервированным словом repeat объявляется цикл, после чего следуют операторы тела цикла, которые выводят на экран запрос 'Значение Х= ', считывают введенное с клавиатуры значение X. Оператор if проверяет его на неравенство числу 999 и, если оно не равно 999, увеличивает значение суммы Sum на значение числа X. В конце цикла оператор until X = 999 проверяет условие окончания цикла. Если значение выражения X = 999 истинно, то цикл завершится, а управление в программе будет передано на оператор, находящийся за словом until, т. е. первый оператор за границей цикла repeat. Это вызов процедуры Writeln, которая выведет сообщение 'Сумма введенных чисел равна' и напечатает значение переменной Sum.
Оператор повтора for.В случаях, когда число повторений может быть заранее известно, для организации циклической обработки информации применяется оператор повтора for. Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой параметром цикла, или управляющей переменной.
Оператор повтора for состоит из заголовка и тела цикла.
Синтаксическая диаграмма для данного оператора выглядит следующим образом:
Как видно из диаграммы, он может быть представлен в двух форматах:
for <параматр цикла> := <S1> to <S2> do <оператор>;
for <параметр цикла> :=<S1> downto <S2> do <оператор>;
где SI и S2 —выражения, определяющие соответственно начальное и конечное значения параметра цикла;
for …. do — заголовок цикла;
<оператор> — тело цикла.
Тело цикла может быть простым или составным оператором. Оператор for обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного. Заголовок оператора повтора for определяет диапазон изменения значений управляющей, переменной (параметра цикла) и одновременно число повторений оператора, содержащегося в теле цикла; направление изменения значения параметра цикла (возрастание — to или убывание — downto).
Пример:
for I:=1 to 100 do Read(M[I]);{Чтение элементов массива}
for I:=1 100 downto 1 do Write(M[I]);{Вывод элементов массива}
При первом обращении к оператору for вначале вычисляются выражения S1, S2 и осуществляется присваивание <параметр цикла>:=S1.
После этого циклически повторяются следующие действия.
1. Проверяется условие <параметр цикла>:<=S2,
2. Если условие выполнено, то оператор for продолжает работу (выполняется оператор в теле цикла), если условие <параметр цикла>:<=S2 не выполнено, то оператор for завершает работу, и управление в программе передается на оператор, следующий за циклом.
3. Значение управляющей переменной изменяется на +1 (to) или -1 (downto) и далее с п. 1. Обратите внимание, что шаг изменения управляющей переменной — единица.
На использование управляющей переменной (параметра цикла) в цикле for налагаются следующие ограничения.
1. В качестве параметра должна использоваться простая переменная, описанная в текущем блоке.
2. Управляющая переменная должна иметь дискретный тип.
3.Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кроме вещественного.
4. В теле цикла запрещается явное изменение значения управляющей переменной (например, оператором присваивания).
5. После завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора не было прервано оператором .перехода.
Примером действия оператора for может служить программа DemoFor, которая выводит на экран таблицу перевода из градусов по шкале Цельсия(С) в градусы по Фаренгейту(Р) для значений от 15°С до 30°С с шагом 1 градус. Перевод осуществляется по формуле: F = С* 1.8+32.
program DemoFor;
Var
I: integer;
F: real;
Begin
Writeln (' Температура ');
for I:= 15 to 30 do{Заголовок цикла с параметром)
begin{Начало тела цикла}
F:= 1*1.8+32;
Writeln('По Цельсию* ',I,' по Фаренгейту= ', F:5:2) end;{Конец тела цикла)
End.
В блоке описания переменных описаны параметр цикла I типа integer и пере менная F — температура по Фаренгейту типа real. Переменная I, помимо функций управляющей переменной, является переменной, хранящей целочисленные значения температуры по шкале Цельсия. В начале выполнения программы на экран выводится надпись ' Температура ', а затем оператором повтора выводится таблица соотношения температуры в шкалах Цельсия и Фаренгейта. Печать таблицы выполняется оператором Writeln('По Цельсию» ' ,I, ' по Фаренгейту= ', F:5:2)
Цикл выполняется следующим образом.
При первом обращении к оператору for вычисляются значения начального (15) и конечного (30) параметров цикла и управляющей переменной I присваивается начальное значение 15.
Затем циклически выполняется следующее:
1. Проверяется условие I<=30.
2. Если оно соблюдается, то выполняется составной оператор в теле цикла, т.е. рассчитывается значение выражения I*1.8+32, затем оно присваивается переменной F, к на экран выводится сообщение
‘По Цельсию» ‘,I,’ по Фаренгейту’ , F:5:2
Если условие 1<=30 не соблюдается, т. е. как только I станет > 30, оператор тела цикла не выполняется, а управление в программе передается за пределы оператора for, в нашем примере на оператор end;. Программа завершает работу.
3. Значение параметра цикла I увеличивается на единицу, и управление передается в заголовок цикла for для проверки условия.