四则运算式自动生成

四则运算式自动生成

0.题目


我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:

· 能够自动生成四则运算练习题
· 可以定制题目数量
· 用户可以选择运算符
· 用户设置最大数(如十以内、百以内等)
· 用户选择是否有括号、是否有小数
· 用户选择输出方式(如输出到文件、打印机等)
· 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主

1.前言



这次工程是结对编程,我是驾驶员角色,顾同学是领航员角色。

代码地址: 四则运算式自动生成

2.需求分析



从题目可以大概了解到面向的服务群体是老师,小学生,和学生家长等,是一个自动生成小学四则运算的程序。考虑到小学生是为了课后练习,提高计算能力,所以还需要显示答案的功能。

3.产品设计



根据这个题目,做一下简单的产品设计,用户可以输入题目数量

然后选择运算符,由于是服务群体是小学,所以考虑加减乘除四个运算符。

用户根据自身水品,选择所要生成的运算范围,所以需要有一个最大值最小值的输入,这个可以考虑负数的情况。

用户进阶可以选择小数运算多项式运算,这里考虑用两个开关来控制。

计算自动生成的运算式的结果,供用户参考。

暂时就先考虑这么些。

4.编码



这里就简单介绍一下我们的思路和主要方法,代码源码已提供,具体方法功能都有注释,需求请在上方链接自取。

下面是我们的思路:

1.首先,我们把四则运算分为了三种,整数型运算式小数型运算式整数多项式

2.然后就是分别考虑这三种情况,这里我讲解一下小数型运算式我们的思路,关于随机小数的生成,我们采用了随机整数拼接小数点在拼接随机0到9的方法,这样可以得到随机一位小数,然后将用户所选择的不同运算符存入数组,进行随机运算符,最后就是简单的拼接小数与运算符达到自动生成小数型运算式的目的。

//生成随机小数
- (float)decimal:(int)maxNum min:(int)minNum{
    int first;
    int second;
    first = [self getRandomNumber:minNum to:maxNum];
    second = [self getRandomNumber:0 to:10];
    decimal = [NSString stringWithFormat:@"%d.%d",first,second];
    return [decimal floatValue];
}
//小数四则运算
- (void)decimalArithmetic{
    int temp;
    float first;
    float second;
    NSString *string;
    NSString *key;
    DecimalNumber *decimalNumber = [[DecimalNumber alloc]init];
    _dic = [NSMutableDictionary dictionary];
    for (int i=0; i<count; i++) {
        //生成随机运算符
        temp = [self getRandomNumber:0 to:(int)signArray.count-1];
        //NSLog(@"temp is %d",temp);
        //生成随机小数
        first = [decimalNumber decimal:maxValue min:minValue];
        second = [decimalNumber decimal:maxValue min:minValue];
        NSLog(@"(%.1f) %@ (%.1f)",first,[signArray objectAtIndex:temp],second);
        string = [NSString stringWithFormat:@"(%.1f) %@ (%.1f)",first,[signArray objectAtIndex:temp],second];
        key = [NSString stringWithFormat:@"%d",i];
        [_dic setValue:string forKey:key];
   }
   }

3.关于求和,我们将随机生成的运算式存入了字典类型,并将运算结果也存入了字典类型。

//运算式存入_dic字典
NSLog(@"%d %@ %d",first,[signArray objectAtIndex:temp],second);
string = [NSString stringWithFormat:@"%d %@ %d",first,[signArray objectAtIndex:temp],second];
key = [NSString stringWithFormat:@"%d",i];
[_dic setValue:string forKey:key];
//运算式结果存入_answerDic字典
NSString *sign = [NSString stringWithFormat:@"%@",[signArray objectAtIndex:temp]];
//计算运算结果函数
answer = [self answerFirst:first Sign:sign Second:second];
NSString *strAnswer = [NSString stringWithFormat:@"%d",answer]; [_answerDic setValue:strAnswer forKey:key];

4.展示部分,我们选择了常见的tableview去展示运算式,当用户点击运算式,便可以得到正确答案。

关于这个展示部分我不得不多说两句,这里我写完展示代码之后却一直没有效果,展示的内容不是应该输出的运算式而是一片空白,我一直调试到深夜,最后我才发现我将tableview定义了两次,给tableview传值之后又重新定义了一次。。。哇,我是在用生命写bug。。。

5.测试



这里就交给了我的导航员了,想看bug请移步--->我写的代码怎么可能有bug之烫烫烫烫

6.成果展示

启动动画

正常输入

小数式生成

多项式生成

计算结果

输入异常处理

运算符异常处理

最值异常处理

6.对领航员的评价



这次的结对编程较之上次,合作关系更为紧密,虽然自己之前也有过结对编程的经验,全是男的啊,怎么能跟女生相提并论呢,2333,开个玩笑。所以评价谈不上,更贴切的词语应该是感谢吧,我的结对伙伴----顾同学,初期邀请我为结对伙伴,让我脱离了没有结对伙伴的尴尬境地,中期一起进行的需求分析,产品设计,代码编写,尤其是测试部分,都给予了很多帮助,比如,编写代码时当我实现了某个功能而沾沾自喜时,能够真心的与我体会快乐,而不是泼冷水;当我为某个实现低头懊恼,她能为我加油鼓劲,转移我的负面情绪,当然,不仅限于此,也检测出了代码的很多bug,页面的适配问题,输入异常值的崩溃,而且UI方面也提供了很多建议,应用开启闪屏图片的挑选,界面的整体布局,颜色的搭配...诸如此类,不胜枚举。整个工程在这样积极的氛围中提前完成了,也完成了最后一次结对作业,最后再次感谢顾同学,谢谢。

7.总结



这次的工程整个过程还是相当愉快的,因为之前有开发的基础,所以这个项目对我来说难度不是很大。一些学习经验在这个工程中也得到了良好的应用,之前的开发中自己作为一个被动者,虽然在一些前辈的引导下一直规范自己,但一直对一些软件工程方面的理解不是很到位,这次自己转被动为主动,对这些知识有了深刻的理解,为什么必须先进行项目需求分析,是为了化抽象为客观,不仅编码时有助于梳理自己的思路,而且系统设计时也能考虑到一些可能的变更预留接口;编码过程中应及时注释而不是整个工程完毕之后再写,不仅可以及时定位方法函数,而且可以记录自己的一些灵感;开发工程中及时上传Git,防止一些不可预估原因导致前功尽弃等等。路漫漫其修远兮,吾努力当加之。

原文地址:https://www.cnblogs.com/stupiderman/p/8835208.html

时间: 2024-08-30 01:27:04

四则运算式自动生成的相关文章

java 自动生成四则运算式

本篇文章将要介绍一个“自动生成四则运算式”的java程序,在没有阅读<构建之法>之前,我已经通过一个类的形式实现了要求的功能,但是当阅读完成<构建之法>之后,我意识到自己所写程序的缺点,扩展性差.我通过组合模式对程序进行了修改,解耦合.可以关注公众号 HarLearn ,回复“ 自动生成四则运算式 ”,获取单类实现的源代码 1. 需求分析 自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内,把运算式存入“result.txt”文件中.题

个人项目1修改版——自动生成四则表达式

这是在上一个程序上的改版,这次要求支持真分数的四则运算,这就要求判断一个数是否为真分数,具体代码如下: 1 //这是张晓菲的第一个作业的完善,目的是自动生成30个四则运算,要求支持真分数的四则运算 2 //2016/3/3 3 4 #include <iostream> 5 #include <cmath> 6 using namespace std; 7 8 //main函数 9 void main() 10 { 11 int ran1,ran2,ran3,ran4,oper;

自动生成四则运算器

这个项目是采用c语言实现的一个能根据用户要求数目自动生成相应的简单四则运算. 代码如下: #include <stdio.h>#include <stdlib.h>#include <time.h>#include <math.h> int main() { int i=0; int a=0; int b=0; int type; char flag; int left, right; float result; printf("请输入要出的题目数

程序实现自动生成30道四则运算题目(2)

继上一次的任务后,本周老师又给自动出题系统提出了新的要求,我感觉我跟二柱子一样可怜,本次老师的要求是1.题目避免重复2.题目可以定制(数量/打印方式)3.可以控制一下参数 (1)是否有乘除法 (2)是否有括号(最多可以支持十个数参与运算)(3)数值范围(4)加减有无负数(5)除法有无余数 针对本次任务,我们逐个要求,逐个分析对于题目避免重复可以用建立字符串数组,进行字符串之间相互比较来解决,另外题目可以定制通过随机数生成题目数并带入循环解决,同时打印方式可以用文件输入输出流把数据存到文件里.对于

20194641——自动生成四则运算测试报告

一.需求分析: 编写一个适合小学生计算的四则运算小程序,程序相关参数可以定制,并把生成的等式存储到外部result.txt文件中. 二.功能实现: ·基本功能 (1)自动生成10道100以内的2个操作数的四则运算算式(+ - *  /),要求运算结果也在100以内 (2)剔除重复算式.  2 + 3 =    和  2 + 3 =     是重复算式      2 + 3 =   和   3 + 2 =  不属于重复算式 (3)题目数量可定制 (4)相关参数可控制 是否包含乘法和除法 操作数数值

20194674+自动生成四则运算题第一版报告

一.需求分析 自动生成10道100以内的2个操作数的四则运算式(+ - * /),运算结果也在100以内,把运算结果存在“result.txt”文件中,算式不可重复,题目数量.运算规则.操作数.数字范围可控制. 二.功能设计 基础功能:题目数量可设置.可选择是否含有乘除法.操作数范围可控.可定制操作数 扩展功能:可以生成带括号的运算式 三.设计实现 生成随机数函数: 四.测试运行 基础功能测试: 五.总结 发现了自己在软件开发中的各种不足,考虑问题不全面,导致最后没能做出想要的结果. 六.PSP

实现一个自动生成小学四则运算题目的命令行程序

Github项目地址:https://github.com/sumilekaedei/Myapp.git 题目:实现一个自动生成小学四则运算题目的命令行程序. 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷ e2 | (e), 其中e, e1

java实现自动生成小学四则运算——朱庭震,詹祺豪

组员:朱庭震,詹祺豪 Github地址:https://github.com/ztz1998/second/tree/master 1题目:实现一个自动生成小学四则运算题目的命令行程序. 2说明: 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式:e = n | e1 + e2 | e1 ? e2 | e1 × e2 | e1 ÷

用不同语言实现自动生成四则运算题目

Github项目地址:https://github.com/Aiyaxc/zuoye- 题目:用不同语言实现自动生成四则运算题目的命令行程序. (1)题目要求: a.  能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!) b. 除了整数外,还要支持真分数的四则运算  (2)思路: a.四则运算加减乘除,采用两个随机数,由于不能出现负数,所以在对两个随机数进行减法运算的时候,需要进行比较大小,而除法在运算中,除数不能取0. b.  进行真分数运算应注意假分数的影响