Exemple #1
0
        public void TestMethod6()
        {
            string  x        = "3div2>3*1>4-1";
            string  expected = "False";
            Parser2 pasre    = new Parser2();
            Result  res      = pasre.Evaluate0(x);
            string  actual   = res.GetValue();

            Assert.AreEqual(expected, actual);
        }
Exemple #2
0
        public void TestMethod1()
        {
            string  x        = "min(2+5div2,4)=(45-37)/2";
            string  expected = "True";
            Parser2 pasre    = new Parser2();
            Result  res      = pasre.Evaluate0(x);
            string  actual   = res.GetValue();

            Assert.AreEqual(expected, actual);
        }
Exemple #3
0
        public void TestMethod4()
        {
            string  x        = "min(34,12+2)>max(32,12+2)";
            string  expected = "False";
            Parser2 pasre    = new Parser2();
            Result  res      = pasre.Evaluate0(x);
            string  actual   = res.GetValue();

            Assert.AreEqual(expected, actual);
        }
Exemple #4
0
        public void AddNewValue(string expression, int r, int c, bool k)
        {
            int    Count = 0;
            Result result1;

            table[r, c].exp = expression;

            int h = 0;

            // expression.Replace(" ","");
            //MessageBox.Show(expression);
            if (expression != null)
            {
                while (h < expression.Length)
                {
                    string str = null;
                    int    t2, t1 = (int)expression[h];
                    str += expression[h];
                    h++;

                    if (t1 > 64 && t1 < 91 && h < expression.Length)
                    {
                        str += expression[h];
                        t2   = (int)expression[h] - 48;
                        h++;
                        if (h < expression.Length && expression[h] != ' ' && expression[h] > 47 && expression[h] < 58)
                        {
                            str += expression[h];
                            t2  *= 10;
                            t2  += (int)expression[h] - 48;
                        }
                        if (k == true)
                        {
                            table[t2, t1 - 65].depends.Add(table[r, c].getName(c, r));

                            table[r, c].dependend.Add(table[t2, t1 - 65]);
                        }
                        if (circle(table[r, c], r, c, r, c) == false)
                        {
                            table[t2, t1 - 65].depends.RemoveAt(table[t2, t1 - 65].depends.Count - 1);
                            MessageBox.Show("Неможливо застосувати формулу, клітинка вказує сама на себе");
                            Table.Rows[Table.CurrentCell.RowIndex].Cells[Table.CurrentCell.ColumnIndex].Value = "";
                            table[r, c].value = "0";
                            table[r, c].exp   = null;
                            AddNewValue(table[r, c].exp, r, c, true);
                            break;
                        }
                        expression = expression.Replace(str, table[t2, t1 - 65].value);
                        Count++;
                    }
                }
            }
            if (circle(table[r, c], r, c, r, c) == true)
            {
                if (expression.Contains(">") || expression.Contains("<") || expression.Contains("="))
                {
                    result1 = parser2.Evaluate0(expression);
                }
                else
                {
                    result1 = parser2.Evaluate(expression);
                }
                if (result1.Except())
                {
                    table[r, c].value = result1.GetValue();
                    // MessageBox.Show(table[r, c].value);


                    Table.Rows[r].Cells[c].Value = result1.GetValue();    ///////////
                    update(table[r, c], r, c);
                }
                else
                {
                    Table.Rows[r].Cells[c].Value = result1.GetValue();
                }
            }
            else
            {
                MessageBox.Show("Неможливо застосувати формулу, клітинка вказує сама на себе");
                Table.Rows[Table.CurrentCell.RowIndex].Cells[Table.CurrentCell.ColumnIndex].Value = "";
            }
        }