По первому тесту выполнил дважды задания. Результат получается правильный (проверял калькулятором). Пишет, что "Задание не проверено" и предлагает повторить. |
Операторы управления
3.5.3 Оператор цикла for..do
Операторы цикла с условием обладают значительной гибкостью, но не слишком удобны для организации "строгих" циклов, которые должны быть выполнены заданное число раз. Оператор цикла for..do используется именно в таких случаях:
for параметр_цикла:=начальное_значение to конечное_значение do оператор; for параметр_цикла:=конечное_значение downto начальное_значение do оператор;
где оператор — любой оператор языка, параметр_цикла — имя переменной целочисленного или перечислимого типов, начальное_значение и конечное_значение должны быть того же типа, что и параметр_цикла.
Шаг изменения цикла for всегда постоянен и равен интервалу между двумя ближайшими значениями типа параметра цикла (при целочисленном значении параметра цикла шаг равен 1).
В случае если тело цикла состоит более чем из одного оператора, необходимо использовать составной оператор:
for параметр_цикла:=начальное_значение to конечное_значение do begin оператор_1; оператор_2; ... оператор_N; end;
Опишем алгоритм работы цикла for..do (рис. 3.26).
- Параметру_цикла присваивается начальное_значение.
- Если значение параметра_цикла превосходит конечное_значение, то цикл завершает свою работу. В противном случае выполняется п. 3.
- Выполняется оператор.
- Значение параметра_цикла изменяется на соответствующий шаг и осуществляется переход к п. 2, и т. д.
Понятно, что этот алгоритм представляет собой цикл с предусловием.
В дальнейшем, чтобы избежать создания слишком громоздких алгоритмов, в блок-схемах цикл for будем изображать так, как показано на рис. 3.27 10Если шаг изменения параметра цикла равен единице, его в блок-схемах можно не указавать. .
Фрагмент подпрограммы, приведённый далее, демонстрирует применение цикла for:
var i : integer; c : char; begin {Вывод на экран чисел от 1 до 10.} for i :=1 to 10 do writeln ( i ); {Вывод на экран чисел от 10 до -10.} for i :=10 downto -10 do writeln ( i ); {Вывод на экран символов от a до r.} for c := ’ a ’ to ’ r ’ do writeln ( c ); end.
Вернёмся к задаче вывода значений функции на отрезке с шагом 0.1. Как видим, здесь количество повторений цикла явно не задано. Однако это значение, можно легко вычислить. Предположим, что параметр цикла принимает значения в диапазоне от до , изменяясь с шагом , тогда количество повторений тела цикла можно определить по формуле:
( 3.6) |
округлив результат деления до целого числа. Следовательно, фрагмент программы вывода значений функции на отрезке с шагом 0.1 будет иметь вид:
var i, n : integer; x, y : real; begin n:=round ( ( pi - 0)/0.1)+1; {Количество повторений цикла.} x : = 0; {Начальное значение аргумента.} {Цикл с известным числом повторений,} {i - параметр цикла, изменяется от 1 до n с шагом 1.} for i :=1 to n do begin {Начало цикла.} y:=exp ( sin ( x ) ) * cos ( x ); {Вычисление значения функции } {для соответствующего значения аргумента.} writeln ( ’ x= ’, x, ’ y= ’, y ); x:=x + 0.1; {Вычисление нового} {значения аргумента.} end; {Конец цикла.} end.