Advertisement
Egor_zalevsky99

Untitled

Dec 11th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.25 KB | None | 0 0
  1. using System;
  2.  
  3.  
  4. namespace Метод_ввода_данных
  5. {
  6.     class Program
  7.     {
  8.         public static double Input(string jn, out double vd)
  9.         {
  10.             Console.Write(jn);
  11.             string buf = Console.ReadLine();
  12.             vd = Double.Parse(buf);
  13.             return vd;
  14.         }
  15.  
  16.         static double[] Function(double x, double a, double b, double c, double leftBorder, double rightBorder, double step)//Метод вычисления функции
  17.         {
  18.             int length = (int)((rightBorder - leftBorder) / step + 1); //Вычисляем сколько шагов сможем сделать по введенным границам
  19.             double[] arrayF = new double[length]; //Задаем массив, где будут храниться наши значения на каждом шаге
  20.  
  21.             for (int i = 0; i < length; i++) //В цикле заполняем массив значениями функции
  22.             {
  23.                 arrayF[i] = Math.Log(a * x) - b * x + c;//Формула вычисления функции от каждого Х  
  24.                 x = x + step; //Добавляем к x шаг
  25.             }
  26.             return arrayF; // Возвращаем наш заполненый массив фукции
  27.         }
  28.  
  29.         static double[] FunctionP(double x, double b, double leftBorder, double rightBorder, double step)//Метод вычисления производной функции
  30.         {
  31.             int length = (int)((rightBorder - leftBorder) / step + 1); //Вычисляем сколько шагов сможем сделать по введенным границам
  32.             double[] arrayP = new double[length]; //Задаем массив, где будут храниться наши значения на каждом шаге
  33.  
  34.             for (int i = 0; i < length; i++) //В цикле заполняем массив значениями производной функции
  35.             {
  36.                 arrayP[i] = 1 / x - b;//Формула вычисления производной от каждого Х  
  37.                 x = x + step; //Добавляем к x шаг
  38.             }
  39.             return arrayP; // Возвращаем наш заполненый массив производной
  40.  
  41.         }
  42.  
  43.         public static bool Root_separation(double function1, double function2, double derivative1, double derivative2)
  44.         {
  45.             if (function1 * function2 < 0 && derivative1 * derivative2> 0)
  46.                 return true;
  47.             else return false;
  48.         }
  49.  
  50.         public static void Main()
  51.         {
  52.             string Input1 = "\tВведите значение левой границы интервала = ";
  53.             Input(Input1, out double ap); //Вызываем метод input, который выводит на консоль строку и введенное число
  54.             Console.WriteLine($"\t{ap:f2}"); //повторно выводим введенное число
  55.  
  56.  
  57.             string Input2 = "\tВведите значение правой границы интервала = ";
  58.             Input(Input2, out double bt); //Вызываем метод input, который выводит на консоль строку и введенное число
  59.             Console.WriteLine($"\t{bt:f2}"); //повторно выводим введенное число
  60.  
  61.             string Input3 = "\tВведите значение шага = ";
  62.             Input(Input3, out double hx); //Вызываем метод input, который выводит на консоль строку и введенное число
  63.             Console.WriteLine($"\t{hx:f2}"); //повторно выводим введенное число
  64.  
  65.             Console.ReadLine();
  66.  
  67.             double a = 0.3049; //Вводим значения коэффициентов нелинейного уравнения
  68.             double b = 0.3436;
  69.             double c = 1.5;
  70.             double leftBorder = Convert.ToDouble(ap); //Конвертируем к double значение левой границы
  71.             double rightBorder = Convert.ToDouble(bt);//Конвертируем к double значение правой границы
  72.             double step = Convert.ToDouble(hx); //Конвертируем к double значение шага
  73.             double x = leftBorder;
  74.             double[] fc = Function(x, a, b, c, leftBorder, rightBorder, step); //Вызываем метод Function, который вернет массив значений F(X)
  75.             double[] f1c = FunctionP(x, b, leftBorder, rightBorder, step); //Вызываем метод FunctionP, который вернет массив значений F'(X)
  76.             int length = (int)((rightBorder - leftBorder) / step + 1); //Вычисляем сколько шагов сможем сделать по введенным границам
  77.             double[] arrayX = new double[length];
  78.  
  79.             for (int i = 0; i < length; i++)//Массив, рассчитывающий Х
  80.             {
  81.                 arrayX[i] = x;
  82.                 x = x + step;
  83.             }
  84.  
  85.             for (int i = 0; i < length; i++)//Массив Х, F(X), F'(X)
  86.             {
  87.                 Console.WriteLine("Х[{0}] = {1}\t F[{0}]= {2} \t F'[{0}]= {3}", i, arrayX[i], fc[i], f1c[i]);//Вывод методов вычисления Х, F(X), F'(X)
  88.             }
  89.  
  90.             for (int i = 0; i < length - 1; i++)//Массив для проверки существования корня
  91.  
  92.             {
  93.                 if (Root_separation(fc[i], fc[i + 1], f1c[i], f1c[i + 1]) is true)//Цикл с истинностью условия
  94.                     Console.WriteLine( " Корень существует на промежутке [{0};{1}]", arrayX[i], arrayX[i + 1]);//Вывод корней промежутков с корнем, удовлетворяющих условию существования
  95.                 else
  96.                     Console.WriteLine(" Корней на промежутке  [{0};{1}] нет", arrayX[i], arrayX[i + 1]);
  97.             }
  98.             Console.ReadLine();
  99.         }
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement