Example #1
0
        private async void ButtonCalculate_Click(object sender, EventArgs e)
        {
            try
            {
                if (comboBoxOperation.SelectedValue.ToString() != "China theoreme")
                {
                    if (string.IsNullOrEmpty(textBoxFirstOperand.Text) || string.IsNullOrEmpty(textBoxSecondOperand.Text))
                    {
                        if (comboBoxOperation.SelectedValue.ToString() != "Sqrt")
                        {
                            throw new ArgumentNullException("Enter all operands!");
                        }
                    }

                    var firstOperand  = textBoxFirstOperand.Text;
                    var secondOperand = textBoxSecondOperand.Text;
                    if (comboBoxOperation.SelectedValue.ToString() == "Sqrt")
                    {
                        secondOperand = "0";
                    }

                    Number num1 = new Number(firstOperand);
                    Number num2 = new Number(secondOperand);

                    Number module = new Number();
                    if (checkBoxUseModule.Checked)
                    {
                        module = new Number(textBoxModule.Text);
                    }

                    labelRest.Text = "0";

                    string resultString = "";
                    bool   isLogical    = false;
                    Number result       = new Number();
                    timer.Interval = 10;
                    timer.Start();

                    switch (comboBoxOperation.Text)
                    {
                    case "Add":
                        if (checkBoxUseModule.Checked)
                        {
                            result = await Number.ModuleAsync(Number.Add(num1, num2), module);
                        }
                        else
                        {
                            result = await Number.AddAsync(num1, num2);
                        }
                        break;

                    case "Subtract":
                        if (checkBoxUseModule.Checked)
                        {
                            result = await Number.ModuleAsync(Number.Subtract(num1, num2), module);
                        }
                        else
                        {
                            result = await Number.SubtractAsync(num1, num2);
                        }
                        break;

                    case "Multiply":
                        if (checkBoxUseModule.Checked)
                        {
                            result = await Number.ModuleAsync(Number.Multiply(num1, num2), module);
                        }
                        else
                        {
                            result = await Number.MultiplyAsync(num1, num2);
                        }
                        break;

                    case "Divide":
                        var res = await Number.DivideAsync(num1, num2);

                        result         = res.result;
                        labelRest.Text = res.rest.ToString();
                        break;

                    case "Power":
                        if (checkBoxUseModule.Checked)
                        {
                            result = await Number.ExponentWithModuleAsync(num1, num2, module);
                        }
                        else
                        {
                            result = await Number.ExponentAsync(num1, num2);
                        }
                        break;

                    case "Module":
                        if (checkBoxUseModule.Checked)
                        {
                            result = await Number.ModuleAsync(Number.Module(num1, num2), module);
                        }
                        else
                        {
                            result = await Number.ModuleAsync(num1, num2);
                        }
                        break;

                    case "Sqrt":
                        if (checkBoxUseModule.Checked)
                        {
                            result = await Number.ModuleAsync(Number.Sqrt(num1), module);
                        }
                        else
                        {
                            result = Number.Sqrt(num1);
                        }
                        break;

                    case "Less":
                        isLogical    = true;
                        resultString = (num1 < num2).ToString();
                        break;

                    case "Great":
                        isLogical    = true;
                        resultString = (num1 > num2).ToString();
                        break;

                    case "Less or Equal":
                        isLogical    = true;
                        resultString = (num1 <= num2).ToString();
                        break;

                    case "Great or Equal":
                        isLogical    = true;
                        resultString = (num1 >= num2).ToString();
                        break;

                    case "Equal":
                        isLogical    = true;
                        resultString = (num1 == num2).ToString();
                        break;

                    case "Not Equal":
                        isLogical    = true;
                        resultString = (num1 != num2).ToString();
                        break;
                    }
                    timer.Stop();
                    if (!isLogical)
                    {
                        resultString = result.ToString();
                    }

                    using (StreamWriter writer = new StreamWriter(@"C:\Users\Evgentus\Desktop\result.txt", false))
                    {
                        await writer.WriteLineAsync(resultString);  // асинхронная запись в файл
                    }
                    labelResult.Text = resultString;
                }

                else
                {
                    List <StructureForModEquations> equations = GetAllEquations();
                    var    result       = Number.ChinaTheoreme(equations);
                    string resultString = result.ToString();
                    using (StreamWriter writer = new StreamWriter(@"C:\Users\Evgentus\Desktop\result.txt", false))
                    {
                        await writer.WriteLineAsync(resultString);  // асинхронная запись в файл
                    }
                    labelResult.Text = resultString;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }