软件工程第3次作业
第三次作业
要求0
作业地址 https://edu.cnblogs.com/campus/nenu/2016CS/homework/2266
要求1
git仓库地址:https://git.coding.net/wudb527/f4.git
要求2
结对同学: 武东钵
博客地址:https://www.cnblogs.com/wudb527/p/9933811.html
重难点:在解决这个作业时,感觉的最重要最难解决的地方便是处理生成的算式,因为都是字符型,要想运算只能转换为可运算的式子,又因为括号,加减乘除有优先级,所以一般的用if语句解决的话,就会十分麻烦。所以武东钵提出了逆波兰式,可以将中序表达式转化为逆波兰表达式,这样就可以将运算符与运算数入栈,就可以判别优先级。####
double Calculate(int len,bool& havewrong)
{
havewrong = false;
Node t;
while(!numb.empty()) numb.pop();
while(!Opt.empty()) Opt.pop();
for(int i = 0; i < len; ++i)
{
if(line[i].name == "(")
{
Opt.push(line[i]);
}
else if(line[i].name == ")")
{
while(1)
{
t = Opt.top();
Opt.pop();
if(t.name == "(")
{
break;
}
else
{
numb.push(t);
}
}
}
else if(line[i].isnum == false)
{
if(Opt.empty() == true)
{
Opt.push(line[i]);
continue;
}
t = Opt.top();
if(t.name == "(")
{
Opt.push(line[i]);
}
else if(opt2int(line[i].name) > opt2int(t.name))
{
Opt.push(line[i]);
}
else if(opt2int(line[i].name) <= opt2int(t.name))
{
while(!Opt.empty())
{
t = Opt.top();
if(opt2int(line[i].name) > opt2int(t.name))
{
Opt.push(line[i]);
break;
}
else
{
numb.push(t);
Opt.pop();
}
}
if(Opt.empty() == true) Opt.push(line[i]);
}
}
else if(line[i].isnum == true)
{
numb.push(line[i]);
}
}
while(!Opt.empty())
{
t = Opt.top();
Opt.pop();
numb.push(t);
}
while(!numb.empty())
{
line[numb.size()-1] = numb.top();
numb.pop();
}
double ans;
Node t1,t2;
for(int i = 0; i < 7 ; ++i)
{
if(line[i].isnum == true) numb.push(line[i]);
else if(line[i].isnum == false)
{
t2 = numb.top();
numb.pop();
t1 = numb.top();
numb.pop();
t.isnum = true;
if(line[i].name == "+")
{
t.value = t1.value + t2.value;
}
else if(line[i].name == "-")
{
t.value = t1.value - t2.value;
}
else if(line[i].name == "/")
{
if(fabs(t2.value) < eps)
{
havewrong = true;
return 0.1;
}
else
t.value = t1.value / t2.value;
}
else if(line[i].name == "*")
{
t.value = t1.value * t2.value;
}
numb.push(t);
}
}
//cout<<"numb.size() = "<<numb.size()<<endl;
return (numb.top()).value;
}
体会: 结对编程可以使两个人有更多的交流,对解决问题的思路,想法以及大体上的重难点,在开始编程前就有更多的选择,有更好的目标。另外在一个问题上,往往不会尝试,便会有一个较优的解决方案。当两个人编码习惯不同时,结对编程也能更好地解决编码规范。
posted on 2018-11-09 12:04 baymax2016011926 阅读(194) 评论(1) 编辑 收藏 举报