Добавил:
больше работ здесь: https://github.com/alisadex Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт по Windows-калькулятору.docx
Скачиваний:
28
Добавлен:
10.01.2023
Размер:
2.51 Mб
Скачать
  1. Схемы алгоритмов

На рисунках представлены схемы алгоритмов работы текста программы.

Рисунок 1 – Схема алгоритма функции ввода чисел

Рисунок 2 – Схема алгоритма функции кнопки «,»

Рисунок 3 – Схема алгоритма функции стирания

Рисунок 4 – Схема алгоритма функции деления

Рисунок 5 – Схема алгоритма функции проверки ввода

Рисунок 6 – Схема алгоритма функции кнопки «CЕ»

Рисунок 7 – Схема алгоритма функции кнопки «С»

Рисунок 8 – Схема алгоритма ввода оператора

Рисунок 9 – Схема алгоритма кнопки «+/-»

Рисунок 10 – Схема алгоритма кнопки «sqrt»

Рисунок 11 – Схема алгоритма кнопки «1/x»

Рисунок 12 – Схема алгоритма кнопки «x^2»

Рисунок 13 – Схема алгоритма функции подсчета результата

  1. Текст программы

Ниже представлен текст программы, где были прописаны условия и функции работы калькулятора.

#pragma endregion

Double result, firstValue, secondValue;

String^ operation = "";

bool isOperationButtonClicked;

bool isSimpleOperation = true;

int resultButtonCount = 0;

//Ввод цифр

private: System::Void InputNumbers(System::Object^ sender, System::EventArgs^ e) {

Button^ Numbers = safe_cast<Button^>(sender);

if (isOperationButtonClicked)

{

resultTextBox->Text = "";

isOperationButtonClicked = false;

}

if (resultTextBox->Text == "0")

{

resultTextBox->Text = Numbers->Text;

}

else {

resultTextBox->Text = resultTextBox->Text + Numbers->Text;

}

}

//Точка

private: System::Void DotButton_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 BackspaceButton_Click(System::Object^ sender, System::EventArgs^ e) {

if (resultTextBox->Text->Length > 0)

{

resultTextBox->Text = resultTextBox->Text->Remove(resultTextBox->Text->Length - 1, 1);

}

if (resultTextBox->Text == "")

{

resultTextBox->Text = "0";

}

}

//Вводим арифметическое действие

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 + " " + operation;

resultButtonCount = 0;

}

else

{

resultButtonCount = 0;

if (result != 0)

{

resultButton->PerformClick();

resultButtonCount = 0;

operation = safe_cast<Button^>(sender)->Text;

CurrentValue->Text = result + " " + operation;

}

else

{

operation = safe_cast<Button^>(sender)->Text;

result = Double::Parse(resultTextBox->Text);

CurrentValue->Text = result + " " + 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;

}

}

//CE

private: System::Void CeButton_Click(System::Object^ sender, System::EventArgs^ e) {

resultTextBox->Text = "0";

}

//C

private: System::Void CButton_Click(System::Object^ sender, System::EventArgs^ e) {

resultTextBox->Text = "0";

CurrentValue->Text = "";

result = 0;

}

//Равно

private: System::Void ResultButtonClick(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"";

MessageBox::Show("Попытка деления на ноль", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Error);

}

}

if (resultTextBox->Text != L"")

result = Double::Parse(resultTextBox->Text);

resultButtonCount++;

}

//Смена знака у числа

private: System::Void PlusMinysButton_Click(System::Object^ sender, System::EventArgs^ e) {

if (resultTextBox->Text == "0")

{

MessageBox::Show("Попытка деления на ноль", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Error);

}

else if (resultTextBox->Text->Contains("-"))

{

resultTextBox->Text = resultTextBox->Text->Remove(0, 1);

}

else

{

resultTextBox->Text = "-" + resultTextBox->Text;

}

}

private: System::Void SqrtButoonClick(System::Object^ sender, System::EventArgs^ e) {

if (resultTextBox->Text != "0") {

CurrentValue->Text = "sqrt" + "(" + resultTextBox->Text + ") =";

resultTextBox->Text = System::Convert::ToString(sqrt(Double::Parse(resultTextBox->Text)));

result = Double::Parse(resultTextBox->Text);

}

else {

MessageBox::Show("Попытка деления на ноль", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Error);

}

}

private: System::Void InverseButtonClick(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 {

MessageBox::Show("Попытка деления на ноль", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Error);

}

}

private: System::Void PowerButtonClick(System::Object^ sender, System::EventArgs^ e) {

if (resultTextBox->Text != "0") {

CurrentValue->Text = resultTextBox->Text + " * " + resultTextBox->Text + " =";

resultTextBox->Text = System::Convert::ToString(Double::Parse(resultTextBox->Text) * Double::Parse(resultTextBox->Text));

result = Double::Parse(resultTextBox->Text);

}

else {

MessageBox::Show("Попытка деления на ноль", "Ошибка", MessageBoxButtons::OK, MessageBoxIcon::Error);

}