По этому оператору проверяется <условие> и, если оно выполняется, то выполняется - P, после чего опять проверяется <условие> и т. д.
Итак, P выполняется до тех пор, пока выполняется <условие>.
Если условие ни разу не выполнилось, P игнорируется, управление передается следующему оператору.
Задача.
Вычислить сумму ряда:
где n! = 1*2*…*n
Значение аргумента х и количество итераций n ввести с клавиатуры.
Введем дополнительную переменную для вычисления n! – f.
program cikl_2;
uses
crt; var x,y : real; i,n,f : integer;
begin writeln (' введите x, n '); read (x, n);
y: =0; f: =1; i:=1;
while i<=n do
{ составной оператор }
begin
f:=f*I;
y:=y+sin(i*x)/f;
i:=i+1;
end;
writeln (' y = ', y:8:3);
readln;
end.
Вложенные циклы
В теле любого оператора цикла могут находиться другие операторы цикла. При этом цикл, содержащий в себе другой, называется внешним, а цикл, находящийся в теле первого, - называется внутренним (вложенным). Правила организации внешнего и внутреннего циклов такие же, как и для простых циклов.
Рассмотрим задачу вывода на экран таблицы умножения, решение которой предполагает использование вложенных циклов.
var
i,j : byte;
begin
writeln(‘ Таблица умножения ’);
for i:=1 to 9 do
begin
for j:=1 to 9 do
writeln( i , ‘ * ‘ , j ,‘ = ’, i*j );
writeln;
end;
readln;
end.
При организации вложенных циклов необходимо помнить, что параметр внешнего цикла меняется медленнее, чем параметр внутреннего. При одном значении параметра внешнего цикла параметр внутреннего – пробегает все свои возможные значения.
Оператор прерывания цикла
Для досрочного прерывания цикла можно использовать оператор goto или стандартную процедуру break.
Рассмотрим фрагмент:
…
for i:=1 to n do begin
p:=p* i;
if p>100 then break ;
writeln(‘p=’, p);
end;
…
Цикл будет прерван при достижении условия p>100 по процедуре break.
Пример программы циклической структуры
Задача.
Формулировка задачи:
Составить программу расчета таблицы значений функции f(x) на интервале a<=x<=b в n равностоящих точках. Границы интервала a,b и количество точек n ввести с клавиатуры. Результаты вывести на печать.
Найти сумму положительных значений функции f(x) на заданном интервале. Формула для расчета шага изменения аргумента:
dx = (b-a)/(n-1)
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
Функция
y
Аргумент
x
Количество точек
n
Начальное значение x
a
Конечное значение x
b
Шаг изменения аргумента
dx
Сумма
s
Листинг программы
program cikl_3;
uses
ctr;
var
y,x,a,b,dx,s : real;
I,n : integer;
begin
clrscr;
writeln(‘Введите a,b,n’);
readln(a,b,n);
{ шаг изменения аргумента}
dx:=(b-a)/(n-1);
s:=0;
x:=a;
for i:=1 to n do
begin
y:=(1-exp(-x)) * sin(4*pi*x);
writeln(‘y=’,y:8:3);
x:=x+dx;
if y>0 then s:=s+y;
end;
writeln(‘Сумма положительных значений s=’,s:8:3);
readln;
end.
Вопросы для самоконтроля
Что такое цикл?
Какие циклы можно организовать на языке Паскаль?
В каких случаях предпочтительней использовать оператор for …to … do для организации циклов?
Какой тип должна иметь переменная, которая является параметром цикла в операторе for …to … do ?
Сколько циклов будет пройдено, если в операторе while … do условие не выполнилось с первого раза?
Сколько циклов будет пройдено, если в операторе repeat … until условие выполнилось с первого раза?