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

2 Схемы алгоритмов

При нажатии на кнопку с любым арифметическим действием вызывается функция Protect(). При осуществлении каждой арифметической операции будет выполняться функция проверки корректности вводимых данных. Алгоритм работы функции представлен ниже (рисунок 1).

Рисунок 1 ­– Схема алгоритма функции Protect()

Рисунок 1 ­– Схема алгоритма функции Protect(), продолжение

Рисунок 1 ­– Схема алгоритма функции Protect(), продолжение

Рисунок 1 ­– Схема алгоритма функции Protect(), продолжение

При нажатии на кнопку «Закрыть», выполняется функция закрытия программы (рисунок 2).

Рисунок 2 – Схема алгоритма функции обработки события нажатия кнопки «Закрыть»

При нажатии на кнопку «Сброс», выполняется функция, представленная на рисунке 3.

Рисунок 3 – Схема алгоритма функции обработки события нажатия кнопки «Сброс»

При нажатии на кнопку «Сложить», выполняется функция, складывающая заданные значения (рисунок 4).

Рисунок 4 – Схема алгоритма функции обработки события нажатия кнопки «Сложить»

При нажатии на кнопку «Вычесть», выполняется функция вычитания заданных чисел (рисунок 5).

Рисунок 5 – Схема алгоритма функции обработки события нажатия кнопки «Вычесть»

При нажатии на кнопку «Умножить», выполняется функция умножения заданных значений (рисунок 6).

Рисунок 6 — Схема алгоритма функции обработки события нажатия кнопки «Умножить»

При нажатии на кнопку «Делить», выполняется функция деления заданных значений (рисунок 7).

Рисунок 7 – Схема алгоритма функции обработки события нажатия кнопки «Делить»

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

bool Protect() { // Функция проверки корректности ввода первого и второго числа

if ((txt1->Text->Length == 0) || (txt2->Text->Length == 0)) { return false; }

for (int i = 0; i < txt1->Text->Length; ++i) {

if ((txt1->Text[i] < '0' || txt1->Text[i] > '9') && (txt1- >Text[i] != '.') &&

(txt1->Text[i] != '-') && (txt1->Text[i] != ',')) {

return false;

}

else {

int countertochka = 0, countzap = 0;

for (int i = 0; i < txt1->Text->Length; ++i) {

if (txt1->Text[i] == '.' || txt1->Text[i] == ',') {

++countertochka;

++countzap;

else {return false;}

}

}

int countMinus = 0;

for (int i = 0; i < txt1->Text->Length; ++i) {

if (txt1->Text[i] == '-') {

countMinus++;

if (countMinus > 1) {

return false;

}

}

}

}

}

for (int i = 0; i < txt2->Text->Length; ++i) {

if ((txt2->Text[i] < '0' || txt2->Text[i] > '9') && (txt2- >Text[i] != '.') && (txt2->Text[i] != '-')

&& (txt2->Text[i] != ',')) {

return false;

}

else {

int countertoch = 0, countzap = 0;

for (int i = 0; i < txt2->Text->Length; ++i) {

if (txt2->Text[i] == '.' || txt2->Text[i] == ',') {

++countertoch;

++countzap;

else {return false;}

}

}

int countMinus = 0;

for (int i = 0; i < txt2->Text->Length; ++i) {

if (txt2->Text[i] == '-') {

countMinus++;

if (countMinus > 1) {

return false;

}

}

}

}

}

return true;

}

#pragma endregion

// Событие для кнопки "Закрыть"

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

this->Close();

}

// Событие для кнопки "Сложить

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

if (Protect()) {

this->txtResult->Text = L""; // Обнуление ячейки "Результат"

this->lblError->Text = L""; // Обнуление ячейки "Ошибка"

this->lblErrorTxt->Text = L""; // Обнуление ячейки "Текст ошибки"

double i1, i2, i3; // Объявление глобальных переменных

// Замена точки на запятую

this->txt1->Text = this->txt1->Text->Replace(".", ",");

this->txt2->Text = this->txt2->Text->Replace(".", ",");

// Операция "Сложение"

this->lblOper->Text = L"Сложение";

i1 = System::Double::Parse(txt1->Text);

i2 = System::Double::Parse(txt2->Text);

i3 = i1 + i2;

this->txt1->Text = Convert::ToString(i1);

this->txt2->Text = Convert::ToString(i2);

this->txtResult->Text = Convert::ToString(i3);

}

else if (txt1->Text->Length == 0)

{

this->lblErrorTxt->Text = L"Введите первое число.";

this->lblOper->Text = L"Сложение";

}

else if (txt2->Text->Length == 0)

{

this->lblErrorTxt->Text = L"Введите второе число.";

this->lblOper->Text = L"Сложение";

}

else

{

this->lblError->Text = L"Ошибка!";

this->lblErrorTxt->Text = L"Введите корректные числовые значения.";

this->lblOper->Text = L"Сложение";

}

}

// Событие для кнопки "Сброс". Обнуление всех окон (возвращение приложения в

// изначальный вид)

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

this->lblOper->Text = L"";

this->txt1->Text = L"";

this->txt2->Text = L"";

this->txtResult->Text = L"";

this->lblError->Text = L"";

this->lblErrorTxt->Text = L"";

}

// Обнуление вывода результата, названия операции, сообщения об ошибке, если

// изменяется первое или второе число

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

this->txtResult->Text = L"";

this->lblOper->Text = L"";

this->lblError->Text = L"";

this->lblErrorTxt->Text = L"";

}

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

}

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

this->txtResult->Text = L"";

this->lblOper->Text = L"";

this->lblError->Text = L"";

this->lblErrorTxt->Text = L"";

}

// Событие для кнопки "Разделить"

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

if (Protect()) {

this->txtResult->Text = L""; // Обнуление ячейки "Результат"

this->lblError->Text = L""; // Обнуление ячейки "Ошибка"

this->lblErrorTxt->Text = L""; // Обнуление ячейки "Текст ошибки"

double i1, i2, i3; // Объявление глобальных переменных

// Замена точки на запятую

this->txt1->Text = this->txt1->Text->Replace(".", ",");

this->txt2->Text = this->txt2->Text->Replace(".", ",");

// Операция "Деление"

this->lblOper->Text = L"Деление";

i1 = System::Double::Parse(txt1->Text);

i2 = System::Double::Parse(txt2->Text);

if (i2 != 0) { // Проверка деления на ноль

i3 = i1 / i2;

this->txtResult->Text = Convert::ToString(i3);

this->txt2->Text = Convert::ToString(i2);

this->txt1->Text = Convert::ToString(i1);

}

else { // Если второе число равно ноль, то вывести сообщение об ошибке

this->txtResult->Text = L"";

this->lblError->Text = L"Ошибка!";

this->lblErrorTxt->Text = L"Делить на ноль нельзя.";

}

}

else if (txt1->Text->Length == 0)

{

this->lblErrorTxt->Text = L"Введите первое число.";

this->lblOper->Text = L"Деление";

}

else if (txt2->Text->Length == 0)

{

this->lblErrorTxt->Text = L"Введите второе число.";

this->lblOper->Text = L"Деление";

}

else {

this->lblError->Text = L"Ошибка!";

this->lblErrorTxt->Text = L"Введите корректные числовые значения.";

this->lblOper->Text = L"Деление";

}

}

// Событие для кнопки "Умножить"

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

if (Protect()) {

this->txtResult->Text = L""; // Обнуление ячейки "Результат"

this->lblError->Text = L""; // Обнуление ячейки "Ошибка"

this->lblErrorTxt->Text = L""; // Обнуление ячейки "Текст ошибки"

double i1, i2, i3; // Объявление глобальных переменных

// Замена точки на запятую

this->txt1->Text = this->txt1->Text->Replace(".", ",");

this->txt2->Text = this->txt2->Text->Replace(".", ",");

// Операция "Умножение"

this->lblOper->Text = L"Умножение";

i1 = System::Double::Parse(txt1->Text);

i2 = System::Double::Parse(txt2->Text);

i3 = i1 * i2;

this->txtResult->Text = Convert::ToString(i3);

this->txt1->Text = Convert::ToString(i1);

this->txt2->Text = Convert::ToString(i2);

}

else if (txt1->Text->Length == 0)

{

this->lblErrorTxt->Text = L"Введите первое число.";

this->lblOper->Text = L"Умножение";

}

else if (txt2->Text->Length == 0)

{

this->lblErrorTxt->Text = L"Введите второе число.";

this->lblOper->Text = L"Умножение";

}

else {

this->lblError->Text = L"Ошибка!";

this->lblErrorTxt->Text = L"Введите корректные числовые значения.";

this->lblOper->Text = L"Умножение";

}

}

// Событие для кнопки "Вычесть"

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

if (Protect()) {

this->txtResult->Text = L""; // Обнуление ячейки "Результат"

this->lblError->Text = L""; // Обнуление ячейки "Ошибка"

this->lblErrorTxt->Text = L""; // Обнуление ячейки "Текст ошибки"

double i1, i2, i3; // Объявление глобальных переменных

// Замена точки на запятую

this->txt1->Text = this->txt1->Text->Replace(".", ",");

this->txt2->Text = this->txt2->Text->Replace(".", ",");

// Операция "Вычитание"

this->lblOper->Text = L"Вычитание";

i1 = System::Double::Parse(txt1->Text);

i2 = System::Double::Parse(txt2->Text);

i3 = i1 - i2;

this->txtResult->Text = Convert::ToString(i3);

this->txt1->Text = Convert::ToString(i1);

this->txt2->Text = Convert::ToString(i2);

}

else if (txt1->Text->Length == 0)

{

this->lblErrorTxt->Text = L"Введите первое число.";

this->lblOper->Text = L"Вычитание";

}

else if (txt2->Text->Length == 0)

{

this->lblErrorTxt->Text = L"Введите второе число.";

this->lblOper->Text = L"Вычитание";

}

else {

this->lblError->Text = L"Ошибка!";

this->lblErrorTxt->Text = L"Введите корректные числовые значения.";

this->lblOper->Text = L"Вычитание";

}

}

};

}