Не могу разобраться с типом функции - C#

Формулировка задачи:

Как правильно задать функцию в С#, чтобы на выходе получилась математическая функция? Поясню.
static double parse_func(string func, double Xn, double Xk, double h)  
        {
            ...
 
            return (nenum == true) ? Math.Pow(kf * x, st) : free;
 
        }
Приводить весь код моей функции не буду, дабы не нагружать ненужной информацией, лишь скажу, что на выходе должна получиться математическая функция Math.Pow(kf * x, st), где х - это не число, а переменная, и потом, когда я буду вызывать эту функцию parse_func() в главной программе, можно было использовать её в цикле и нужно, чтобы вместо икса подставлялись значения и всё считалось, а сейчас у меня на выходе получается число
static void Main(string[] args)
{
     ...
 
     for (i = 0, x = Xn; x <= Xk; i++, x = x + h)
     {
           Console.Write("\n\n " + x + "    ");
           Console.Write(parse_func(f, Xn, Xk, h));
      }

Код к задаче: «Не могу разобраться с типом функции - C#»

textual
namespace method_setok
{
 
    delegate double name_delegate(string func, double Xn, double Xk, double h);
 
    class Program
    {
 
        static double parse_func(string func, double Xn, double Xk, double h) 
        {
            double x = Xn;
            int i, j, kf = 1, st = 1, ost, free = 0, n;
            string sKF = "", sST = ""; 
            bool minus, nenum = false;
 
            n = Convert.ToInt32((Xk - Xn) / h + 1);
            double[] arr = new double[n];
 
            if (func[0] == '-') minus = true; else minus = false;
            if (minus == true) j = 1; else j = 0;
 
            for (i = j; i < func.Length; i++)
            {
                if ((int)func[i] < 48 || (int)func[i] > 57) nenum = true;
            }
 
            if (nenum == true)
            {
                while ((int)func[j] >= 48 && (int)func[j] <= 57)
                {
                    sKF = sKF + func[j];
                    j++;
                }
 
                if (sKF.Length > 0) kf = Convert.ToInt32(sKF);
                if (minus == true) kf = -kf;
                ost = func.Length - sKF.Length - Convert.ToInt32(minus) - 1;
                if (ost != 0)
                {    
                    for (i = func.Length - ost + 1; i < func.Length; i++) sST = sST + func[i];
                    if (sST.Length > 0) st = Convert.ToInt32(sST);
                }
            }
            else
            {
                free = Convert.ToInt32(func);
                kf = 0;
                st = 0;
            }
 
 
            return (nenum == true) ? Math.Pow(kf * x, st) : free;
 
        }
 
        static void Main(string[] args)
        {
            string p, q, f;
            double Xn, Xk, h, x;
            int i;
            
            Console.Write("\n Данная программа найдёт решение дифференциального уравнения вида \n y\" + p(x)y' + q(x)y = f(x) методом сеток.\n\n Введите функцию p(x) = ");
            p = Console.ReadLine();
            Console.Write("\n Введите функцию q(x) = ");
            q = Console.ReadLine();
            Console.Write("\n Введите функцию f(x) = ");
            f = Console.ReadLine();
 
            Console.Write("\n Введите начало промежутка Xn = ");
            Xn = Convert.ToDouble(Console.ReadLine());
            Console.Write("\n Введите конец промежутка Xk = ");
            Xk = Convert.ToDouble(Console.ReadLine());
            Console.Write("\n Введите шаг промежутка h = ");
            h = Convert.ToDouble(Console.ReadLine());
 
            name_delegate xz = new name_delegate(parse_func);
            double P = xz(p, Xn, Xk, h);
            double Q = xz(q, Xn, Xk, h);
            double F = xz(f, Xn, Xk, h);
 
            for (i = 0, x = Xn; x <= Xk; i++, x = x + h)
            {
                Console.Write("\n\n " + x + "    ");
                Console.Write(P + "    " + Q + "    " + F);
            }

6   голосов, оценка 3.833 из 5


СОХРАНИТЬ ССЫЛКУ