示例#1
0
        public double TinhBieuThuc(string posfix)
        {
            string[] tt = posfix.Split(' ');
            var      kq = new StackNode <string>();

            for (int i = 0; i < tt.Length - 1; i++)
            {
                if (!LaToanTu(tt[i][0]))
                {
                    kq.Push(tt[i]);
                }
                else
                {
                    string a = kq.Top();
                    kq.Pop();
                    string b = kq.Top();
                    kq.Pop();
                    kq.Push(TinhToan(tt[i], b, a));
                }
            }
            double ketqua = Convert.ToDouble(kq.Top());

            return(ketqua);
        }
示例#2
0
        public string InfixtoPosfix(string nhap)
        {
            var    a           = new StackNode <string>();
            var    ketQuahauto = "";
            string tk;

            nhap = nhap.Trim(); //Cắt hết khoảng trắng ở đầu và cuối chuỗi
            var s = "";

            for (int i = 0; i < nhap.Length; i++)
            {
                if (nhap[i] != ' ')
                {
                    s += nhap[i];
                }
            }

            var demMoNgoac   = 0;
            var demDongNgoac = 0;
            var demToanTu    = 0;
            var demToanHang  = 0;

            for (int i = 0; i < s.Length;)
            {
                GetTokken(s, out tk, ref i);
                if (tk[0] == '(')
                {
                    demMoNgoac++;
                }
                else if (tk[0] == ')')
                {
                    demDongNgoac++;
                }
                else if (LaToanTu(tk[0]))
                {
                    demToanTu++;
                }
                else
                {
                    demToanHang++;
                }
            }
            if (demDongNgoac == demMoNgoac && demToanHang - 1 == demToanTu)
            {
                for (int i = 0; i < s.Length;)
                {
                    GetTokken(s, out tk, ref i);
                    if (!LaToanTu(tk[0]))
                    {
                        ketQuahauto += tk + " ";
                    }
                    else
                    {
                        if (tk[0] == '(')
                        {
                            a.Push(tk);
                        }
                        else if (tk[0] == ')')
                        {
                            while (a.Top()[0] != '(')
                            {
                                ketQuahauto += a.Top() + " ";
                                a.Pop();
                            }
                            if (a.Top()[0] == '(')
                            {
                                a.Pop();
                            }
                        }
                        else
                        {
                            if (!a.IsEmpty() && DoUuTien(a.Top()[0]) < DoUuTien(tk[0]))
                            {
                                a.Push(tk);
                                continue;
                            }
                            else if (a.IsEmpty())
                            {
                                a.Push(tk);
                                continue;
                            }
                            while (!a.IsEmpty() && DoUuTien(a.Top()[0]) >= DoUuTien(tk[0]))
                            {
                                ketQuahauto += a.Top() + " ";
                                a.Pop();
                            }
                            a.Push(tk);
                        }
                    }
                }
                while (!a.IsEmpty())
                {
                    if (a.Top()[0] == '(')
                    {
                        a.Pop();
                        continue;
                    }
                    ketQuahauto += a.Top() + " ";
                    a.Pop();
                }
                return(ketQuahauto);
            }
            else
            {
                return("\nBieu thuc sai");
            }
        }