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
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace task3 {
class Program {
/*
* Функция print выполняет вывод значений массива a типа double в консоль
* */
public static void print(double[] a) {
for (int i = 0; i < a.Length; i++) {
Console.Write("{0}\t", a[i]);
}
Console.Write("\n");
}
/*
* Функция interpolation выполняет алгоритм линейной интерполяции заданной функции
* x0 - параметр в котором храниться введённое в консоли значение относительно которого будет вычисляться значение функции
* y0 - переменная в которой будет сохраняться вычисленное значение функции после интерполяции
* x и y - исходные массивы значений аргументов и функции
* value - переменная типа bool, которая используется в условии вывода сообщения пользователю в зависимости от результата выполнения функции
* */
public static void interpolation(double x0, double y0, double[] x, double[] y, bool value) {
for (int i = 0; i < x.Length; i++) {
//ищем первый элемент исходного массива аргументов, который будет выполнять условие
//для определения интервала для заданного пользователем значения x0
if (x0 < x[i]) {
//вычисляем значение функции
y0 = y[i - 1] + ((y[i] - y[i - 1]) / (x[i] - x[i - 1])) * (x0 - x[i - 1]);
value = true;
break;
}
}
//Условие вывода сообщения с результатом выполнения интерполирования
if (value == true) {
Console.WriteLine("\nПри аргументе x0 = {0:f2} функция принимает значение F(x) = {1:f3}", x0, y0);
}
else {
Console.WriteLine("\nВведенное значение аргумента x0 = {0} лежит вне границ функции F(x)", x0);
}
}
/*
Приложение В2
* Функция FindMax выполняет поиск максимального значения массива аргументов для определения допустимого интервала введенного значения x0
* a - массив поиска
* max - переменная, в которой храниться найденное значение
* */
public static double FindMax(double[] a, double max) {
max = a[0];
for (int i = 0; i < a.Length; i++) {
if (max < a[i])
max = a[i];
}
return max;
}
/*
* Функция FindMin аналогичная функции FindMax, только здесь выполняется поиск минимального значения
* */
public static double FindMin(double[] a, double min) {
min = a[0];
for (int i = 0; i < a.Length; i++) {
if (min > a[i])
min = a[i];
}
return min;
}
static void Main(string[] args) {
//Табличные значения аргументов и значений функции
double[] x = new double[] { 0, 5, 10, 15, 20, 25, 30, 40, 50, 60, 70 };
double[] y = new double[] { 40.0, 22.5, 14.6, 10.2, 7.5, 6.0, 5.0, 3.8, 3.0, 2.7, 2.7 };
//вывод в консоль массивов x и y
print(x);
print(y);
// переменная infinity необходима для организации бесконечно цикла работы программы
bool infinity = true;
string user_command = ""; // в данную переменную запоминается введенная команда в консоли пользователем
//организация бесконечно цикла выполнения программы выход из которой происходит при вводе определенной команды
while (infinity) {
System.Console.Write("\nПожалуйста, введите одну из команд:\nstart -начало выполнения программы;\nexit - выход из программы;\n\n>>");
user_command = System.Console.ReadLine();
switch (user_command) // определение введенной команды
{
//условия работы программы при вводе команды start
case "start": {
double max = 0, min = 0;
max = FindMax(x, max);
min = FindMin(x, min);
Console.Write("Введите аргумент x0 лежащий в отрезке [{0}, {1}]\n x0 = ", min, max);
double x0 = double.Parse(Console.ReadLine()); // считывание значения x0 введенного пользователем в консоли
double y0 = 0;
bool value = false;
Console.Write("\n");
interpolation(x0, y0, x, y, value); // выполнение функции
break;
}
//условия работы программы при вводе команды exit
case "exit": {
infinity = false;
break;
}
}
}
}
}
}