AFON//Радиотехник
C++Builder · проект 03/50

Калькулятор на четыре действия

Сложение, вычитание, умножение, деление с защитой от нуля.

Задача

Простой калькулятор: два операнда, четыре кнопки действий, защита от деления на ноль.

Компоненты на форме

Edit (EditA, EditB, EditR), Button (ButtonAdd, ButtonSub, ButtonMul, ButtonDiv).

Как работает

  1. Считать операнды в общие переменные функцией grab.
  2. Каждая кнопка выполняет своё действие.
  3. Перед делением проверить знаменатель на ноль.

Исходный код модуля

//---------------------------------------------------------------------------
// Проект 3. Калькулятор на четыре действия
// Сложение, вычитание, умножение, деление с защитой от деления на ноль.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

// Одно поле результата, четыре кнопки. Деление на ноль — типичная ошибка
// новичка, поэтому проверяем знаменатель явно.
double gA, gB;
bool grab(TEdit *ea, TEdit *eb)
{
    try { gA = StrToFloat(ea->Text); gB = StrToFloat(eb->Text); return true; }
    catch (...) { return false; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonAddClick(TObject *Sender)
{
    if (!grab(EditA, EditB)) { EditR->Text = "ошибка ввода"; return; }
    EditR->Text = FormatFloat("0.######", gA + gB);
}
void __fastcall TForm1::ButtonSubClick(TObject *Sender)
{
    if (!grab(EditA, EditB)) { EditR->Text = "ошибка ввода"; return; }
    EditR->Text = FormatFloat("0.######", gA - gB);
}
void __fastcall TForm1::ButtonMulClick(TObject *Sender)
{
    if (!grab(EditA, EditB)) { EditR->Text = "ошибка ввода"; return; }
    EditR->Text = FormatFloat("0.######", gA * gB);
}
void __fastcall TForm1::ButtonDivClick(TObject *Sender)
{
    if (!grab(EditA, EditB)) { EditR->Text = "ошибка ввода"; return; }
    if (gB == 0) { EditR->Text = "деление на ноль"; return; }
    EditR->Text = FormatFloat("0.######", gA / gB);
}
//---------------------------------------------------------------------------

Пояснения

  • Деление на ноль в double даёт inf, а не исключение — проверяем явно.
  • Общая функция чтения операндов убирает дублирование кода.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.

Что дальше

Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.