2 Схемы алгоритмов
На рисунках представлены схемы алгоритмов работы текста программы (рис. 1-12).
Рисунок 1 – Схема алгоритма функции ввода чисел
Рисунок 2 – Схема алгоритма функции обработки события нажатия кнопки «,»
Рисунок 3 – Схема алгоритма функции обработки события нажатия кнопки «BackSpace»
Рисунок 4 – Схема алгоритма функции проверки ввода
Рисунок 5 – Схема алгоритма функции обработки события нажатия кнопки «CE»
Рисунок 6 – Схема алгоритма функции обработки события нажатия кнопки «C»
Рисунок 7 – Схема алгоритма функции ввода оператора
Рисунок 8 – Схема алгоритма функции обработки события нажатия кнопки «+/-»
Рисунок 9 – Схема алгоритма функции обработки события нажатия кнопки «sqrt»
Рисунок 10 – Схема алгоритма функции обработки события нажатия кнопки «1/x»
Рисунок 11 – Схема алгоритма функции обработки события нажатия кнопки «%»
Рисунок 12 – Схема алгоритма функции подсчета результата
3 Текст программы
Ниже представлен текст программы, где были прописаны условия и функции работы калькулятора.
#pragma endregion
Double result, firstValue, secondValue, respro;
String^ operation = "";
bool isOperationButtonClicked;
bool isSimpleOperation = true;
int resultButtonCount = 0;
double a;
//Ввод цифр
private: System::Void InputNumbers(System::Object^ sender, System::EventArgs^ e)
{
Button^ Numbers = safe_cast<Button^>(sender);
if (isOperationButtonClicked)
{
this->lblError->Text = L"";
ResultTextBox->Text = "";
isOperationButtonClicked = false;
}
if (ResultTextBox->Text == "0")
{
this->lblError->Text = L"";
ResultTextBox->Text = Numbers->Text;
}
else
{
this->lblError->Text = L"";
ResultTextBox->Text = ResultTextBox->Text + Numbers->Text;
}
if (CurrentValue->Text == "")
{
a = System::Double::Parse(ResultTextBox->Text);
}
}
private: System::Void btn0_Click(System::Object^ sender, System::EventArgs^ e) {}
// Обработка запятой
private: System::Void btnComma_Click(System::Object^ sender, System::EventArgs^ e)
{
if (!ResultTextBox->Text->Contains(","))
{
ResultTextBox->Text = ResultTextBox->Text + ",";
}
if (isOperationButtonClicked)
{
ResultTextBox->Text = "0,";
isOperationButtonClicked = false;
}
}
// Обработка кнопки "+/-"
private: System::Void btnPlusMinus_Click(System::Object^sender,System::EventArgs^ e) {
if (ResultTextBox->Text == "0")
{
this->ResultTextBox->Text = "-";
}
else if (ResultTextBox->Text->Contains("-"))
{
ResultTextBox->Text = ResultTextBox->Text->Remove(0, 1);
}
else
{
ResultTextBox->Text = "-" + ResultTextBox->Text;
}
}
private: System::Void btnAdd_Click(System::Object^ sender, System::EventArgs^ e) {}
// Обработка кнопки "="
private: System::Void btnResult_Click(System::Object^ sender, System::EventArgs^ e) {
if (resultButtonCount == 0)
{
firstValue = Double::Parse(ResultTextBox->Text);
}
CurrentValue->Text = System::Convert::ToString(result + " " + operation + " " + firstValue + " =");
if (operation == "+")
{
ResultTextBox->Text = System::Convert::ToString(result + firstValue);
}
if (operation == "-")
{
ResultTextBox->Text = System::Convert::ToString(result - firstValue);
}
if (operation == "*")
{
ResultTextBox->Text = System::Convert::ToString(result * firstValue);
}
if (operation == "/")
{
if (Double::Parse(ResultTextBox->Text) != 0)
{
ResultTextBox->Text = System::Convert::ToString(result / firstValue);
}
else
{
ResultTextBox->Text = L"";
this->lblError->Text = "Ошибка! Делить на ноль нельзя.";
this->ResultTextBox->Text = L"";
}
}
if (ResultTextBox->Text != L"")
result = Double::Parse(ResultTextBox->Text);
resultButtonCount++;
}
private: System::Void btn1_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btn2_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btn3_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btnSubtract_Click(System::Object^sender,System::EventArgs^e){}
// Обработки кнопки "1/х"
private: System::Void btnInverse_Click(System::Object^ sender, System::EventArgs^ e) {
if (ResultTextBox->Text != "0")
{
CurrentValue->Text = "1/ " + ResultTextBox->Text + " =";
ResultTextBox->Text = System::Convert::ToString(1 / Double::Parse(ResultTextBox->Text));
result = Double::Parse(ResultTextBox->Text);
}
else
{
this->lblError->Text = "Ошибка! Делить на ноль нельзя.";
this->ResultTextBox->Text = L"";
}
}
private: System::Void btn4_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btn5_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btn6_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btnMulyiply_Click(System::Object^sender,System::EventArgs^e){}
// Обработка кнопки "%"
private: System::Void btnProcent_Click(System::Object^ sender, System::EventArgs^ e) {
if (ResultTextBox->Text != "0")
{
CurrentValue->Text = ResultTextBox->Text + "% " + " =";
ResultTextBox->Text = System::Convert::ToString(Double::Parse(ResultTextBox->Text) / 100);
respro = Double::Parse(ResultTextBox->Text);
}
else
{
this->lblError->Text = "Ошибка! Делить на ноль нельзя.";
this->ResultTextBox->Text = L"";
}
}
private: System::Void btn7_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btn8_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btn9_Click(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void btnShare_Click(System::Object^ sender, System::EventArgs^ e){}
// Обработка кнопки "sqrt" (корень)
private: System::Void btnSqrt_Click(System::Object^ sender, System::EventArgs^ e) {
if (ResultTextBox->Text->Contains("-") == false)
{
CurrentValue->Text = "sqrt" + "(" + ResultTextBox->Text + ") =";
ResultTextBox->Text = System::Convert::ToString(sqrt(Double::Parse(ResultTextBox->Text)));
result = Double::Parse(ResultTextBox->Text);
}
else if (ResultTextBox->Text->Contains("-"))
{
this->lblError->Text = "Ошибка! \nКвадратный корень из отрицательного числа не вычисляется.";
this->ResultTextBox->Text = L"";
}
}
// Обработка кнопки удаления символа
private: System::Void btnBackSpace_Click(System::Object^sender,System::EventArgs^ e) {
if (ResultTextBox->Text->Length > 0)
{
this->lblError->Text = L"";
ResultTextBox->Text = ResultTextBox->Text->Remove(ResultTextBox->Text- >Length - 1, 1);
}
if (ResultTextBox->Text == "")
{
this->lblError->Text = L"";
ResultTextBox->Text = "0";
}
}
// Обработка кнопки "СЕ"
private: System::Void btnCE_Click(System::Object^ sender, System::EventArgs^ e)
{
ResultTextBox->Text = "0";
this->lblError->Text = L"";
}
// Обработка кнопки "С"
private: System::Void btnC_Click(System::Object^ sender, System::EventArgs^ e)
{
ResultTextBox->Text = "0";
CurrentValue->Text = "";
result = 0;
this->lblError->Text = L"";
}
// Ввод арифметического действия
private: System::Void EnterOperator(System::Object^ sender, System::EventArgs^ e)
{
Button^ operations = safe_cast<Button^>(sender);
if (resultButtonCount != 0)
{
operation = operations->Text;
result = Double::Parse(ResultTextBox->Text);
CurrentValue->Text = result + " " + respro + " " + operation ;
resultButtonCount = 0;
}
else
{
resultButtonCount = 0;
if (result != 0)
{
btnResult->PerformClick();
resultButtonCount = 0;
operation = safe_cast<Button^>(sender)->Text;
CurrentValue->Text = result + " " + respro + " " + operation;
}
else
{
operation = safe_cast<Button^>(sender)->Text;
result = Double::Parse(ResultTextBox->Text);
CurrentValue->Text = result + " " + respro + " " + operation;
}
}
operation = operations->Text;
result = Double::Parse(ResultTextBox->Text);
isOperationButtonClicked = true;
CurrentValue->Text = System::Convert::ToString(result) + " " + operation;
}
// Защита от некорректного ввода
private: System::Void InputFormat(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
{
if ((e->KeyChar <= 0) || (e->KeyChar >= 9))
{
e->Handled = true;
}
}
private: System::Void CurrentValue_TextChanged(System::Object^ sender, System::EventArgs^ e) {}
private: System::Void ResultTextBox_TextChanged(System::Object^ sender, System::EventArgs^ e) {}
};
}
