寒假作业(Ⅲ)—— 回顾一下自己与合作的总结

本文介绍了作者参与的一个四则运算项目的设计过程与心得。主要内容包括符号生成、减号处理、乘除法运算处理等关键算法,并分享了合作过程中的收获与反思。

四则运算的设计

前言

寒假的这次合作编写说实在话给了我一个全新的体验,之前从未有过这样的机会和他人进行交流与学习,在合作当中,你会发现许多队友优于自己的地方,以此来映射出你未能发觉自己所潜在的毛病。说到底还是,光说不练假把式。

个人的回顾与总结

我原先的工作是设计界面与中英文的转化,说实在的,起初自己的心态有些不够认真。所以总是认为时间足够充裕,自己完全应付的过来,但在后来加入讨论与算法的编程以后,才开始觉得这个项目难度在,起初自己过分的推卸责任的思想有多么的羞愧,所以后来还是在算法的设计上努力付诸我所能做到的努力。

首先符号的生成上

#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<math.h>
using namespace std;
int main()
{
    srand((unsigned)time(NULL));
    int d[5];
    int c[5]={0},j,ch;
    d[0]=rand()%10+1;                      //整数数字随机函数 
    d[1]=rand()%10+1;
    d[2]=rand()%10+1;
    d[3]=rand()%10+1;
        for(j=0;;j++)                         //+,-,*,/的随机 
        {
            c[0]=rand()%6+42;

            if(c[0]!=44&&c[0]!=46)break;
        }
        for(j=0;;j++)
        {
            c[1]=rand()%6+42;

            if(c[1]!=44&&c[1]!=46)break;
        }
        for(j=0;;j++)
        {
            c[2]=rand()%6+42;

            if(c[2]!=44&&c[2]!=46)break;
        }
    cout<<d[0]<<char(c[0])<<d[1]<<char(c[1])<<d[2]<<char(c[2])<<d[3]<<'='<<endl;

我们最先开始策划的,是就一种情况下(即上述代码生成的未加入括号的情形),实现对四则运算结果的记录与比较,紧接着类推至其他情况。基于此,我们就在思考如何依据数学符号进行对数字的处理

我们在合作过程中都交流着彼此的想法。于是总结出下面几种解决的思路。

由于最先的情况是排除对后续影响不大的减号情形,所以我们先对减号进行处理。当遇到减号排除时,主动让后面的数字生成相反数,接着将减号转化成加号参与后续运算。

for(j=0;j<3;j++)
    {
        if(c[j]==45)  // '-'
        {
            d[j+1]=-d[j+1];
            c[j]=43;
        }
    }

紧接着,是对除法与乘法的处理。因为符号的判定顺序是从左至右去筛选判别,所以我的设计思路如下,乘法的实现上:将前一位乘到后一位上,再将前一位清零,乘号转换为加号。除法的实现上:将分子与分母记录,前一位替代至后一位的位置上,再将原位置清零。(以及对特殊情况的特殊讨论)

int fenzi=0,fenmu=1,ans,flag=0;
    
for(j=0;j<3;j++)
{
    if(c[0]==47&&c[2]==47&&c[1]==43)
    {
        fenzi=d[0]*d[3]+d[2]*d[1];
        fenmu=d[1]*d[3];
        c[1]=0;
        break;
    }
    if(c[j]==42)
    {
         d[j+1]*=d[j];
         d[j]=0;
         c[j]=43;
    }
        
    if(c[j]==47)
    {
        fenzi=d[j];
        fenmu*=d[j+1];
        d[j+1]=d[j];
        d[j]=0;
    }
}

最后是对加号处理,因为第一位数字无法判定,所以附加上if来进行处理。

for(j=0;j<3;j++)
{   
    if(c[j]==43)
    {
        if(j==0)
            fenzi+=d[0]*fenmu;
        fenzi+=d[j+1]*fenmu;            
    }       
}

最后是对结果的整体处理。

if(fenzi%fenmu==0)              //结果不一定有除号 ,可能是整数 
    cout<<fenzi/fenmu<<endl;
else
{
    cout<<fenzi<<'/'<<fenmu<<endl;
}

附上我的Github:对于四则运算小豪的解决
1093071-20170218213946004-53248500.jpg

1093071-20170218214003050-440646799.jpg

1093071-20170218214019300-1048338818.jpg

整体运行的情况还是较为令人满意,试了上百遍,唯独一种情形迟迟得不到解决(上百遍中出现的几个未能解决的情况),现在也想不出合理的解决办法。就是当除号后连着乘号,原本的分子又被应用一次加到分子当中,苦与无奈。如果可以的话,也希望得到大家的指点。

1093071-20170218213915597-1700148865.png

1093071-20170218213923425-748760073.jpg

合作的总结

两人之间的合作让我看到了有很多不一样的东西在:为了共同的目标,思路算法之间讨论、交换、修改,点子的层出不穷以及两个人都想发挥自己的能力为目标的实现而努力......种种体验都是全新的感觉,不再有过去那种一没思路就想轻言放弃的念头,有时候在交流过程中还会有新的思路出现,或者把原先的思路理清,虽然我们的结果不够成功,不够完美,但是很感谢这么一次合作在,感谢我的好队友卢凯翔同学,我们的实力还不够,因此我们更需要努力去实践自我。

顺带附上我的github提交

1093071-20170218214454269-614205282.png

总归一句话:自己与他人的差距硬生生摆在那里,就取决于你自己的觉悟与行动。菜鸡小豪希望得到大家的指点与教训,自此谢谢观赏。

转载于:https://www.cnblogs.com/S031602219/p/6414234.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值