簡體   English   中英

用戶如何在C#中輸入功能

[英]How can user input function in C#

我已經在C#控制台應用程序中制作了二等分方法程序。 二等分方法有效,但對於已在代碼中編寫的功能。 我想編輯程序,用戶可以輸入要用於二等分法的功能。 例如, Console.ReadLine()輸入“ x ^ 2 + x-2 ”,然后我希望在返回以下代碼后自動將其寫入。

        static double Function(double x)
    {
        return x*x - 2;
    } //this is Function which I used in code.

這是整個代碼。 (正如我提到的那樣,它適用於以靜態double Function(double x)部分編寫的函數

using System;

namespace MPI
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            // in [a,b]
            double inPoc = 0; //a
            double inKraj = 0; //b
            double sredina = 0;
            double tacnost = 0;



        Start:
            int i = 0; //brojac


            Console.Write("Unesite početak intervala: ");
            inPoc = Convert.ToDouble(Console.ReadLine());
            Console.Write("Unesite kraj intervala: ");
            inKraj = Convert.ToDouble(Console.ReadLine());
            Console.Write("Unesite tacnost: ");
            tacnost = Convert.ToDouble(Console.ReadLine());

            sredina = (inPoc + inKraj) / 2;

            if (Function(inPoc) * Function(inKraj) < 0)
            {


                while ((Math.Abs(inPoc - inKraj)) > tacnost)
                {
                    sredina = (inPoc + inKraj) / 2;

                    Console.WriteLine("trenutno X: " + sredina);
                    Console.WriteLine("Funkcija za trenutno x ima vrednost: " + Function(sredina));
                    Console.WriteLine("");
                    i++;


                    if (Function(sredina) < 0)
                    {
                        inPoc = sredina;
                    }
                    else
                    {
                        inKraj = sredina;
                    }
                }
                Console.WriteLine("X: " + sredina);
                Console.WriteLine("Broj izvrsenih koraka je " + i);
            }

            else
            {
                Console.WriteLine("Krajevi intervala funkcije su istog znaka");
                Console.WriteLine();

            }


            goto Start; //sluzi da vrati program na pocetak kako bi ga opet koristili

        }


        static double Function(double x)
        {
            return x*x - 2; //primer funkcije
        }
    }
}

看起來這個問題問的差不多。

有兩種解決方案可以做到這一點:

解決方案1-只需使用Flee

文檔中復制粘貼:

ExpressionContext context = new ExpressionContext();
VariableCollection variables = context.Variables;
variables.Add("a", 100);
variables.Add("b", 1);
variables.Add("c", 24);

IGenericExpression<bool> e = context.CompileGeneric<bool>("(a = 100 OR b > 0) AND c <> 2");
bool result = e.Evaluate();

因此,您可以執行相同的操作,只需更改輸入/輸出類型,然后將輸入行放入CompileGeneric

解決方案2-手動解析輸入字符串。

因此,問題可以分為兩個部分:

  • 如何將輸入字符串解析為表達式樹
  • 如何執行這棵樹。

對於第一項-請檢查反向拋光符號 它允許構造計算堆棧。

接下來,您將能夠計算表達式樹。 每個操作數(修剪后)將具有變量或整數常量。 因此,只需將變量替換為實際值,然后將字符串解析為整數即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM