Exemple #1
0
 public void bMPlus_Click(object sender, EventArgs e)
 {
     if (textBoxResult.Text != "")
     {
         try
         {
             mem = CalcClass.Add(mem, Convert.ToInt32(textBoxResult.Text));
         }
         catch (OverflowException ex)
         {
             MessageBox.Show("Слишком малое или слишком большое значение числа для int\nЧисла должны быть в пределах от -2147483648 до 2147483647");
         }
         catch (Exception ex)
         {
             MessageBox.Show("Невозможно преобразовать к числу!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }
Exemple #2
0
        /// <summary>
        /// Вычисление обратной польской записи
        /// </summary>
        /// <returns>результат вычислений или сообщение об ошибке</returns>
        public static string RunEstimate()
        {
            bool endwork = false;

            // этот цикл будет выполняться до тех пор , пока в массиве не остануться одни числа
            while (!endwork)
            {
                int  i     = 0;
                bool found = false;
                //этот цикл выполняется до тех пор, пока не будет найден первый оператор
                while (i < opz.Count && !found)
                {
                    found = true;
                    try
                    {
                        switch (opz[i].ToString())
                        {
                        case "+":
                        {
                            opz[i - 2] = CalcClass.Add(Convert.ToInt64(opz[i - 2]), Convert.ToInt64(opz[i - 1]));
                            opz.RemoveAt(i - 1);
                            opz.RemoveAt(i - 1);

                            break;
                        }

                        case "-":
                        {
                            opz[i - 2] = CalcClass.Sub(Convert.ToInt64(opz[i - 2]), Convert.ToInt64(opz[i - 1]));
                            opz.RemoveAt(i - 1);
                            opz.RemoveAt(i - 1);
                            break;
                        }

                        case "*":
                        {
                            opz[i - 2] = CalcClass.Mult(Convert.ToInt64(opz[i - 2]), Convert.ToInt64(opz[i - 1]));
                            opz.RemoveAt(i - 1);
                            opz.RemoveAt(i - 1);
                            break;
                        }

                        case "/":
                        {
                            opz[i - 2] = CalcClass.Div(Convert.ToInt64(opz[i - 2]), Convert.ToInt64(opz[i - 1]));
                            opz.RemoveAt(i - 1);
                            opz.RemoveAt(i - 1);
                            break;
                        }

                        case "mod":
                        {
                            opz[i - 2] = CalcClass.Mod(Convert.ToInt64(opz[i - 2]), Convert.ToInt64(opz[i - 1]));
                            opz.RemoveAt(i - 1);
                            opz.RemoveAt(i - 1);
                            break;
                        }

                        case "m":
                        {
                            opz[i - 1] = CalcClass.IABS(Convert.ToInt64(opz[i - 1]));
                            opz.RemoveAt(i);
                            break;
                        }

                        case "p":
                        {
                            opz[i - 1] = CalcClass.ABS(Convert.ToInt64(opz[i - 1]));
                            opz.RemoveAt(i);
                            break;
                        }

                        default:
                        {
                            found = false;
                            break;
                        }
                        }
                    }
                    catch (DivideByZeroException ex)
                    {
                        if (ShowMessage)
                        {
                            MessageBox.Show("Ошибка деления на 0");
                        }
                        Program.res = 9;
                        return("Error 09");
                    }
                    catch (OverflowException ex)
                    {
                        //Перехватили ошибку переполнения - выдаем сообщение
                        if (ShowMessage)
                        {
                            MessageBox.Show("Слишком малое или слишком большое значение числа для int\n Числа должны быть в пределах от -2147483648 до 2147483647");
                        }
                        Program.res = 6;
                        return("Error 06");
                    }
                    catch (ArgumentOutOfRangeException ex)
                    {
                        if (ShowMessage)
                        {
                            MessageBox.Show("Неверная синтаксическая конструкция входного выражения!");
                        }
                        Program.res = 3;
                        return("Error 03");
                    }
                    i++;
                }
                if (found == false && i == opz.Count)
                {
                    endwork = true;
                }
                string le = CalcClass.lastError;
                if (le != "")
                {
                    return(le);
                }
            }
            if (opz.Count != 1)
            {
                // в результате вычислений в массиве осталось несколько чисел - значит где-то ошибка в выражении, которую мы не отловили на более раннем этапе.
                if (ShowMessage)
                {
                    MessageBox.Show("Неверная синтаксическая конструкция входного выражения!");
                }
                Program.res = 3;
                return("Error 03");
            }
            else
            {
                return(opz[0].ToString());
            }
        }