四则运算03(附第四周进度条)

设计思想:

1.将随机数生成、加减符号生成、乘除符号生成、括号生成、储存分别用函数封装

2.用判断来进行运算,多个数的存在链中,先算乘除,后算加减。

3.用一个全局变量来记数答对多少。

4.判断是否有乘除,是否有负数,是否有余数、是否有括号、位数。

5.通过判断依次引用函数。

 

设计思想:
1.将随机数生成、加减符号生成、乘除符号生成、括号生成、储存分别用函数封装
2.用判断来进行运算,多个数的存在链中,先算乘除,后算加减。
3.用一个全局变量来记数答对多少。
4.判断是否有乘除,是否有负数,是否有余数、是否有括号、位数。
5.通过判断依次引用函数。

源程序
#include<iostream>
#include"string"
#include<time.h>
#include<stack>
#define M 10;
using namespace std;
string *o;
int j=0,js=0,correct=0;
int Rnum(int min,int max ) //randon number (digit)
{
    int random;
    
    random=(rand()%(max-min+1))+min;
    return random;
}
char Ras(int judgemd )// add  subtraction multiplication division operator
    {
        int random;
        char operation;
        if(judgemd==2)random=Rnum(1,2);
        else random=Rnum(3,4);
        switch(random)
        {
            case(1):{operation='+';break;}
            case(2):{operation='-';break;}
            case(3):{operation='*';break;}
            case(4):{operation='/';break;}

        }
        return operation;
    }
bool Compare(string str)
{
    bool b=true;
    for(int i=0;i<j;i++)
    {
        if(str==o[i])
        b=false;
    }
    return b;
}
void Storage(string str)//string or 邻ⅷ?接ó表括?
{
    o[j]=str;
    j++;
}
void Asout (int judgen,int min,int max)// if here is not negaive it is true,else false
    {
        int num,num1,num2,num3;
        char ope;
        string o="";
        num1= Rnum(min,max);
        num2= Rnum(min,max);
        ope=Ras(2);
        if(judgen==2)
        {
            if(ope=='-')
            {
                if(num1<num2)
                {
                num=num1;
                num1=num2;
                num2=num;
                }
            }
        }
        o=num1+ope+num2;
        if(Compare(o)==true)
        {
            Storage(o);
            js++;
        }
        
        if(ope=='+')
        {
            num=num1+num2;
        }
        else
        {
            num=num1-num2;
        }
        //比括?较? 和í储洹?存?
        cout<<num1<<ope<<num2<<"=";
        cin>>num3;
        if(num3==num){cout<<"回?答鋏正y确ā?<<endl;correct++;}
        else {cout<<"正y确ā?答鋏案?为a"<<num<<endl;}
    }
void Mdout(int judger,int min,int max)//
    {
        int num1,num2,num,num3,remainder,remainder2;
        char ope;
        string o;
        num1= Rnum(min,max);
        num2= Rnum(min,max);
        ope=Ras(1);
        if(ope=='/')
        {
            if(num2==0) {num2=Rnum(min,max);}
            else if(judger==2)
            {
                num=num1*num2;
                num1=num;
            }
            else
            {
            remainder=num1%num2;
            }
        }
        o=num1+ope+num2;
        if(Compare(o)==true)
        {
            Storage(o);
            js++;
        }
        if(ope=='*')
        {
            num=num1*num2;
            cout<<num1<<ope<<num2<<"=";
            cin>>num3;
            if(num3==num){cout<<"回?答鋏正y确ā?<<endl;correct++;}
        else {cout<<"正y确ā?答鋏案?为a"<<num<<endl;}
        }
        else
        {
            num=num1/num2;
            cout<<num1<<ope<<num2<<"=";
            if(remainder==0)
            {
            cin>>num3;
            if(num3==num){cout<<"回?答鋏正y确ā?<<endl;correct++;}
            else {cout<<"正y确ā?答鋏案?为a"<<num<<endl;}
            }
            else
            {
            cout<<"商Θ?为a";
            cin>>num3;
            cout<<"余?数簓为a";
            cin>>remainder2;
            if(num3==num&&remainder==remainder2){cout<<"回?答鋏正y确ā?<<endl;correct++;}
            else {cout<<"正y确ā?答鋏案?为a"<<num<<"余?数簓"<<remainder<<endl;}
            }
        }
        //比括?较? 和í储洹?存?
        
        
    }
int Asmdout(int judgemd,int judgen,int judger,int min,int max)
    {
        if(judgemd==2)
        {
            Asout ( judgen, min, max);
        }
        else
        { 
            if(Rnum(1,2)==1)
            {
            Asout ( judgen, min, max);
            }
            else
            {
            Mdout(judger, min, max);
            }
        }
        return 0;
    }
int Bracket(int judgemd,int min,int max)//it  has braket, randem digit.
    {
        int num,sum;
        num=Rnum(3,10);
        int *bnum;
        char *bope;
        typedef struct Num
        {
         //struct Num *prior;
         struct Num *next;
        int data;
        }Num,*Nlist;
        typedef struct Ope
        {
         //struct Ope *prior;
         struct Ope *next;
         char data;
        }Ope,*Olist;
        Nlist n=new Num;
        n->next=NULL;
        Nlist ir=n;
        Nlist ip;
        Olist o=new Ope;
        o->next=NULL;
        Olist cr=o;
        Olist cp;
        bnum= new int[num];
        bope=new char[num-1];
        for(int i=0;i<num;i++)
        {
            bnum[i]=Rnum(min,max);
            ip= new Num;
            ip->data=bnum[i];
            ip->next=NULL;
            ir->next=ip;
            ir=ip;
        }
        for(int i=0;i<num-1;i++)
        {
            bope[i]=Ras(Rnum(1,2));
            cp= new Ope;
            cp->data=bope[i];
            cp->next=NULL;
            cr->next=cp;
            cr=cp;
        }

        cp=o;ip=n;
        for(int i=0;i<num-1;i++)
        {
            if(cp->next->data=='*')
            {
            cr=cp;ir=ip;
            cr->next=cr->next->next;
            ir->next->data=ir->next->data*ir->next->next->data;
            ir->next->next=ir->next->next->next;
            continue;
            }
            if(cp->next->data=='/')
            {
            cr=cp;ir=ip;
            cr->next=cr->next->next;
            ir->next->data=ir->next->data/ir->next->next->data;
            ir->next->next=ir->next->next->next;
            continue;
            }
            cp=cp->next;
            ip=ip->next;
            if(cp->next->next==NULL) break;
        }

        cp=o;ip=n;
        for(int i=0;i<num-1;i++)
        {
            
            if(cp->next->data=='+')
            {
            cr=cp;ir=ip;
            cr->next=cr->next->next;
            ir->next->data=ir->next->data + ir->next->next->data;
            ir->next->next=ir->next->next->next;
            continue;
            }
             if(cp->next->data=='-')
            {
            cr=cp;ir=ip;
            cr->next=cr->next->next;
            ir->next->data=ir->next->data - ir->next->next->data;
            ir->next->next=ir->next->next->next;
            continue;
            }
            cp=cp->next;
            ip=ip->next;

            if(cp->next->next==NULL) break;
        }
        for(int i=0;i<num;i++)
        {
            cout<<bnum[i];
            if(i==num-1){break;}
            cout<<bope[i];
        }
        
        js++;
        cout<<"=";
        cin>>sum;
        if(sum==n->next->data){cout<<"回?答鋏正y确ā?<<endl;correct++;}
        else{cout<<"回?答鋏错洙?误ó";}
        delete bnum,bope,ip,ir,cp,cr;
        return 0;
    }


int main()
    {
        srand(time(NULL));
         int judgeb,judgemd,judgen,judger=2,min,max,n;
         cout<<"Do you want multiplication and division? 1.Yes 2.No"<<endl;
         cin>>judgemd;
         cout<<"Do you want bracket? 1.Yes 2.No"<<endl;
         cin>>judgeb;
         if(judgeb==2)
         {
             cout<<"Do you want negative? 1.Yes 2.No"<<endl;
             cin>>judgen;
             if(judgemd==1)
             {
             cout<<"Do you want remainder? 1.Yes 2.No"<<endl;
             cin>>judger;
             }
         }
         cout<<"which is the scope of the number? input the min and max"<<endl;
         cin>>min>>max;
         cout<<"数簓量?"<<endl;
         cin>>n;
         o=new string[n];
         while(js<n)
         {
             if(judgeb==1){ Bracket(judgemd, min, max);};
             if(judgeb==2){Asmdout(judgemd, judgen, judger, min, max);};

         }
         cout<<"共2答鋏对?"<<correct<<"道台?题琣"<<endl;
         return 0;
    }

 

日期任务 听课 编写程序 阅读课本 准备考试     日统计   日期 开始时间 结束时间 中断时间 净时间 活动 备注
周日                 3.21 8:00 9:50 10 100 上课  
周一 100 60         160   3.22            
周二                 3.23 2:00 4:00   120 写程序  
周三   120         120   3.24            
周四                 3.25 7:15 9:30 15 120 写程序  
周五   120         120   3.26 2:20 19:35 500 360 写程序  
周六   360         360                
                               
日期 编号 引入阶段 排除阶段 修复时间 描述                    
3.26 1 编码 译码   运用指针时,未知错误导致异常。                    
posted @ 2016-03-26 19:35  键盘已坏  阅读(167)  评论(0编辑  收藏  举报