направление изменения значения переменной (возрастание – to или убывание – downto );
в) собственно действия (оператор), выполняемые на каждой итерации.
На использование управляющей переменной налагаются следующие ограничения:
1. В качестве управляющей переменной должна использоваться простая переменная.
2. Управляющая переменная должна иметь дискретный тип.
3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной.
4. В теле цикла запрещается явное изменение значения управляющей переменной.
5. После завершения оператора значение управляющей переменной становится неопределенным.
Оператор, который находится в теле цикла for, выполняется один раз для каждого значения управляющей переменной в диапазоне между начальным и конечным значениями. Если в операторе цикла используется служебное слово to, а начальное значение управляющей переменной меньше его конечного значения, то оператор, содержащийся в теле цикла, не выполнится ни разу. Аналогичная ситуация имеет место в случае использования в операторе цикла служебного слова downto.
Пример программы, которая возводит произвольное число в целую степень.
Program power;
var
p,x:real;
i,n:integer;
begin
read(x,n); {ввод x ,n}
p:=1; {присвоение степени начального значения}
for i:=1 to abs(n) do
p:=p*x; {вычисление степени}
if n<0 then {если степень отрицательна}
p:=p/x;
write(p);
end.
II. Оператор цикла с предусловием используется в тех случаях, когда количество повторений цикла заранее не известно. Он имеет следующую синтаксическую форму:
while <условие>do <оператор>;
Этот оператор задает повторяющееся выполнение оператора, содержащегося в нем. Перед каждым выполнением внутреннего оператора производится проверка значения булевского выражения (условие), которое служит критерием повторения: если это выражение имеет значение true, то выполняется очередная итерация; в противном случае выполнение оператора цикла заканчивается. Если выражение с самого начала имеет значение false, то цикл не выполнится ни разу.
Предположим, нужно подсчитать количество цифр целого положительного десятичного числа. Программа решения этой задачи может выглядеть следующим образом:
Program digits;
var
n,k:integer;
begin
write(‘введите n’);
readln(n);
k:=1;
while n div 10>0 do
begin
k:=k+1;
n:=n div 10;
end;
write(‘Количество цифр:’,k);
end.
У этой программы есть один недостаток: она не обрабатывает отрицательные числа. По условию от нее этого и не требуется. Однако пользователь может ввести и отрицательное число. Перепишем программу так, чтобы пользователь вводил число до тех пор, пока оно не будет положительным. Фрагмент ввода будет теперь выглядеть следующим образом:
write(‘введите положительное n’);
readln(n);
while n < 0 do
begin
write(‘введите n’);
readln(n);
end;
Это простой пример так называемой “защиты от дурака”. Теперь пользователь не получит результат, пока не введет положительное число. Однако нам пришлось написать один и тот же фрагмент ввода числа дважды: перед циклом и в теле цикла. Поэтому здесь лучше воспользоваться другим оператором цикла, а именно оператором цикла с постусловием.
III. Оператор цикла с постусловием имеет следующую синтаксическую форму:
repeat
оператор1;
оператор2;
. . . . . .
операторN;
until <условие>;
Этот оператор аналогичен предыдущему. Отличие заключается в том, что условие окончания цикла проверяется после выполнения очередной итерации (таким образом гарантируется хотя бы однократное выполнение цикла). Кроме того, критерием окончания цикла является равенство выражения, описывающего <условие>, константе true. Если выражение имеет значение false, то цикл выполняется.
Перепишем теперь фрагмент ввода, используя цикл repeat.
repeat
write(‘введите положительное n’);
readln(n);
until n>=0;
Классическим примером задачи на применение цикла с условием является вычисление суммы членов степенного ряда. Пусть необходимо вычислить
.
Для любого k было бы нерационально считать входящие в выражения для общего члена степень и факториал с самого начала, имея их значения при предыдущем k. Как степень, так и факториал будут возрастать с ростом k, что может привести к потере точности и/или переполнению разрядной сетки при раздельном
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.