- •Лабораторная работа № 3
- •С использованием циклов
- •Теоретические сведения
- •Оператор цикла for
- •Оператор цикла do-while
- •Оператор цикла while
- •Вычисление значения с заданной точностью методом прямоугольников
- •Вычисление по формуле Симпсона путем деления отрезка[a,b] на множество более мелких отрезков
- •Методом простых итераций
- •Методом деления отрезка пополам
- •Контрольные вопросы
- •Задание 2
Оператор цикла do-while
В операторе цикла do-while условие повторения проверяется после каждого прохождения тела цикла, т.е. это цикл с последующим условием. Следовательно, цикл do-while выполняется по крайней мере один раз. Этот цикл повторяется до тех пор, пока выполняется условие, проверяемое в конце цикла.
Форма его записи:
do {оператор или группа операторов}
while (условие);
Даже в случае, когда тело цикла содержит единственный оператор, фигурные скобки следует писать во избежание неправильной трактовки компилятором служебного слова do.

Рис. 3.2. Обозначение цикла do while в схеме алгоритма.
Пример 3.2.
. . .
do {ch=getchar ( ); // принимать с клавиатуры символы
putchar (ch); // и выводить их на экран
}while (ch != ' \n' ); // пока не будет введена пустая посылка
. . .
Оператор цикла while
Оператор цикла while является еще одной разновидностью условного цикла, повторяющегося до тех пор, пока выполняется условие, проверяемое перед началом каждой итерации цикла. Таким образом, это цикл с предварительным условием.
Форма записи:
while (условие) {последовательность операторов}

Рис. 3.3. Обозначение цикла while в схеме алгоритма.
Пример 3.3.
. . .
int index=2;
while (index ++<5) cout << "Желаю удачи!" <<endl;
. . .
Вычисление значения с заданной точностью методом прямоугольников
Для вычисления первого приближения интеграла разделим отрезок [a,b], отвечающий пределам интегрирования (рис.3.4), на n равных частей (n = 4), определим значения xi = a+h*i-h/2; h = (b-a)/n.
Вычислим площадь
одного прямоугольника si=h*f(xi).
Суммаsi
площадей
полученных прямоугольников является
приближенным значением интеграла:
.
Однако одно
приближение не позволяет оценить
точность, с которой вычислено значение
интеграла, необходимо найти следующее
приближение. Для этого увеличим n в два
раза, т.е. n = 2n. Аналогично найдем
.

Рис.3.4 Вычисление интеграла методом прямоугольников
Требуется вычислить значение интеграла с точностью , поэтому проверим условие |S1 - S2|<. Если условие выполняется, то S2 принимается за искомое значение интеграла; если не выполняется, то последнее выполненное значение S2 считается предыдущим, т.е. S1 = S2. После этого удвоим число точек деления отрезка и вычислим новое значение S2. Процесс удвоения n и вычисления S2 будем продолжать до тех пор, пока модуль разности S1 и S2 не станет меньше.
Пример 3.4.
Вычисление интеграла
методом прямоугольников.
#include <iostream.h>
#include <conio.h>
#include <math.h>
#define Pi 3.14159
int main()
{unsigned long i, n = 4;
float a,b,x,h,S1,S2,eps,exact;
a = 0; b = 3/(2*Pi); eps = 0.001;
S1 = 0;
h = (b – a)/n;
//Вычисляем сумму в первом приближении
for(i= 1;i<=n;i++)
{ x = a + i*h – h/2;
S1 = S1+ (1/(5–3*cos(x)))*h;
}
//Вычисляем текущее приближение и сравниваем его с предыдущим
do {n = 2*n;
h = (b – a)/n;
S2 = 0;
for (i = 1; i<=n; i++)
{x = a + i*h – h/2;
S2 = S2 + (1/(5–3*cos(x)))*h;
}
exact = fabs(S1 – S2);
S1 = S2;
} while(exact>eps);
cout << "S = " << S2;
return0;
}
