⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1_compl.~cpp

📁 数据结构作业 复数运算代码。 可处理复数加减乘除运算。 图形界面。
💻 ~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 + -