zoukankan      html  css  js  c++  java
  • 面向对象程序设计第四次作业

    代码:https://github.com/tinghaishuo/object-oriented/tree/master/Calculator1/Calculator

    题目链接:http://www.cnblogs.com/fzuoop/p/5326667.html

    思路:

    1. 本次作业在考察栈 stack 和 sstream 知识之外,还考察中缀表达式与前缀/后缀表达式的转换,以及通过命令行编译的知识。

    2. 对于中缀表达式与前缀表达式/后缀表达式的转换,通过在网络上的学习,具体的步骤为:

    3. 参考网址:http://blog.csdn.net/antineutrino/article/details/6763722
      http://blog.csdn.net/lambol_8309/article/details/4524964

    前缀表达式:

    后缀表达式:

    本次作业开始想用后缀表达式完成,结果却出错。因为在用后缀表达式时。-10000+20-3*(20+2)中的-10000会被先用10000进行计算,符号则被当成减号再带入进行计算,导致结果出错。错误结果如下:

    于是将中缀表达式改成前缀表达式再进行计算。

    对于本次作业,才看到题目的时候有点摸不着头脑,不知道从哪下手。认真百度查阅啦相关的资料,理清了思路,其实也并没有十分困难。在写作业的同时也提高了我自学的能力。虽然改错误改得一脸大写的生无可恋,但每次想放弃的时候,还是咬咬牙,坚持吧。在得到正确答案的时候会觉得之前的努力没白费,颇有一番收获。当然,在这之间也参照啦许多同学的思路与代码,通过不断的尝试,最终完成的。

    一下是本次代码的调试结果(部分为非命令行编译):

    部分代码:

    int Calculation::CalculateExpression(queue<string>q) // 将scan得到的队列进行操作并得出计算结果
    {
    	int i, n;
    	string ss[10000];
    	string newss[10000];
    	char temp;
    	for (i = 0; !q.empty(); i++)
    	{
    		ss[i] = q.front();
    		q.pop();
    	}
    	n = i - 1;
    	for (i = n; i >= 0; i--)
    	{
    		temp = ss[i][0];
    		if (isdigit(temp))
    		{
    			numb.push(ss[i]);
    		}
    		else if (temp != '('&&temp != ')')
    		{
    			if (optr.empty() || optr.top() == ")")
    			{
    				optr.push(ss[i]);
    			}
    			else
    			{
    				compare(temp, optr.top(), ss[i]);
    			}
    		}
    		else
    		{
    			if (temp == ')')
    			{
    				optr.push(ss[i]);
    			}
    			else if (temp == '(')
    			{
    				while (optr.top() != ")")
    				{
    					numb.push(optr.top());
    					optr.pop();
    				}
    				optr.pop();
    			}
    		}
    	}
    	do
    	{
    		numb.push(optr.top());
    		optr.pop();
    	} while (!optr.empty());
    	for (i = 0; !numb.empty(); i++)
    	{
    		newss[i] = numb.top();
    		numb.pop();
    	}
    	n = i - 1;
    	for (i = n; i >= 0; i--)
    	{
    		char temp1 = newss[i][0];
    		if (isdigit(temp1))
    		{
    			final.push(Convert(newss[i]));
    		}
    		else
    		{
    			double num1 = final.top();
    			final.pop();
    			double num2 = final.top();
    			final.pop();
    			double ret = Calculate(num1, temp1, num2);
    			final.push(ret);
    		}
    	}
    	return final.top();
    	final.pop();
    }
    
    
  • 相关阅读:
    jconsole远程连接监控tomcat
    Nginx监控配置
    Nginx安装+2tomcat配置
    Flexbox布局模式的理解
    Web性能优化:图片优化
    大公司里怎样开发和部署前端代码?
    原生js下拉刷新
    全国三级城市联动 js版
    js获取智能机浏览器版本信息
    JS年月日三级联动下拉框日期选择代码
  • 原文地址:https://www.cnblogs.com/s38455/p/5392767.html
Copyright © 2011-2022 走看看