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


8 yıl 1 ay önce eklendi

Yabancı otomobil üreticileri ile hükümet arasında gizli bir savaş var Yapılan terbiyesizliklerin ardından yeni Hollanda bayrakları Bir Müslüman 'LGBTİ Onur Yürüyüşü' hakkında ne düşünmeli? Şehitlerimizin ailelerine yazdıkları mektuplar Sözde Ermeni Soykırımı hakkında maddeler halinde bilmeniz gerekenler Matematiksel Formül Ayrıştırıcısı, Equation and Formula Parser Doğurganlık hızı düştü nüfus durma noktasında Firefox işletim sistemini ilan etti İncirlik'e yeni bombanın faturası kime kesilecek? Bulgaristan Türkleri gerçekten Türk mü? Balkan topraklarına nereden, ne zaman gelmişlerdir? Askeri töreni izleyen Türk Büyükelçisi, Ankara'nın SSCB'ye saldırmasını önledi Oktay Sinanoğlu'ndan Türkiye ve Türkçe Hakıkında birkaç ders Bir Bulgaristan Göçmeni'nin gözünden: 21. yy Türkiye'deki değişim Türkan Eroğlu Mydream Koktely Organizasyonu: Tam bir Rezalet Ayağımıza kurşun sıktık turizmde fırsatı kaçırdık Türkiye Ekonomi: 1980 ile 2010 yılları arasında Türkiye'nin ekonomik büyümesi Bir zamanlar: İsrail'le "alçak koltuk" krizi olmuştu Okunması gereken kitaplar, okumadan ölmeyin! Son dönemde ülkemizde yapılan özelleştirme politikasının yararları Osmanlının eşsiz arşivlerinin değersiz kağıt olarak Bulgaristan'a satılması
1
2
3
4
5
6
7
8