using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Quadratic_interpolation { class Program { // ищем три близжайшие точки в таблице относительно введенной public static void getInterpolationValues(double[,] inter, double[,] table, double x) { for (int i = 0; i < table.GetLength(1) - 1; ++i) { if (x > table[0, i] && x < table[0, i + 1]) { if (i > 0) { inter[0, 0] = table[0, i - 1]; inter[0, 1] = table[0, i]; inter[0, 2] = table[0, i + 1]; inter[1, 0] = table[1, i - 1]; inter[1, 1] = table[1, i]; inter[1, 2] = table[1, i + 1]; } else { inter[0, 0] = table[0, i]; inter[0, 1] = table[0, i + 1]; inter[0, 2] = table[0, i + 2]; inter[1, 0] = table[1, i]; inter[1, 1] = table[1, i + 1]; inter[1, 2] = table[1, i + 2]; } break; } } } // квадратичная интерполяция public static void solve(double[,] inter, double x) { double y = ((x - inter[0, 1]) * (x - inter[0, 2])) / ((inter[0, 0] - inter[0, 1]) * (inter[0, 0] - inter[0, 2])) * inter[1, 0] + ((x - inter[0, 0]) * (x - inter[0, 2])) / ((inter[0, 1] - inter[0, 0]) * (inter[0, 1] - inter[0, 2])) * inter[1, 1] + ((x - inter[0, 0]) * (x - inter[0, 1])) / ((inter[0, 2] - inter[0, 0]) * (inter[0, 2] - inter[0, 1])) * inter[1, 2]; Console.WriteLine("Значение функции: F({0:f2}) = {1:f2}", x, y); } static void Main(string[] args) { // исходная таблица const int n = 2, m = 11, p = 3; double[,] table = new double[n, m] {{5,10,15,20,25,30,40,50,60,70,80}, {11.7,12.0,13.0,13.6,14.0,14.7,15.8,16.9,17.8,18.7,19.4}}, inter = new double[n, p]; // вывод на консоль исходной таблицы Console.WriteLine("Исходные данные:"); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) Console.Write("{0:f2} ", table[i, j]); Console.WriteLine(); } // ввод аргумента Input: Console.WriteLine("Введите x:"); double x = double.Parse(Console.ReadLine()); // проверка if (x < table[0, 0] || x > table[0, m - 1]) { Console.WriteLine("x вышел за пределы области допустимых значений!"); goto Input; } else { getInterpolationValues(inter, table, x); solve(inter, x); } goto Input; } } }