Оператор цикла с предусловием while
Синтаксис оператора цикла с предусловием while
while выражение do оператор;
выражение, стоящее после ключевого слова while (англ., while – пока), является условием повторения цикла. Оно должно иметь логический тип, это может быть выражение, содержащее операцию отношения (например, ), или просто логическая переменная (например,varflag:boolean). выражение обязательно должно содержать переменную цикла (параметр цикла), а в теле цикла должен присутствовать оператор, изменяющий значение переменной цикла таким образом, чтобы условие выхода из цикла было достижимо (иначе цикл будет выполняться бесконечное число раз). После ключевого слова do (англ., do – делай) следует оператор, который многократно повторяется в цикле. В качестве оператора может быть любой оператор языка программирования Паскаль (if, for, while, repeat и др.), в т.ч. составной оператор. Если в теле цикла требуется выполнить несколько операторов, они должны быть заключены в блок с помощью операторных скобок beginend.
Рассмотрим порядок выполнения оператора цикла с предусловием while. Сначала до оператора цикла (до служебного слова while) необходимо задать начальное значение переменной цикла. Во время выполнения цикла перед каждой итерацией цикла находится значение логического выражения, стоящего после ключевого слова while. Если логическое выражение принимает значение истина (true), тогда выполняется оператор, стоящий после ключевого слова do.Если логическое выражение принимает значение ложь (false), тогда происходит выход из цикла. После окончания цикла управление передается на следующий за ним оператор. Таким образом, пока выражение, стоящее после ключевого слова while, принимает значение истина, выполняется оператор, стоящий после ключевого слова do. Как только значение выражения стало ложным, осуществляется выход из цикла. Блок-схема оператора цикла с предусловием while приведена на рис. 5.3.
Выражение |
Тело цикла |
Истина |
Ложь |
Рис. 5.3. Блок-схема, соответствующая оператору цикла с предусловием
Если логическое выражение, стоящее после ключевого слова while, принимает значение ложь в самом начале цикла, то тело цикла не выполнится ни разу.
Для корректного выполнения оператора цикла while должны выполняться следующие правила:
1) до оператора цикла (т.е. до служебного слова while) обязательно нужно задать начальное значение переменной цикла;
2) в теле цикла должен присутствовать оператор, изменяющий значение переменной цикла таким образом, чтобы условие выхода из цикла было достижимо (иначе цикл будет выполняться бесконечное число раз).
Конец |
Начало |
a,b,h |
x=a;b |
y=cos(x) |
x=x+h |
Да |
x,y |
Конец |
Начало |
a,b,h |
x>b |
y=cos(x) |
Нет |
x=a |
x=x+h |
Да |
x,y |
Конец |
Начало |
a,b,h |
x<=b |
y=cos(x) |
Нет |
x=a |
а) | б) | в) |
Рис. 5.4. Блок-схема алгоритма построения значения функции:
а – цикл с предусловием; б – универсальная блок-схема; в – цикл с постусловием
Пример 5.8. Таблица значений функции. Составить таблицу значений функции , для аргумента, изменяющегося на отрезке с постоянным шагом , где , , – вещественные числа, , . Блок-схема алгоритма построения значения функции для цикла с предусловием приведена на рис. 5.4, а, б.
program prog;
var x,y,a,b,h:real;
begin
writeln('Введите a,b,h');
read(a,b,h);
x:=a;//переменной цикла присваивается начальное значение
whilex<=bdo//проверяется условие выхода из цикла
begin
y:=cos(x);
writeln('х=',x:5:2,' y=',y:5:2);
x:=x+h;{значение переменной цикла увеличивается на величину шага}
end;
end.
Далее приведены результаты выполнения программы при , , :
х=4.00 y=-0.653643620863612
х=4.20 y=-0.490260821340699
х=4.40 y=-0.307332869978419
х=4.60 y=-0.112152526935054
х=4.80 y=0.0874989834394473
x=5.00 y=0.283662185463226
Пример 5.9. Наибольшее значения функции на отрезке. Вычислить наибольшее значение функции на отрезке c шагом .
program prog;
const h=0.1;
var x,y,max,a,b:real;
begin
x:=1;//переменной цикла присваивается начальное значение
max:=sqr(x)+cos(x);
whilex<2do//проверяется условие выхода из цикла
begin
x:=x+h;{значение переменной цикла увеличивается на величину шага}
y:=sqr(x)+cos(x);
if y>max then
max:=y;
end;
writeln('max=',max:5:2)
end.
Пример 5.10. Наименьшее значения функции на отрезке. Вычислить наименьшее значение функции на отрезке c шагом , где , , – вещественные числа, , .
program prog;
var x,y,min,a,b,h:real;
begin
writeln('Введитеа,b,h');
read(a,b,h);
x:=a;
min:=sqr(x)+cos(x);
while x<b do
begin
x:=x+h;
y:=sqr(x)+cos(x);
if y<min then
min:=y;
end;
writeln('min=',min:5:2)
end.