Схемы алгоритмов
На рисунках представлены схемы алгоритмов работы текста программы.
Рисунок 1 – Схема алгоритма функции ввода чисел
Рисунок 2 – Схема алгоритма функции кнопки «,»
Рисунок 3 – Схема алгоритма функции стирания
Рисунок 4 – Схема алгоритма функции деления
Рисунок 5 – Схема алгоритма функции проверки ввода
Рисунок 6 – Схема алгоритма функции кнопки «CЕ»
Рисунок 7 – Схема алгоритма функции кнопки «С»
Рисунок 8 – Схема алгоритма ввода оператора
Рисунок 9 – Схема алгоритма кнопки «+/-»
Рисунок 10 – Схема алгоритма кнопки «sqrt»
Рисунок 11 – Схема алгоритма кнопки «1/x»
Рисунок 12 – Схема алгоритма кнопки «x^2»
Рисунок 13 – Схема алгоритма функции подсчета результата
Текст программы
Ниже представлен текст программы, где были прописаны условия и функции работы калькулятора.
#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);
}