2 Схемы алгоритмов
Прежде всего, при нажатии на кнопку «Закрыть» производится закрытие программы (рисунок 1).
Рисунок 1 – Схема алгоритма обработки нажатия на кнопку «Закрыть»
При нажатии на «Сброс» – исполняется алгоритм очистки всех строк текстовых полей и меток (рисунок 2).
Рисунок 2 – Схема алгоритма обработки нажатия на кнопку «Сброс»
После ввода чисел при нажатии на кнопку операции запускается алгоритм, соответственно: сложения (рисунок 3), вычитания (рисунок 4), умножения (рисунок 5) или деления (рисунок 6). В делении проверяется равно ли какое-то число 0, в случае если такое число есть, то выводится ошибка.
Рисунок 3 – Схема алгоритма операции сложения
Рисунок 4 – Схема алгоритма операции вычитания
Рисунок 5 – Схема алгоритма операции умножения
Рисунок 6 – Схема алгоритма операции деления
Для операции деления (рисунок 6) перед выполнением вычисления производится проверка деления на 0 – если делитель равен 0, выводится соответствующая ошибка.
3 Текст программы
#pragma once
namespace Calc {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для MyForm
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form
{
public:
MyForm(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~MyForm()
{
if (components)
{
delete components;
}
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
this->Close();
}
private: System::Void btnReset_Click(System::Object^ sender, System::EventArgs^ e) {
this->lblOper->Text = L"";
this->txt1->Text = L"";
this->txt2->Text = L"";
this->lblErr->Text = L"";
this->txtResult->Text = L"";
}
private: System::Void btnAdd_Click(System::Object^ sender, System::EventArgs^ e) {
double i1, i2, i3;
this->lblOper->Text = L"Сложение";
this->lblErr->Text = L"";
// Проверка на пустое поле txt1
if (txt1->Text->Length == 0) {
this->lblErr->Text = L"Внимание: Первое поле не может быть пустым.";
txt1->BackColor = System::Drawing::Color::Pink;
// Подсвечиваем поле красным
this->txtResult->Text = L"";
return;
}
else {
txt1->BackColor = System::Drawing::Color::White;
// Если поле не пустое, сбрасываем цвет
}
// Проверка на пустое поле txt2
if (txt2->Text->Length == 0) {
this->lblErr->Text = L"Внимание: Второе поле не может быть пустым.";
txt2->BackColor = System::Drawing::Color::Pink;
// Подсвечиваем поле красным
this->txtResult->Text = L"";
return;
}
else {
txt2->BackColor = System::Drawing::Color::White;
// Если поле не пустое, сбрасываем цвет
}
i1 = Convert::ToDouble(txt1->Text->Replace('.', ','));
i2 = Convert::ToDouble(txt2->Text->Replace('.', ','));
i3 = i1 + i2;
this->txtResult->Text = Convert::ToString(i3);
}
private: System::Void btnDiv_Click(System::Object^ sender, System::EventArgs^ e) {
double i1, i2, i3;
this->lblOper->Text = L"Деление";
this->lblErr->Text = L"";
// Проверка на пустое поле txt1
if (txt1->Text->Length == 0) {
this->lblErr->Text = L"Внимание: Первое поле не может быть пустым.";
txt1->BackColor = System::Drawing::Color::Pink;
// Подсвечиваем поле красным
this->txtResult->Text = L"";
return;
}
else {
txt1->BackColor = System::Drawing::Color::White;
// Если поле не пустое, сбрасываем цвет
this->txtResult->Text = L"";
}
// Проверка на пустое поле txt2
if (txt2->Text->Length == 0) {
this->lblErr->Text = L"Внимание: Второе поле не может быть пустым.";
txt2->BackColor = System::Drawing::Color::Pink;
// Подсвечиваем поле красным
this->txtResult->Text = L"";
return;
}
else {
txt2->BackColor = System::Drawing::Color::White;
// Если поле не пустое, сбрасываем цвет
this->txtResult->Text = L"";
}
i1 = Convert::ToDouble(txt1->Text->Replace('.', ','));
i2 = Convert::ToDouble(txt2->Text->Replace('.', ','));
if (i2 == 0)
{
this->lblErr->Text = L"Внимание! Делить на ноль нельзя.";
return;
}
i3 = i1 / i2;
this->txtResult->Text = Convert::ToString(i3);
}
private: System::Void btnSub_Click(System::Object^ sender, System::EventArgs^ e) {
double i1, i2, i3;
this->lblOper->Text = L"Вычитание";
this->lblErr->Text = L"";
// Проверка на пустое поле txt1
if (txt1->Text->Length == 0) {
this->lblErr->Text = L"Внимание: Первое поле не может быть пустым.";
txt1->BackColor = System::Drawing::Color::Pink;
// Подсвечиваем поле красным
this->txtResult->Text = L"";
return;
}
else {
txt1->BackColor = System::Drawing::Color::White;
// Если поле не пустое, сбрасываем цвет
this->txtResult->Text = L"";
}
// Проверка на пустое поле txt2
if (txt2->Text->Length == 0) {
this->lblErr->Text = L"Внимание: Второе поле не может быть пустым.";
txt2->BackColor = System::Drawing::Color::Pink;
// Подсвечиваем поле красным
this->txtResult->Text = L"";
return;
}
else {
txt2->BackColor = System::Drawing::Color::White;
// Если поле не пустое, сбрасываем цвет
this->txtResult->Text = L"";
}
i1 = Convert::ToDouble(txt1->Text->Replace('.', ','));
i2 = Convert::ToDouble(txt2->Text->Replace('.', ','));
i3 = i1 - i2;
this->txtResult->Text = Convert::ToString(i3);
}
private: System::Void btnMul_Click(System::Object^ sender, System::EventArgs^ e) {
double i1, i2, i3;
this->lblOper->Text = L"Умножение";
// Проверка на пустое поле txt1
if (txt1->Text->Length == 0) {
this->lblErr->Text = L"Внимание: Первое поле не может быть пустым.";
txt1->BackColor = System::Drawing::Color::Pink;
// Подсвечиваем поле красным
this->txtResult->Text = L"";
return;
}
else {
txt1->BackColor = System::Drawing::Color::White;
// Если поле не пустое, сбрасываем цвет
this->txtResult->Text = L"";
}
// Проверка на пустое поле txt2
if (txt2->Text->Length == 0) {
this->lblErr->Text = L"Внимание: Второе поле не может быть пустым.";
txt2->BackColor = System::Drawing::Color::Pink;
// Подсвечиваем поле красным
this->txtResult->Text = L"";
return;
}
else {
txt2->BackColor = System::Drawing::Color::White;
// Если поле не пустое, сбрасываем цвет
this->txtResult->Text = L"";
}
this->lblErr->Text = L"";
this->txtResult->Clear();
i1 = Convert::ToDouble(txt1->Text->Replace('.', ','));
i2 = Convert::ToDouble(txt2->Text->Replace('.', ','));
i3 = i1 * i2;
this->txtResult->Text = Convert::ToString(i3);
}
private: System::Void txt1_TextChanged(System::Object^ sender,
System::EventArgs^ e) {
txt1->BackColor = System::Drawing::Color::White;
String^ text = txt1->Text;
// Проверяем, содержит ли текст только цифры и одну точку
for (int i = 0; i < text->Length; i++) {
// Если символ не является цифрой и не является точкой
if (!Char::IsDigit(text[i]) && text[i] != '.' && text[i] != '-') {
// Удаляем последний символ, который был введён
txt1->Text = text->Remove(i, 1);
return;
}
}
}
private: System::Void txt2_TextChanged(System::Object^ sender,
System::EventArgs^ e) {
txt2->BackColor = System::Drawing::Color::White;
String^ text = txt2->Text;
// Проверяем, содержит ли текст только цифры и одну точку
for (int i = 0; i < text->Length; i++) {
// Если символ не является цифрой и не является точкой
if (!Char::IsDigit(text[i]) && text[i] != '.' && text[i] != '-') {
// Удаляем последний символ, который был введён
txt2->Text = text->Remove(i, 1);
return;
}
}
}
};
}
