| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2407 人关注过本帖
标题:[求助]连续四则运算的调试
取消只看楼主 加入收藏
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
结帖率:100%
收藏
 问题点数:0 回复次数:3 
[求助]连续四则运算的调试

程序如下:
#include<iostream.h>

class continual
{
public:
continual(){}

continual(int size):topa(0),bottoma(0),topb(1),bottomb(1),ta(0),tb(0),w(0)
{
a=new double[size];
b=new char[size];
b[0]='\0';
}

~continual()
{
delete []a;
delete []b;
}

void pusha(double q)
{
if(topa-bottoma>100)
{
cout<<"full!"<<endl;
}
else
{
if(topa==bottoma)
{
a[topa]=q;
topa=topa+2;
}
else
{
a[topa]=q;
topa=topa+2;
}
}
}

double popa()
{
if(topa<=bottoma)
{
cout<<"empty!"<<endl;
return 0;
}
else
{
return a[topa-2];
topa=topa-2;
}
}

void pushb(char p)
{
if(topb-bottomb>99)
{
cout<<"full!"<<endl;
}
else
{
if(topb=bottomb)
{
b[topb]=p;
topb=topb+2;
}
else
{
b[topb]=p;
topb=topb+2;
}
}
}

char popb()
{
if(topb<=bottomb)
{
cout<<"empty!"<<endl;
return 0;
}
else
{
return b[topb-2];
topb=topb-2;
}
}

void lianxv()
{
if(topa==0&&topb==1)
{
for(int i=0;i<100;i++)
{
if(i%2==0)
{
double q;
cout<<"请输入要操作的数:"<<endl;
cin>>q;
pusha(q);
ta=ta+1;
w=w+1;
}

if(i%2==1)
{
char p;
cout<<"请输入要进行的符号:"<<endl;
cin>>p;
const char e='e';
if(p==e)
{
break;
}
else
{
pushb(p);
tb=tb+1;
w=w+1;
}
}
}
}

cout<<"要进行操作的式子是:";

for(int j=0;j<w;j=j+2)
{
cout<<a[j];
cout<<b[j+1];
}
cout<<endl;

for(int k=1;k<=2*tb-1;k=k+2)
{
if(b[k]=='*'||b[k]=='/')
{
if(b[k]=='*')
{
a[k-1]=a[k-1]*a[k+1];
for(int d=k+3;d<=2*ta-1;d=d+2)
{
a[d-2]=a[d];
topa=topa-2;
}
for(int e=k+2;e<=2*tb-1;e=e+2)
{
b[e-2]=b[e];
topb=topb-2;
}
}
else
{
a[k-1]=a[k-1]/a[k+1];
for(int d=k+3;d<=2*ta-1;d=d+2)
{
a[d-2]=a[d];
topa=topa-2;
}
for(int e=k+2;e<=2*tb-1;e=e+2)
{
b[e-2]=b[e];
topb=topb-2;
}
}
}
}

for(int h=1;h<=2*tb-1;h=h+2)
{
if(b[h]=='+'||b[h]=='-')
{
if(b[h]=='+')
{
a[h-1]=a[h-1]+a[h+1];
for(int d=h+3;d<=2*ta-1;d=d+2)
{
a[d-2]=a[d];
topa=topa-2;
}
for(int e=h+2;e<=2*tb-1;e=e+2)
{
b[e-2]=b[e];
topb=topb-2;
}
}
else
{
a[h-1]=a[h-1]-a[h+1];
for(int d=h+3;d<=2*ta-1;d=d+2)
{
a[d-2]=a[d];
topa=topa-2;
}
for(int e=h+2;e<=2*tb-1;e=e+2)
{
b[e-2]=b[e];
topb=topb-2;
}
}
}
}
}

private:
int topa;
int topb;
int bottoma;
int bottomb;
int ta;
int tb;
int w;
double *a;
char *b;
};

int main()
{
continual x(100);

x.lianxv();

cout<<x.popa();

return 0;
}

其结果不是我要的结果 肯定哪个地方出错了 我找了好久也没找出来 希望大家帮帮忙 谢谢大家了




搜索更多相关主题的帖子: continual 运算 调试 double 
2006-07-25 08:39
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
怎么没人回呢?我自己回一个吧

各位高手们 帮帮小弟吧
急用啊
2006-07-25 19:47
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

楼上的可能没明白是程序的意思 都怪我没表明注释 我下次不敢这么做了 我的总体意思是
用两个栈,一个存储数字 一个存储符号
比如:
a中的元素: 3 5 2
b中的元素: + *
此时数组a中的元素就是a[0],a[2],a[4],用来存储要操作的数,而a[1],a[3]里都没有值或是默认的 反正不管它了
此时数组b中的元素就是b[1],b[3],用来存储符号。
然后判断*和/这两个运算符号的优先级别比+和-的要高
最后进行计算 最后剩一个 弹出栈 就是要求的结果了
请大家再指教指教吧

2006-07-26 06:50
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

真是遇到高人了 我觉得发这个实在是有点惭愧了 自己还不知道自己的致命的错误 非常感谢KAI前辈 和各位回帖的高手 我会把数据结构好好学的 确实这个问题用树比用栈要好的多的多 还是自己内功实在不够啊 以后我会努力的
谢谢各位了 我还以为没人回了呢 呵呵

2006-07-26 20:31
快速回复:[求助]连续四则运算的调试
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018268 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved