• 软件工程第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;
    }    
    

    体会: 结对编程可以使两个人有更多的交流,对解决问题的思路,想法以及大体上的重难点,在开始编程前就有更多的选择,有更好的目标。另外在一个问题上,往往不会尝试,便会有一个较优的解决方案。当两个人编码习惯不同时,结对编程也能更好地解决编码规范。

  • 相关阅读:
    2017《Java技术》预备作业 计科1501 杨柳
    Java技术预备作业02 计科1501杨柳
    H2O.ai初步使用
    Vue.Js加入bootstrap及jquery,或加入其他插件vueresource,vuex等
    初次使用git上传代码(转)
    svg绘图工具raphael.js的使用
    EF6添加mysql的edmx实体时报错:无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull
    在window下搭建Vue.Js开发环境
    SQL Server: 索引碎片产生及修复
    Windows注册表(regedit.exe)
  • 原文地址:https://www.cnblogs.com/baiys581/p/9934346.html
Copyright © 2020-2023  润新知