Хелпикс

Главная

Контакты

Случайная статья





РАБОТА  4. Операторы цикла while, do-while. Пример 4.1.. Пример 4.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 служит для предотвращения возможного зацикливания программы.

x=0 k=1  
Ввод (eps, limit)
Пока  f(x)>0 и k<limit    
x=x+eps k++
Печать (x) Печать (k)- для сведения

 

 


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.

 

 

sum=1 k=0 ak=1    
Ввод (eps)
  пока (ak > eps)
k++ ak = ak/k sum =sum + ak
Печать ( sum )

 

 


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.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.