Задача
Простой калькулятор: два операнда, четыре кнопки действий, защита от деления на ноль.
Компоненты на форме
Edit (EditA, EditB, EditR), Button (ButtonAdd, ButtonSub, ButtonMul, ButtonDiv).
Как работает
- Считать операнды в общие переменные функцией grab.
- Каждая кнопка выполняет своё действие.
- Перед делением проверить знаменатель на ноль.
Исходный код модуля
//---------------------------------------------------------------------------
// Проект 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.