Читайте также:
|
|
Операторы цикла с условием обладают значительной гибкостью, но не слишком удобны для организации ≪строгих≫ циклов, которые должны быть выполнены заданное число раз. Оператор цикла for … do используется именно в таких случаях:
for i:= in to ik do оператор;
for i:= ik downto in do оператор;
где оператор – любой оператор языка, i, in и ik — переменная целочисленного или перечислимого типов.
Переменную i называют параметром цикла. Переменные in и ik — диапазон изменения параметра цикла: in — начальное значение, а ik — конечное значение параметра цикла.
Шаг изменения цикла for всегда постоянен и равен интервалу между двумя ближайшими значениями типа параметра цикла (при целочисленном значении параметра цикла шаг равен 1).
В случае если тело цикла состоит более чем из одного оператора, необходимо использовать составной оператор:
for i:= in to ik do
begin
оператор_1;
оператор_2;
...........
оператор_n;
end;
Рисунок Алгоритм работы цикла for...do
Опишем алгоритм работы цикла for … do:
1. Параметру цикла i присваивается начальное значение in.
2. Если значение параметра цикла превосходит конечное значение (i>ik), то цикл завершает свою работу. В противном случае выполняется пункт 3.
3. Выполняется оператор.
4. Значение параметра цикла i изменяется на соответствующий шаг и осуществляется переход к п.2 и т. д.
Понятно, что этот алгоритм представляет собой цикл с предусловием.
В дальнейшем, чтобы избежать создания слишком громоздких алгоритмов, в блок-схемах цикл for можно изображать так, как показано на рис.
Рисунок: Представление цикла for...do с помощью блок-схемы
Вернемся к задаче вывода значений функции y = e sin(x) cos(x) на отрезке [0;π] с шагом 0.1. Как видим, здесь количество повторений цикла явно не задано. Однако это значение, можно легко вычислить.
Предположим, что параметр цикла х принимает значения в диапазоне от xn до xk, изменяясь с шагом dх, тогда количество повторений тела цикла можно определить по формуле:
округлив результат деления до целого числа. Следовательно, фрагмент программы будет иметь вид:
var i,n:integer; x,y:real;
begin
{Количество повторений цикла:}
{n=(xk-xn)/dx+1; xk=pi, xn=0, dx=0.1}
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.
Дата добавления: 2014-12-19; просмотров: 79 | Поможем написать вашу работу | Нарушение авторских прав |