Есть знающие люди??? Нужны комментарии к программе (очень подробные) !!! Часть 1-я
Код:
//-------------------------------------------------------------------
#include <vcl.h>//Директива препроцессора #include <vcl.h> предназначена для включения в текст проекта заголовочного файла, ссылающегося на описания классов библиотеки компонентов.
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)//__fastcall говорит компилятору, что аргументы надо кидать в регистр...
: TForm(Owner)
{
Reset();//результат
}
//---------------------------------------------------------------------------
void TForm1::Reset()
{
Pr.ReSet();//очистка операций
num = denum = ""; //пустой знаменатель и числитель
Pr.OprtnSet(Add); //добавляем операцию
this_Frac.Reset("0/1");// установка по умолчанию
Memo1->Lines->Strings[0] = this_Frac.GetFrac(dr); //объединения значения в строку
right = false;
ravno = false;
back = false;
}
//---------------------------------------------------------------------------
void TForm1::Reset1()
{
Pr.ReSet();//очистка операций
num = denum = ""; //очистка значений
Pr.OprtnSet(Add);//добавляем операцию
right = false;
ravno = false;
back = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Reset();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)//кнопка разности
{
if(ravno)
Reset1();
Pr.Rop_Set(this_Frac);
if(!ravno) Pr.OprtnRun();
Pr.OprtnSet(Sub);
num = denum = "";
right = false;
back = false;
Memo1->Lines->Strings[0] = Pr.ReadLop_Res().GetFrac(dr);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button9Click(TObject *Sender)//кнопка сложения
{
if(ravno)
Reset1();
Pr.Rop_Set(this_Frac);
if(!ravno) Pr.OprtnRun();
Pr.OprtnSet(Add);
num = denum = "";
right = false;
back = false;
Memo1->Lines->Strings[0] = Pr.ReadLop_Res().GetFrac(dr);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)//кнопка равно
{
if(!ravno) Pr.Rop_Set(this_Frac);
Pr.OprtnRun();
num = denum = "";
output = Pr.ReadLop_Res().GetFrac(dr);//вывод
Memo1->Lines->Strings[0] = output;
output = "";
this_Frac = Pr.ReadLop_Res();
ravno = true;
right = false;
back = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button13Click(TObject *Sender)//кнопка(числитель|знаменатель)
{
if(ravno)
Reset();
denum = "";
right = true;
back = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button21Click(TObject *Sender)//кнопка "ноль"
{
if(ravno) //если нажато равно
Reset();
TButton *b1 = (TButton*)Sender;
if(!right)
{
num = num + b1->Tag;//к пустому числителю прибовляем кнопку
this_Frac.Reset(num + "/1");
}
else
{
denum = denum + b1->Tag;//знаменатель
try
{
double c = num/denum;
}
catch (EDivByZero &E) //EDivByZero дочерний класс от ElntError.(Вызывается при целочисленном делении на ноль)
{
ShowMessage("Ошибка: на ноль делить нельзя!!!.\n");
} catch (...) {
ShowMessage("Произошла ошибка в ходе выполнения операции.");
}
if(num == "")//если знаменатель пустой,
num = "0";// то приравниваем к нулю
this_Frac.Reset(num + "/" + denum);//устанавливаем дробь
}
Memo1->Lines->Strings[0] = this_Frac.GetFrac(dr);
back = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
if(Key >= '0' && Key <= '9')
{
if(ravno)
Reset();
if(!right)
{
num = num + Key;
this_Frac.Reset(num + "/1");
}
else
{
denum = denum + Key;
if(num == "")
num = "0";
this_Frac.Reset(num + "/" + denum);
}
Memo1->Lines->Strings[0] = this_Frac.GetFrac(dr);
back = false;
}
switch(Key)
{
case ',': Button13Click(Send); break;
case '+': Button9Click(Send); break;
case '-': Button8Click(Send); break;
case '=': Button5Click(Send); break;
}
}
________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.