|
||||||||||||
РАБОТА 4. Операторы цикла while, do-while. Пример 4.1.. Пример 4.2.Стр 1 из 2Следующая ⇒ 30.09.13 РАБОТА 4 Операторы цикла while, do-while
Пример 4.1.
Известно, что функция f(x) - убывающая и имеет корень при x³0. Найти этот корень с точностью e. (Пусть для конкретности f(x) = 1- x3). Поясним суть применяемого метода с помощью рис Начиная с некоторого значения (в данном случае x=0) перемещаемся по оси x с шагом eps до тех пор, пока значение функции не станет отрицательным или равным нулю. Текущее значение x и будет принято в качестве корня функции. Переменная limit служит для предотвращения возможного зацикливания программы.
Console.Write("Точность="); double eps = double.Parse(Console.ReadLine());
Console.Write("Предельное количество итераций="); int limit = int.Parse(Console.ReadLine());
double x = 0; int k=0;
while ((1.0 - Math.Pow(x, 3) > 0) && (k < limit)) { x = x + eps; //можно x += eps; k++; }
Console.WriteLine("Корень=" + x); Console.WriteLine("Выполнено " + k + " итераций");
Пример 4.2.
Вычислить
с абсолютной погрешностью ε.
Здесь имеем дело по крайней мере с двумя проблемами.
Первая – это суммирование бесконечного количества слагаемых. Тем не менее, этот ряд сходящийся, т.е. сумма его членов конечна (кстати, она равна хорошо известному числу е=2,718281828…). Для данного ряда можно доказать, что абсолютная погрешность ε не превышает значение последнего включенного в сумму члена ряда.
Вторая – вычисление очередного члена ряда. Дело в том, что вычисление в «лоб»: потребует организации цикла, и, кроме того, может привести к переполнению при вычислении к!, поскольку факториал растет очень быстро с ростом к.
Для решения подобных задач используется так называемый рекуррентный способ, в котором очередной член суммы вычисляется через предыдущий. В нашем случае это
т.е. очередной член ряда получается из предыдущего простым алгебраическим действием.
При выполнении этого примера поэкспериментируйте с разными значениями eps.
double eps = double.Parse(Console.ReadLine());
double sum = 1.0; int k = 0; double ak = 1.0;
do { k++; ak /= k; sum += ak; } while (ak > eps);
Console.WriteLine("Сумма ряда = " + sum + " с точностью = " + eps); Console.Write("Точность вычисления суммы ряда=");
Каждое задание желательно решить в двух вариантах – с помощью циклов while и do-while.
|
||||||||||||
|