示例#1
0
        /// <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));
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        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));
        }
示例#4
0
 public static void Main(string[] args)
 {
     Console.WriteLine(Arithmetic.add(5, 4));
     Console.WriteLine(Area.areaOfRectangle(8, 7));
     Console.WriteLine(Trigonometric.findHypotenuse(3, 4));
 }
示例#5
0
        // Начать вычисление
        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;
                    }
                }
            }
        }
示例#6
0
        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");
        }
示例#7
0
 public MainWindow()
 {
     aobj = new Arithmetic();
     InitializeComponent();
 }