Пример #1
0
        //ט. כניסה: הפונקצייה מקבלת מחרוזת של ביטוי חשבוני
        //ט. יציאה: הפונקצייה מחזירה עץ בינארי המורכב משמאל לימין לפי הביטוי
        static BinTreeNode <string> BuildTreeOfParser(String str)
        {
            BinTreeNode <string> tr = null;

            for (int i = str.Length - 1; i > 0; i--)
            {
                if (((str[i] == '+' || str[i] == '-') && tr == null) && str[i - 1] != '*' && str[i - 1] != '/' && str[i - 1] != '^')
                {
                    if (str[i - 1] == '-' || str[i - 1] == '+')
                    {
                        tr = new BinTreeNode <string>(str[i - 1].ToString());
                        tr.SetRight(BuildTreeOfParser(str.Substring(i, str.Length - i)));
                        tr.SetLeft(BuildTreeOfParser(str.Substring(0, i - 1)));
                    }
                    else
                    {
                        tr = new BinTreeNode <string>(str[i].ToString());
                        tr.SetRight(BuildTreeOfParser(str.Substring(i + 1, str.Length - i - 1)));
                        tr.SetLeft(BuildTreeOfParser(str.Substring(0, i)));
                    }
                }
            }
            for (int i = str.Length - 1; i > 0; i--)
            {
                if ((str[i] == '*' || str[i] == '/') && tr == null)
                {
                    tr = new BinTreeNode <string>(str[i].ToString());
                    tr.SetRight(BuildTreeOfParser(str.Substring(i + 1, str.Length - i - 1)));
                    tr.SetLeft(BuildTreeOfParser(str.Substring(0, i)));
                }
            }
            for (int i = str.Length - 1; i > 0; i--)
            {
                if ((str[i] == '^') && tr == null)
                {
                    tr = new BinTreeNode <string>(str[i].ToString());
                    tr.SetRight(BuildTreeOfParser(str.Substring(i + 1, str.Length - i - 1)));
                    tr.SetLeft(BuildTreeOfParser(str.Substring(0, i)));
                }
            }

            if (tr == null)
            {
                tr = new BinTreeNode <string>(str);
            }
            return(tr);
        }
Пример #2
0
        //ט. כניסה: הפונקצייה מקבלת עץ בינארי
        //ט. יציאה: הפונקצייה מחשבת את ערך העץ לפי סדר פעולות חשבון ועוברת על העץ משמאל לימין
        static double CalculateTreeOfParser(BinTreeNode <string> t)
        {
            if (t != null)
            {
                if (t.GetInfo() == "+")
                {
                    return(CalculateTreeOfParser(t.GetLeft()) + CalculateTreeOfParser(t.GetRight()));
                }
                else
                if (t.GetInfo() == "-")
                {
                    return(CalculateTreeOfParser(t.GetLeft()) - CalculateTreeOfParser(t.GetRight()));
                }
                else
                if (t.GetInfo() == "*")
                {
                    return(CalculateTreeOfParser(t.GetLeft()) * CalculateTreeOfParser(t.GetRight()));
                }
                else
                if (t.GetInfo() == "/")
                {
                    return(CalculateTreeOfParser(t.GetLeft()) / CalculateTreeOfParser(t.GetRight()));
                }
                else
                if (t.GetInfo() == "^")
                {
                    return(Math.Pow(CalculateTreeOfParser(t.GetLeft()), CalculateTreeOfParser(t.GetRight())));
                }
            }
            int s;

            try
            {
                return(double.Parse(t.GetInfo()));
            }
            catch (Exception flow)
            {
                return(0);
            }
        }
Пример #3
0
 public void SetRight(BinTreeNode <T> tree)
 {
     this.right = tree;
 }
Пример #4
0
 public void SetLeft(BinTreeNode <T> tree)
 {
     this.left = tree;
 }
Пример #5
0
 public BinTreeNode(BinTreeNode <T> left, T x, BinTreeNode <T> right)
 {
     this.left  = left;
     this.info  = x;
     this.right = right;
 }
Пример #6
0
 public BinTreeNode(T x)
 {
     this.left  = null;
     this.info  = x;
     this.right = null;
 }