Matematiksel Formül Ayrıştırıcısı, Equation and Formula Parser

Matematiksel Formül Ayrıştırıcısı, Equation and Formula Parser

Bu sayfada Ahmed Yasin Koçulu'nun hazırladığı "Matematiksel Formül Ayrıştırıcısı" nın kodlarını bulabilirsiniz.

void Main()
{
    string input = "2-(3*(2-7)+4+5)*7";
    System.Console.WriteLine(input + " = " + Calculate(input));
}

double Calculate(string input)
{
    var list = Regex.Split(input, "([+*-/()])").Where(x => !string.IsNullOrWhiteSpace(x));
    double result = 0;

    Stack<double> numStack = new Stack<double>();
    Stack<string> opStack = new Stack<string>();
    bool fetchNumber = true;
    foreach(var m in list)
    {
        if(m == "(")
        {
            opStack.Push(m);
        }
        else if(m == ")")
        {
            Walk(numStack, opStack, true);
        }
        else
        {
            if(fetchNumber)
            {
                double number = double.Parse(m.Trim());
                numStack.Push(number);
            }
            else
            {
                if(m == "+" || m == "-")
                    Walk(numStack, opStack);
                opStack.Push(m);
            }
            fetchNumber = !fetchNumber;
        }
    }
    Walk(numStack, opStack);
    result = numStack.Pop();
    return result;
}

void Walk(Stack<double> numStack, Stack<string> opStack, bool close = false)
{
    while(opStack.Count > 0 && numStack.Count > 1)
    {
        if(opStack.Peek() == "(")
        {
            if(close)
                opStack.Pop();
            break;
        }

        string operation = opStack.Pop();
        double d2 = numStack.Pop();
        double d1 = numStack.Pop();
        double z1 = 0;
        switch(operation)
        {
            case "+": z1 = d1 + d2; break;
            case "-": z1 = d1 - d2; break;
            case "*": z1 = d1 * d2; break;
            case "/": z1 = d1 / d2; break;
        }
        numStack.Push(z1);
    }
}


7 yıl 10 ay önce eklendi

Dolar yine neden yükseldi? Telefon Bankacılığı ile dolandırma denemesi Uzman hekim başına düşen nüfus miktarının illere göre değişimi 1128 akademisyenin imza verdiği bildiri hakkında siyasetçilerin açıklamaları Türkiye'nin Enerji'ye İhtiyacı ve Nükleer Enerji ile ilgili bilgiler Matematiksel Formül Ayrıştırıcısı, Equation and Formula Parser Atatürkçülüğün Türk Toplumu İçin Önemi Bulgaristan'da İsrailli turistleri taşıyan otobüste patlama: 7 ölü Bir ilk: Felçli el hareket ettirildi Pentagon'da F-35 skandalı Bu gezegenler elmas! Esad Erdoğan'ı Kürt kartıyla cezalandıracak Yıllar önce bir Milli Eğitim Bakanın Gerçek hikayesi Bir Bulgaristan Göçmeni'nin gözünden: 21. yy Türkiye'deki değişim Bulgaristan'la ticaret 10 milyara çıkarılacak İngiltere'de 18 yaşın altındakiler için Porno yasaklanıyor! Bulgaristan Göçmenlerine İkamet İzni, İkametgah Tezkeresi Affı Gates'ten Türkiye'ye Libya tepkisi Almanya nükleerle vedalaşıyor Bulgaristan'da Türklere Karşı Asimilasyonun Başlangıcı Borsayı 7 bin 600 yabancı kontrol ediyor! Osmanlının eşsiz arşivlerinin değersiz kağıt olarak Bulgaristan'a satılması
1
2
3
4
5
6
7