zoukankan      html  css  js  c++  java
  • 第三次寒假作业(一)

    第三次寒假作业

    第三次寒假作业(二)
    卢恺翔031602230

    柯奇豪031602219

    实现设计思路

    我们将这个程序的设计分为四个部分:

    1、完成界面的设计

    2、完成随机题目的生成

    3、设计判断用户输入正确与否的算法

    4、将这些融入到一个项目之中

    订立的编码规范

    由于我们都是没学过C++的小弱鸡,也没学习过任何算法。所以对这方面不是很懂该怎么做。。。我们只想让设计的变量更能够让人一眼就看出这是干什么的。并且希望能够尽可能的按照面对对象的思想来完成项目(其实也对面对对象的思想也不是很清楚)

    d数组代表随机数

    c数组代表随机符号

    choice代表用户选择中英界面的符号

    answer数组代表用户输入结果

    randomd函数代表随机d数组的函数

    randomc函数代表随机c数组的函数

    gcd代表最大公约数函数

    (这里的A1,B1,B3,C1是我们之前商量好的结果)

    A1代表没有括号的函数

    B1代表包含第一个与第二个数的括号的函数

    B3代表包含第二个与第三个数的括号的函数

    C1代表包含第一个到第三个数的括号的函数

    D1代表包含第一个和第二个数,包含第三个数和第四个数的有两个括号的函数(由于太难所以放弃了)

    程序的实现和结果测试的截图

    界面设计

    说实话,这是我们在本次项目中最简单完成的,耗时也最少。

    char calculate2::choice()
    {
    	cout<<"Please choose the language that you need:(a.Simple Chinese; b.English)"<<endl;                                 //2种语言的切换     
    	int i;
    	char choice;
    	for(i=0;;i++)
    	{
    		cin>>choice;
    	    if(choice=='a')
    	        {cout<<"请输入你所想要的题目数(你可以输入'q'则结束程序):"<<endl;break;}
    	    else if(choice=='b') 
    		    {cout<<"Please enter the number of texts you want(You can enter'q'to end the program):"<<endl;break;}
    		else
    		    {cout<<"输入不当,请重新选择选项/Please select the option again if it is wrong"<<endl;continue;}
    	}
    	return choice;
    }
    
            else 
    		    if(ch=='q')break;	
    	
    	}
        if(ch=='a') 
    	{
    		cout<<"回答正确的的题数为 :"<<endl;
    	}
    	else if(ch=='b') 
        {
    		cout<<"The number of correct answers are:"<<endl;
    	}
    	cout<<count<<endl; 
    	return 0;
    	
    }
    



    随机题目的生成

    由于之前没有任何基础,完全不知道有随机函数这个函数。也是只有再百度之后才知道原来有伪随机这个东西。由于是完全陌生的东西,我们花了整整2天才完成这些东西

    int calculate2::randomd(int d[])
    {
    		d[0]=rand()%10+1;                      //整数数字随机函数 
    	    d[1]=rand()%10+1;
    	    d[2]=rand()%10+1;
    	    d[3]=rand()%10+1;
    }
    int calculate2::randomc(int c[])
    {
    	int j;
    	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;
    	    }
    }
    

    这是我们一开始弄得,发现由于不懂伪随机的原理,所有随机的数字都是一样的。
    到后来发现是种子的问题。
    最后终于可以做到完全随机(可惜当时太激动,没有截图)

    判断用户的输入正确与否

    在这个阶段,我的同伴和我都有点晕晕乎乎的。应该是由于遭到本地各种风俗活动和班聚的影响,导致我们的交流出现了一些障碍。不能及时地传达自己想要表达的思想。
    一开始是由我来设计这个算法,但是因为自己的能力有限。最后还是选择一起合作。
    我们设计了各种各样的版本。但总是会有一些bug。在前几天,我们临时决定增加假分数的运算。当时的我们还不懂这个的难度,只是觉得很有意思。。。结果就是因为设计这个假分数的算法,导致我们原先计划在16号完成代码,拖到现在也只是一个半成品。
    但所幸的是,我们起码完成了假分数算法,也算是没有辜负自己的努力。
    下面是包含假分数的算法

    int calculate2::A1(int d[],int c[],int fenshu[])
    {
    	int j;
    	cout<<d[0]<<char(c[0])<<d[1]<<char(c[1])<<d[2]<<char(c[2])<<d[3]<<'='<<endl;
    	int k=0;
    	for(j=0;j<3;j++)
    	{
    		if(c[j]==45)  // '-'
    		{
    			d[j+1]=-d[j+1];
    			c[j]=43;
    		}
    	}		
    	for(j=0;j<3;j++)
    	{
    		
    		if(c[0]==47&&c[2]==47&&c[1]==43)
    		{
    			fenshu[0]=d[0]*d[3]+d[2]*d[1];
    			fenshu[1]=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)
    		{
    			
    			if(k==0)fenshu[0]=d[j];
    			fenshu[1]*=d[j+1];
    			d[j+1]=d[j];
    			d[j]=0;
    			k++;                                //防止分子被重置 
    			if(c[j+1]==42)
    			{
    				fenshu[0]*=d[j+2];
    				j++;
    			}
    		}
        }
    	for(j=0;j<3;j++)
    	{	
    		if(c[j]==43)
    			{
    				if(j==0)
    				    fenshu[0]+=d[0]*fenshu[1]; 
    				fenshu[0]+=d[j+1]*fenshu[1];			
    			}		
    	}
    	int r,x=fenshu[0],y=fenshu[1],t;
    	if(x>y){t=x;x=y;y=t;}
    	while(r!=0)
    	{
    		r=y%x;
    		y=x;
    		x=r;
    	}
    	fenshu[0]=fenshu[0]/y;
    	fenshu[1]=fenshu[1]/y;
    	  
     
    }
    
    		int answer[2];
    		cin>>answer[0];
    	    if(c[0]=='/'||c[1]=='/'||c[2]=='/')
    	    {
    	        if(fenshu[0]%fenshu[1]==0)                                               //结果不一定有除号 ,可能是整数 
                    if(answer[0]==fenshu[0]/fenshu[1])count++;
                else
    		    {
    			    if(answer[0]==fenshu[0])
    			    {
    			    	char fenhao;
    			    	cin>>fenhao;
    			    	if(fenhao=='/')
    			    	{
    			    		cin>>answer[1];
    			    		if(answer[1]==fenshu[1])count++;
    					}
    				}
    		    }         	        
            }
    

    效果其实还是非常好的


    整合

    就像刚才说的,由于没有好好估计时间,导致我们这个方面没有做好,虽然整合了,却老是无法运行。这也是本次项目最大的遗憾。

    main函数

    #include<iostream>
    #include<stdlib.h>
    #include<time.h>
    #include "calculate2.h"
    using namespace std;
    
    int main()
    {
    	srand((unsigned)time(NULL));
        calculate2 cal;
        char ch;
    	ch=cal.choice(); 
    	int N,i;
    	cin>>N;
    	int d[4],c[3],count=0,fenshu[2]={1,1};
    	for(i=0;i<N;i++)
    	{
    	    cal.randomd(d);
    	    cal.randomc(c);
     	    int k;
            k=rand()%4;
    	    switch(k)                          //随机4种函数类型
    	    {
    		    case 0:cal.A1(d,c,fenshu);break;
    		    case 1:cal.B1(d,c,fenshu);break;
    		    case 2:cal.B3(d,c,fenshu);break;
    		    case 3:cal.C1(d,c,fenshu);break;
    	    }
    	    if(ch=='a')
    	    {
    			cout<<"请输入你的答案:"<<endl;
    		}
    	    else if(ch=='b')
    		{
    			 cout<<"Please enter your answer :"<<endl;
    		}
    		int answer[2];
    		cin>>answer[0];
    	    if(c[0]=='/'||c[1]=='/'||c[2]=='/')
    	    {
    	        if(fenshu[0]%fenshu[1]==0)                                               //结果不一定有除号 ,可能是整数 
                    if(answer[0]==fenshu[0]/fenshu[1])count++;
                else
    		    {
    			    if(answer[0]==fenshu[0])
    			    {
    			    	char fenhao;
    			    	cin>>fenhao;
    			    	if(fenhao=='/')
    			    	{
    			    		cin>>answer[1];
    			    		if(answer[1]==fenshu[1])count++;
    					}
    				}
    		    }         	        
            }
            else 
    		    if(ch=='q')break;	
    	
    	}
        if(ch=='a') 
    	{
    		cout<<"回答正确的的题数为 :"<<endl;
    	}
    	else if(ch=='b') 
        {
    		cout<<"The number of correct answers are:"<<endl;
    	}
    	cout<<count<<endl; 
    	return 0;
    	
    }
    

    calculate2.h文件

    #ifndef CALCULATE1_H
    #define CALCULATE1_H
    
    class calculate2
    {
    	public:
    		int A1(int d[],int c[],int fenshu[]);
    	    int B1(int d[],int c[],int fenshu[]);
    	    int B3(int d[],int c[],int fenshu[]);
    	    int C1(int d[],int c[],int fenshu[]);
    	    int randomd(int d[]);
    	    int randomc(int c[]);
    	    int calculate(int d[],int c[]);
    	    char choice();
    		int gcd(int x,int y); 
    	private:
    		int d[4];
    		int c[3];
    		
    		
    };
    #endif
    

    由于calculate2.cpp的代码太长了,就不在此列出,详见GitHub。

    GitHub提交链接

    卢恺翔的GitHub最终文件为calculate2,其他文件均为之前上传的材料

    2位同学的分工和协作证据截图

    一开始我想我负责写算法,奇豪写界面。结果发现界面设计其实非常简单,而算法也很难。于是我们决定先一人写,当另一个人没有思路的时候,换另一个人写。但这可能就是我们本次项目制作失败的原因。可能这样子做导致效率太低。当然,自身能力的不足也是导致时间不足的原因。



  • 相关阅读:
    OK335xS-Android mkmmc-android-ubifs.sh hacking
    OK335xS-Android pack-ubi-256M.sh hacking
    OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
    Qt Quick Hello World hacking
    Qt QML referenceexamples attached Demo hacking
    QT 5.4.1 for Android Ubuntu QtWebView Demo
    I.MX6 working note for high efficiency
    QT 5.4.1 for Android Windows环境搭建
    mkbootimg hacking
    Generate And Play A Tone In Android hacking
  • 原文地址:https://www.cnblogs.com/leolkx/p/6412179.html
Copyright © 2011-2022 走看看