📄 unit1_compl.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <complex.h>
#include <iostream.h>
#include <stack.h>
#pragma hdrstop
#include "Unit1_compl.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
cplex Cpx[10];
AnsiString Expres,Ansis[10][2];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
for (int i=0;i<10;i++)
{
Cpx[i].real=0;
Cpx[i].imag=0;
}
}
//---------------------------------------------------------------------------
int TransStrToNum(char s[],double &t)
{
int i=0,f=1,ln=strlen(s);
double integ=0,decim=0;
for (i=0;i<ln;i++)
if (s[i]<='9' && s[i]>='0')
integ=integ*10+s[i]-'0';
else
{
if (s[i]!='.')
f=0;
break;
}
if (f==0)
return 0;
if (i<ln)
{
for (i=ln-1;i>=0;i--)
if (s[i]<='9' && s[i]>='0')
decim=(decim+s[i]-'0')/10;
else
{
if (s[i]!='.')
f=0;
break;
}
}
t=integ+decim;
return f;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::A_reChange(TObject *Sender)
{
Ansis[0][0]=A_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::A_imChange(TObject *Sender)
{
Ansis[0][1]=A_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B_reChange(TObject *Sender)
{
Ansis[1][0]=B_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B_imChange(TObject *Sender)
{
Ansis[1][1]=B_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::C_reChange(TObject *Sender)
{
Ansis[2][0]=C_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::C_imChange(TObject *Sender)
{
Ansis[2][1]=C_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::D_reChange(TObject *Sender)
{
Ansis[3][0]=D_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::D_imChange(TObject *Sender)
{
Ansis[3][1]=D_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::E_reChange(TObject *Sender)
{
Ansis[4][0]=E_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::E_imChange(TObject *Sender)
{
Ansis[4][1]=E_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::F_reChange(TObject *Sender)
{
Ansis[5][0]=F_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::F_imChange(TObject *Sender)
{
Ansis[5][1]=F_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::G_reChange(TObject *Sender)
{
Ansis[6][0]=G_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::G_imChange(TObject *Sender)
{
Ansis[6][1]=G_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::H_reChange(TObject *Sender)
{
Ansis[7][0]=H_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::H_imChange(TObject *Sender)
{
Ansis[7][1]=H_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::I_reChange(TObject *Sender)
{
Ansis[8][0]=I_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::I_imChange(TObject *Sender)
{
Ansis[8][1]=I_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::J_reChange(TObject *Sender)
{
Ansis[9][0]=J_re->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::J_imChange(TObject *Sender)
{
Ansis[9][1]=J_im->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ExpressionChange(TObject *Sender)
{
Expres=Expression->Text;
}
//---------------------------------------------------------------------------
char ifexpres(char s)
{
if (s<='J' && s>='A')
return s-('A'-'a');
if (s<='j' && s>='a')
return s;
switch (s)
{
case '+':return '0';
case '-':return '1';
case '*':return '2';
case '/':return '3';
case '(':return '4';
case ')':return '5';
case '#':return '6';
default: return 0;
}
}
//---------------------------------------------------------------------------
int em1[7]={3,3,5,5,1,6,1},em2[7]={2,2,4,4,6,1,1};
//---------------------------------------------------------------------------
cplex calcplex(cplex z1,cplex z2,int d)
{
switch (d)
{
case 0:return z1+z2;
case 1:return z1-z2;
case 2:return z1*z2;
case 3:return z1/z2;
}
return z1;
}
//---------------------------------------------------------------------------
int Calculate(char st[],cplex &t)
{
int ln,i;
char s[1000];
ln=strlen(st);
if (ln==0)
return 0;
for (i=0;i<ln;i++)
{
s[i]=ifexpres(st[i]);
if (s[i]==0)
break;
}
if (i<ln)
return 0;
s[ln]='6';
s[++ln]='\0';
i=0;
char c=s[i++];
stack<cplex> operand;
stack<char> operatr;
operatr.push('6');
while (c!='6' || operatr.top()!='6')
if (c<='6' && c>='0')
if (operatr.empty())
return 0;
else
if (em1[operatr.top()-'0']<em2[c-'0'])
{
operatr.push(c);
c=s[i++];
}
else
if (em1[operatr.top()-'0']>em2[c-'0'])
{
if (operand.empty())
return 0;
cplex z2=operand.top();
operand.pop();
if (operand.empty())
return 0;
cplex z1=operand.top();
operand.pop();
operand.push(calcplex(z1,z2,operatr.top()-'0'));
if (operatr.empty())
return 0;
operatr.pop();
if (operatr.empty())
return 0;
}
else
{
if (operatr.empty())
return 0;
operatr.pop();
if (operatr.empty())
return 0;
c=s[i++];
}
else
{
operand.push(Cpx[c-'a']);
c=s[i++];
}
if (operand.empty())
return 0;
t=operand.top();
return 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonOKClick(TObject *Sender)
{
double t;
bool f=true;
for (int i=0;i<10;i++)
{
if (TransStrToNum(Ansis[i][0].c_str(),t))
Cpx[i].real=t;
else
{
Result->Caption=AnsiString(char(i+'A'))+"'s real part is error";
f=false;
}
if (TransStrToNum(Ansis[i][1].c_str(),t))
Cpx[i].imag=t;
else
{
Result->Caption=AnsiString(char(i+'A'))+"'s image part is error";
f=false;
}
}
ValueA->Caption=AnsiString('(')+AnsiString(Cpx[0].real)+','+AnsiString(Cpx[0].imag)+')';
ValueB->Caption=AnsiString('(')+AnsiString(Cpx[1].real)+','+AnsiString(Cpx[1].imag)+')';
ValueC->Caption=AnsiString('(')+AnsiString(Cpx[2].real)+','+AnsiString(Cpx[2].imag)+')';
ValueD->Caption=AnsiString('(')+AnsiString(Cpx[3].real)+','+AnsiString(Cpx[3].imag)+')';
ValueE->Caption=AnsiString('(')+AnsiString(Cpx[4].real)+','+AnsiString(Cpx[4].imag)+')';
ValueF->Caption=AnsiString('(')+AnsiString(Cpx[5].real)+','+AnsiString(Cpx[5].imag)+')';
ValueG->Caption=AnsiString('(')+AnsiString(Cpx[6].real)+','+AnsiString(Cpx[6].imag)+')';
ValueH->Caption=AnsiString('(')+AnsiString(Cpx[7].real)+','+AnsiString(Cpx[7].imag)+')';
ValueI->Caption=AnsiString('(')+AnsiString(Cpx[8].real)+','+AnsiString(Cpx[8].imag)+')';
ValueJ->Caption=AnsiString('(')+AnsiString(Cpx[9].real)+','+AnsiString(Cpx[9].imag)+')';
if (f)
{
cplex tem;
if (Calculate(Expres.c_str(),tem))
Result->Caption=AnsiString('(')+
AnsiString(tem.real)+','+
AnsiString(tem.imag)+')';
else
Result->Caption="Expression Error";
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -