Задание 2
using System;
namespace zadanie_2._1
{
/// <summary>
/// Извлечение корня n-ой степени: ввод исходных данных, проверка, вывод результата
/// </summary>
public class Program
{
public static void Main(string[] args)
{
string x, n;
double number, exp;
//Проверка на соответствие типу: До тех пор, пока число не будет типа double, повторять приглашение для ввода чисел
do
{
System.Console.WriteLine("Извлечение корня n-ой степени");
Console.Write("Введите подкоренное выражение:");
x = Console.ReadLine();
Console.Write("Введите степень корня:");
n = Console.ReadLine();
if (!double.TryParse(x, out number))
{
Console.WriteLine("Ошибка!");
}
if (!double.TryParse(n, out exp))
{
Console.WriteLine("Ошибка!");
}
}
while (!double.TryParse(x, out number) || (!double.TryParse(n, out exp)));
NewtonsMethod sqr = new NewtonsMethod();
//Вывод результатов
double x2 = sqr.sqrt(number, exp);
Console.WriteLine("Результат (Метод Ньютона): " + x2.ToString());
double x3 = Math.Pow(number, 1.0 / exp);
Console.WriteLine("Результат (Метод MathPow): " + x3.ToString());
Console.ReadKey();
}
}
/// <summary>
/// Метод Ньютона (метод касательных) для любых целых положительных степеней
/// </summary>
/// <param name="number">Число под корнем</param>
/// <param name="exp">Степень корня</param>
/// <param name="eps">Заданная точность</param>
public class NewtonsMethod
{
public double sqrt(double number, double exp, double eps = 1e-15)
{
//Нулевая степень корня = 1
if (number == 0) return 1;
//Корень из нуля = 0
else if (exp == 0) return number;
double x0 = 1e-16; //начальное приближение
while (true) //бесконечный цикл
{
double x1 = 1.0 / exp * ((exp - 1.0) * x0 + number / Math.Pow(x0, exp - 1));
if (Math.Abs(x1 - x0) > eps) x0 = x1; //условия окончания вычислений
else return x1;
}
}
}
}
Комментарии:
Нету комментариев для вывода...