C#

Задание 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;
			}
		}
	}
}

Добавлено: 22 Сентября 2013 09:56:16 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...