[英]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.