using System using System Collections Generic using System Linq using

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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] {{27,327,402,477,627,777,927,1077,1227,1527,1827},
{90,75,68,64,60,50,40,28,15,4,3}},
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;
}
}
}