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