Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР8-С++-10-апреля-2012.doc
Скачиваний:
9
Добавлен:
15.09.2019
Размер:
3.09 Mб
Скачать

1.4. Оператор цикла со спецификацией итерационного типа (типа условия)

В С++ для организации ИЦВП предусмотрены специальный оператор цикла while со спецификацией итерационного типа (типа ус­ловия). Указанный оператор получил название оператора цикла с предусловием и был рассмотрен в предыдущей работе. В предыдущей работе оператор while (условие) использовался для организации циклов типа арифметической прогрессии, в данной работе рассмотрим работу данного оператора с позиций использования для организации ИЦВП.

Конструкция оператора этого типа имеет вид:

while (условие Е)

{

операторы тела цикла;

}

Условие Е – скалярное или логическое выражение.

Оператор while выполняется таким образом: вычисляется значение выражения Е и если значение Е истинно, выполняются операторы, составляющие тело цикла, после чего снова вычисляется значение выражения Е после слова while; если же значение Е ложно, осуществляется переход к опе­ратору, стоящему за оператором цикла while. Таким образом, операторы тела цикла выполняются до тех пор, пока значение выражения Е истинно.

Если значение выражения Е с самого начала оказывается равным ложным, операторы в теле цикла совсем не выполняются.

При использовании оператора while программисту необхо­димо позаботиться, чтобы значение хотя бы одного из операндов, входя­щих в выражение Е, изменялось операторами {группы} (тела цикла), иначе повторение выполнения операторов группы может быть бесконечным.

Рассматриваемая форма оператора while удобна для программирования широкого класса итерационных вычислительных процессов и задач, в ко­торых повторение заданной группы операторов зависит от истинности не­которого логического условия.

Пусть, например, значение переменной х равно 10, а значение у равно 4. Тогда при выполнении оператора

while (x > y) { x = x - 1; у = у + 1;}

тело цикла – операторы x = x - 1; у = у + 1; выполняется трижды, и в момент выхода из цикла x и у обе будут иметь значение 7.

Действия рассматриваемого оператора цикла наиболее легко описыва­ются с помощью дополнительных операторов языка следующим образом:

START: if (!E) goto FINISH;

S1;

S2;

….

Sn;

goto START;

FINISH: S;

Здесь S – является преемником оператора цикла. Схема выполнения оператора цикла с предусловием while представлена на рис. 8.6,а.

Применение рассмотренной формы оператора while для реализации ИЦВП рассмотрим на конкретных примерах.

Пример 8.9

Вычислить значение кубического корня из числа методом Ньютона по рекуррентной формуле

где Yk, Yk-1 – последовательность итераций, k = 1, 2, 3 .... Точность вычислений определяется неравенством

|Yk – Yk-1| ≤ ,

при его выполнении вычисления должны прекратиться.

Расчет произвести для х = 21 и  = 110-3. Блок-схема алгоритма вычисления кубического корня приведена на рис. 8.6,б. Фрагмент программы, реализующей указанные вычисления с использованием оператора цикла while может иметь вид:

y0=0;

y = 2;

x = 21;

eps = 1e-03;

while (fabs(y – y0) > eps)

{

y0 = y;

y = (2*y0 + x/(y0*y0))\3.0;

}

cout <<"Значение кубического корня = "; << y;

В приведенном фрагменте программы y0 соответствует переменной Yk-1, y соответствует переменкой Yk , eps – .

а)

б)

Рис. 8.6. Блок-схемы алгоритмов: