/// <summary> /// Проводит вычисления в автоматическом режиме /// </summary> /// <param name="expression">Выражение для подсчета</param> /// <param name="deg">Режим меры угла: deg=0, [rad=1], grad=2</param> /// <returns>Результат вычислений</returns> public static Double CalcToResult(string expression, byte deg = 1) { List <Token> RPN = Arithmetic.GetRPN(expression); return(Arithmetic.Calculate(ref RPN, deg)); }
/// <summary> /// Преобразование выражения в буквенный вид, создание словаря матричных строк /// </summary> /// <param name="expression">Выражение для преобразования</param> /// <param name="variables">Словарь для матриц(Если в матрице содержится математическое выражение - оно будет решено)</param> /// <returns>Возвращает true, если завершилось успешно</returns> public static bool GetMatrixes(ref string expression, ref Dictionary <string, string> variables) { if (CheckBrackets(ref expression)) { char smb = 'A'; string expression_copy = expression; int fpos = -1; int spos = -1; for (int i = 0; i < expression.Length; i++) { if (expression[i] == '{') { if (fpos != -1) { return(false); } else { fpos = i; } } if (expression[i] == '}') { if (fpos == -1) { return(false); } else { spos = i; } } if (fpos != -1 && spos != -1) { if (smb <= 'N') { string elem = expression.Substring(fpos + 1, spos - fpos - 1); if (expression_copy.Contains(elem)) { expression_copy = expression_copy.Replace("{" + elem + "}", smb.ToString()); variables[smb.ToString()] = "{" + elem + "}"; smb++; } fpos = -1; spos = -1; } else { return(false); } } } expression = expression_copy; //Вычисление значений в ячейках матриц for (int k = 0; k < variables.Count; k++) { string[,] matr = RetMatrix(variables.ElementAt(k).Value); for (int i = 0; i < matr.GetLength(0); i++) { for (int j = 0; j < matr.GetLength(1); j++) { matr[i, j] = Convert.ToString(Arithmetic.CalcToResult(matr[i, j])); } } variables[variables.ElementAt(k).Key] = RetLine(matr); } return(true); } else { return(false); } }
public static Double CalcToResult(string expression, Dictionary <string, string> uservars, byte deg = 1) { List <Token> RPN = Arithmetic.GetRPN(expression, uservars); return(Arithmetic.Calculate(ref RPN, deg)); }
public static void Main(string[] args) { Console.WriteLine(Arithmetic.add(5, 4)); Console.WriteLine(Area.areaOfRectangle(8, 7)); Console.WriteLine(Trigonometric.findHypotenuse(3, 4)); }
// Начать вычисление private void buttonEnter_Click(object sender, EventArgs e) { if (buttonEnter.Text == "WA=") { if (ScreenBox.Text.Length > 200 && (DialogResult.Yes != MessageBox.Show("Похоже, у вас слишком длинный.. запрос. Возможно, WolframAlpha обрежет его и вычисления будут неверны. Продолжить?", "Превышена длина запроса", MessageBoxButtons.YesNo, MessageBoxIcon.Question))) { return; } string inpstr = ScreenBox.Text; String WolframAlphaApplicationID = Properties.Settings.Default.WA_AppKey; if (WolframAlphaApplicationID == "") { MessageBox.Show("Неверно задан ключ для WolframAPI. Введите действительный ключ.", "Не задан ключ приложения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } if (Properties.Settings.Default.WA_RespSend >= Properties.Settings.Default.WA_RespLimit) { MessageBox.Show("Превышен месячный лимит запросов. Увеличить лимит или отключить контроль можно в настройках.", "Превышен лимит запросов", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } ScreenBox.Clear(); WolframResult WR = new WolframResult(); WR.ShowAndCalculate(inpstr, WolframAlphaApplicationID); if (HistoryBox1.Text == "") { HistoryBox1.Text += "WAQUERY~" + inpstr; } else { HistoryBox1.Text += "\r\n" + inpstr; } } else { string inpstr = ScreenBox.Text; if (inpstr.Contains("X") || inpstr.Contains("Y")) { buttonDigit_Click(sender, e); } else if (inpstr.StartsWith("set")) { if (inpstr.Contains("=")) { KeyValuePair <string, string> parsedres = new KeyValuePair <string, string>(); if (parseVariable(inpstr, ref parsedres)) { if (savedVariables == null) { savedVariables = new Dictionary <string, string>(); } if (savedVariables.Keys.Contains(parsedres.Key)) { if (DialogResult.No == MessageBox.Show("Переменная с таким именем уже существует. Перезаписать?", "Замена", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { return; } } ScreenBox.Clear(); List <Token> RPN1 = Arithmetic.GetRPN(parsedres.Value, savedVariables); string result = savedVariables[parsedres.Key] = PostProcess(Arithmetic.Calculate(ref RPN1, gradusmode)); if (RPN1 != null) { RPN1.Clear(); } savedVariables[parsedres.Key] = result; if (HistoryBox1.Text == "") { HistoryBox1.Text += parsedres.Key + "=" + result + ((parsedres.Value == result) ? "" : " [" + parsedres.Value + "]"); } else { HistoryBox1.Text += "\r\n" + parsedres.Key + "=" + result + ((parsedres.Value == result) ? "" : " [" + parsedres.Value + "]"); } } } else { buttonDigit_Click(sender, e); } } else { string heststr = inpstr; PreProcess(ref inpstr); string result = ""; switch (panelmode) { case "norm": case "engen": default: //Вычисление на обычной или инженерной панели //List<Token> RPN1 = Arithmetic.GetRPN(inpstr); //result = Convert.ToString(Arithmetic.Calculate(ref RPN1, gradusmode)); //result = PostProcess(Convert.ToDouble(result)); //if (RPN1 != null) RPN1.Clear(); List <Token> RPN1 = Arithmetic.GetRPN(inpstr, savedVariables); result = Convert.ToString(Arithmetic.Calculate(ref RPN1, gradusmode)); result = PostProcess(Convert.ToDouble(result)); if (RPN1 != null) { RPN1.Clear(); } break; case "prog": //Вычисление на програмной панели if (radioLogicExpr.Checked) { List <Token> RPN2 = BinaryArithmetic.GetRPN(inpstr); Dictionary <string, bool> variables = BinaryArithmetic.GetVariables(RPN2); int count = (int)Math.Pow(2, variables.Count); result = "{["; for (int i = 0; i < count; i++) { BinaryArithmetic.AddVariableData(i + count, variables); result += (BinaryArithmetic.Calculate(RPN2, variables) ? "1|" : "0|"); } result = result.Substring(0, result.Length - 1) + "]}"; } else { List <Token> RPN2 = Arithmetic.GetRPN(BinaryArithmetic.ConvertStringToSS(inpstr, SSmode, 10)); result = Convert.ToString(Arithmetic.Calculate(ref RPN2, gradusmode)); result = BinaryArithmetic.ConvertStringToSS(result, 10, SSmode); if (RPN2 != null) { RPN2.Clear(); } } break; case "matr": //Вычисление на матричной панели //Dictionary<string, string> mas = new Dictionary<string, string>(); //MatrixArithmetic.GetMatrixes(ref inpstr, ref mas); List <Token> RPN3 = MatrixArithmetic.GetRPN(inpstr); //result = MatrixArithmetic.Calculate(RPN3, mas); result = MatrixArithmetic.Calculate(RPN3, savedVariables); if (RPN3 != null) { RPN3.Clear(); } //mas.Clear(); break; } heststr += "=" + result; ScreenBox.Text = result; if (HistoryBox1.Text == "") { HistoryBox1.Text += heststr; } else { HistoryBox1.Text += "\r\n" + heststr; } } } }
static void Main(string[] args) { Menu.StartMenu(); string valg = Console.ReadLine(); do { if (valg == "1") { Arithmetic caclulator = new Arithmetic(); Console.WriteLine("Valg hvilken to tal du ønsker at plusse"); Console.WriteLine("Valg dit første nummer"); double num1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Valg dit andet nummer"); double num2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(caclulator.Add(num1, num2)); System.Threading.Thread.Sleep(5000); Console.Clear(); Menu.StartMenu(); valg = Console.ReadLine(); } if (valg == "2") { Arithmetic caclulator = new Arithmetic(); Console.WriteLine("Valg hvilken to tal du ønsker at trække fra hinanden"); Console.WriteLine("Valg dit første nummer"); double num1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Valg dit andet nummer"); double num2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(caclulator.Substract(num1, num2)); System.Threading.Thread.Sleep(5000); Console.Clear(); Menu.StartMenu(); valg = Console.ReadLine(); } if (valg == "3") { Arithmetic caclulator = new Arithmetic(); Console.WriteLine("Valg hvilken to tal du ønsker at trække fra hinanden"); Console.WriteLine("Valg dit første nummer"); double num1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Valg dit andet nummer"); double num2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(caclulator.Multiply(num1, num2)); System.Threading.Thread.Sleep(5000); Console.Clear(); Menu.StartMenu(); valg = Console.ReadLine(); } if (valg == "4") { Console.Clear(); Arithmetic caclulator = new Arithmetic(); Console.WriteLine("Valg hvilken to tal du ønsker at divideré fra hinanden"); Console.WriteLine("Valg dit første nummer"); double num1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Valg dit andet nummer"); double num2 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(caclulator.Divide(num1, num2)); System.Threading.Thread.Sleep(5000); Console.Clear(); Menu.StartMenu(); valg = Console.ReadLine(); } if (valg == "5") { Geometry geometry = new Geometry(); Console.WriteLine("Du ønsker information omkring din trekant. Indtast siderne a, b og c"); Console.WriteLine("Indtast a:"); double a = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Indtast b:"); double b = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Indtast c:"); double c = Convert.ToDouble(Console.ReadLine()); //Kan bruges til udvide med vinkle beregning. //Console.WriteLine("Indtast siden A:"); //double A = Convert.ToDouble(Console.ReadLine()); //Console.WriteLine("Indtast siden B:"); //double B = Convert.ToDouble(Console.ReadLine()); //Console.WriteLine("Indtast siden C:"); //double C = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(Calculator.Geometry.Triangle(a, b, c)); System.Threading.Thread.Sleep(5000); Console.Clear(); Menu.StartMenu(); valg = Console.ReadLine(); } if (valg == "6") { Geometry geometry = new Geometry(); Console.WriteLine("Du ønsker information omkring din firkant. Indtast siderne a, b, c og d"); Console.WriteLine("Indtast a:"); double a = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Indtast b:"); double b = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Indtast c:"); double c = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Indtast d:"); double d = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(Calculator.Geometry.Sqaure(a, b, c, d)); System.Threading.Thread.Sleep(5000); Console.Clear(); Menu.StartMenu(); valg = Console.ReadLine(); } } while (valg != "9"); Console.WriteLine("Du har valgt at lukke lommeregneren"); }
public MainWindow() { aobj = new Arithmetic(); InitializeComponent(); }