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;
}
}
}
}
}
}