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

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


5 yıl 2 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 İğne büyüklüğündeki kameralar ameliyatları kolaylaştıracak Rumlar Türk elektriğini tartışıyor Türkçe'nin Matematiği, Ahmet Okar Bulgaristan'da Türk ata sporu at yarışları ve güreşler yaşatılıyor İran'a karşı Ege'de füze kalkanı! Birand'ın Doğruları Dobra Dobra Açıklamasını Alkışlıyorum Okunması gereken kitaplar, okumadan ölmeyin! Cari Açık Nedir? Ülkemizce eğitim dili TÜRKÇE olmalıdır; çünkü
1
2
3
4
5
6
7