zoukankan      html  css  js  c++  java
  • 第六次课程作业

    第六次课程作业

    git提交链接


    本次作业要求实现核心算法,我就将上次作业讲到的后缀表达式进行代码实现,这次的作业是直接进行重构,如果按照原来生成算式的方法会显得代码杂乱且种类单一(主要的是再下次还得重构。。),所以就只做了A+B型的算式。计算的代码也没将括号考虑进去。最心累的还是被QT creator的配置浪费了一天半的时间还没弄好,后面心态就崩了(好像我开始学什么东西都会先在编译器上死很久)。。

    生成表达式的代码
    void Equation::generateExpresion()
    {
    	int b;
    	srand(time(0));
    	a[0]=randomNumber();
    	b = rand() % 4;
    	a[1] = trans_operation(b);
    	a[2] = randomNumber();
    }
    char Equation::randomNumber()
    {
    	return rand() % 10+'0';
    }
    char Equation::trans_operation(int b)
    {
    	switch (b)
    	{
    	case 0:return '+'; break;
    	case 1:return '-'; break;
    	case 2:return '*'; break;
    	case 3:return '/'; break;
    	}
    }
    

    没什么特别的。。只有一种表达式。

    用于计算的代码
    double calculateResult(Equation &N)
    {
    	Num_Struct number;
    	Operator_Struct ope;
    	ope.top = -1; number.top = -1;
    	int top_level = 0, now_level;
    	int j = 0;
    	char b[10] = { ' ' };
    	for (int i = 0; i < strlen(N.a); i++)//遍历表达式依次操作
    	{
    		if(N.a[i]=='+'||N.a[i]=='-')//等级为1的运算符
    		{
    			now_level = 1;
    			if (top_level < now_level)//优先级高于当前栈顶的优先级进栈
    			{  
    				ope.data[++ope.top] = N.a[i];
    				top_level = 1;
    			}
    			else//不高于的依次出栈
    			{
    				for (; top_level >= now_level;)//边出边和栈顶对比
    				{
    					b[j] = ope.data[ope.top];ope.top--;
    					top_level = judgelevel(ope.data[ope.top]);
    				}
    			}
    		}
    		if ( N.a[i] == '*' || N.a[i] == '/')//等级为2的运算符
    		{
    			now_level = 2;//优先级高于当前栈顶的优先级进栈
    			{
    				ope.data[++ope.top] = N.a[i];
    				top_level = 2;
    			}
    			else//不高于的依次出栈
    			{
    				for (; top_level >= now_level;)//边出边和栈顶对比
    				{
    					b[j] = ope.data[ope.top]; ope.top--;
    					top_level = judgelevel(ope.data[ope.top]);
    				}
    			}
    		}
    			if ((N.a[i] - '0') <= 9 && (N.a[i] - '0' )>= 0)//数字直接输出到保存后缀表达式的数组中
    			{
    				b[j] = N.a[i];
    				j++;
    			}
    		}
    	for (; ope.top >= 0;ope.top--)//遍历完后将栈内元素依次出栈
    	{
    		b[j] = ope.data[ope.top];
    		j++;
    	}//这两部分把中缀表达式转换成后缀表达式
    	
    	
    	//接下来是后缀表达式的计算。
    	for (int i = 0; i < strlen(b); i++)//后缀表达式的计算
    	{
    		if ((b[i] - '0') >= 0 && (b[i] - '0') <= 9)
    		{
    			number.data[++number.top] = b[i] - '0';
    		}
    		if (b[i] == '+')
    		{
    			number.data[number.top - 1] = number.data[number.top - 1] + number.data[number.top];
    		}
    		if (b[i] == '-')
    		{
    			number.data[number.top - 1] = number.data[number.top - 1] - number.data[number.top];
    		}
    		if (b[i] == '*')
    		{
    			number.data[number.top - 1] = number.data[number.top - 1] * number.data[number.top]*1.0;
    		}
    		if (b[i] == '/')
    		{
    			number.data[number.top - 1] = number.data[number.top - 1] / number.data[number.top]*1.0;
    		}
    
    	}//后缀表达式的计算
    	return number.data[0];
    }
    

    实现的截图


    C++界面的学习探索

    起初参加过一个IOS项目开发的培训体验课,用OC弄了一个简单的飞机大战,觉得还挺通俗易懂的,大都是英文的意思来写代码。在网上查MFC、QT、VC的资料,大都推崇QT,于是我也选择了QT,却出现了下面这个情况。。。


    在网上各种资料各种方法都试过去了还是没有办法解决(比较死脑筋也比较笨)。。然后一天多的时间就没有了(心态就崩了)。看的一些内容也只是纸上谈兵,学的东西就比较少。

    一次失败的作业。。
  • 相关阅读:
    如何把git上的小程序项目跑起来
    异常好用的六种vue组件通信方式
    2021.8.10面试总结
    高频面试题总结
    21年8.6面试总结
    2021.8.4上海微创软件(主react)电话面试
    promis封装各种请求
    各个框架解决跨域问题
    华人运通(主vue)前端研发初级工程师
    css常用命名
  • 原文地址:https://www.cnblogs.com/lzhkami/p/6925343.html
Copyright © 2011-2022 走看看