Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы Волков / Отчёт Win калькулятор.docx
Скачиваний:
1
Добавлен:
09.07.2025
Размер:
1.33 Mб
Скачать

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) {}

};

}