计算器代码

inline void compute(char *strr,bool &flag)
{
int  q=0;
 double ff,f,f0,a,b,m;
char c,e;
flag=false;
int i0=0;
  int k0=0;
double gg=NULL;
   char c0;

  __del();

  s[h++].f='#';  //f表示运算符
s[h].k=NULL;    //k表示数
__ins('=')  ;


SqStack S;

InitStack_sq(S, STACK_INIT_SIZE); //
 EC s1='#';
 Push_sq(S,s1,gg);

while(!StackEmpty(S))
{
if( s[i0].k!=NULL)
{     suffix[k0++].k=s[i0].k;
}
else  if( s[i0].f!=NULL)
{
while(GetTop_sq(S,c,f)&&  (  precede(find(c),find2(s[i0].f))   ))    // 4
{  // if(precede(find(c),find2(s[i0].f)))
//  String  sw(c);  ShowMessage("取得"+sw+s[i0].f);
c0=c;    //String  sw(c);   ShowMessage(sw);
  if(c!='(')
{suffix[k0++].f=c;
}
  Pop_sq(S,c,f0);       // 5
if((  s[i0].f==')' ) && ( c0=='('  ))
break;
}
// if(s[i0].f!=NULL&&s[i0].f!='#'&&s[i0].f!=')')
if(s[i0].f!='#'&&s[i0].f!=')'&&s[i0].f!=NULL)
 {  Push_sq(S,s[i0].f,gg);      // 6
// String  sw(s[i0].f);   ShowMessage("插入"+sw);
 }
}
  i0++;
}


suffix[k0].f='\0';

while(suffix[q].f!='#' )
{       //ShowMessage("wrong");
 ff=suffix[q].k;
if(suffix[q].k!=NULL)
{
 qq.push(ff);
 }
else
{     char ans[100],anss[100];
a=qq.top();
qq.pop();
  // sprintf(ans,"a:%.10g",a);
// ShowMessage(ans);
  b=qq.top();
qq.pop();

//  ShowMessage("first");

  // if(a<0.00001)
// ShowMessage(ans);


  // sprintf(anss,"b:%.10g",b);
  // ShowMessage(anss);

  if(suffix[q].f=='/'&&  fabs(a)<0.000001)
{
 flag=true;
//ShowMessage("hello");
break;
}
 else   {

m=operate(b,suffix[q].f,a);//  Push(Sd,m)
qq.push(m);
}
}
q++;
}

//Pop(Sd,m);           //11
 if(!flag)
 { m= qq.top();
 if(fabs(m)>little)
 sprintf(strr,"%.10g",m);  //去掉零
 else
  sprintf(strr,"%s","0");
  char ans1[100] ;
 char ans3[100];
 sprintf(ans3,"%s%s\t%s",quat,strr,str);
   strcpy(ans1,eny(ans3));
  //saveit(eny(quat));
 // ShowMessage(eny(quat));
  saveit(ans1); //  saveit(eny(str));
  //
//  ShowMessage(eny(ans3));
   saveit("\n");
   // saveit(eny(str));
 //saveit("");
 }
/*  char new2[1010];
strcpy(new2,eny(str));
*/
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值