结对编程任务的算法流程思路

这次的结对编程的作业相较于上次的作业看似只是核心功能的嫁接过程,但是程序这个东西尤其是对于实战经验并不很足的我来讲,其实还是很有难度的,因为在这次的作业要求中新加了很多的可以由用户定制的功能要求,那么以前的取巧一些的方法在对于这种可以随意定制功能的要求之下就显得力不从心,于是对我来讲这次的作业只有部分的算法的框架还留在程序中,从代码的角度来讲的话基本所有的代码都是被重构的,作为处女座的一员即便是当初可以用的代码,再一次复审的时候发现很多不和标准的地方的有悖于自己的强迫症的地方还是不能忍受的于是果断把绝大部分的代码都重构了

对应于罗老师的要求,我把自己的算法的流程也相应地附上,

  1. 生成的题目不能重复(个人项目的要求)
  2. 四则运算在个人项目要求的基础上再支持负数,例如-1,-1/2,-3‘4/5等。

需要支持的基本设定参数:

  1. 题目的数量(个人项目的要求)
  2. 数值的范围(个人项目的要求)
  3. 题目中最多几个运算符
  4. 题目中或运算过程中有无有分数(比如进行整数除法的时候不能除尽)
  5. 题目中是否有乘除法
  6. 题目中是否有括号
  7. 题目中或运算过程中有无负数

对于(1)生成的题目不能重复这个问题,为了在在时间个效率之间做一个trade off,我选用了简单的字符串比较的算法。

(2)支持负数的这个问题其实还是有很多的细节需要考虑的,比如运算符后面如果直接是负数的话是需要加括号的,同时在解析字符串的时候也增加了不少的难度 ,在解析字符串的时候我尝试应用了C#中自带的字符串解析的函数,但是没有收到很好的效果,对于程序的控制的粒度还是太大,于是还是自己默默写了个函数自己解析了。同时负的数值在显示的时候也有很多的细节要考虑,比如说分子分母同时是负数的情况,以及只有一个是负数的情况。

(3)在支持基本的参数的设定的这个问题上,由于参数的组合真的非常的多,我甚至想到了当年做计算机组成实验的时候通过编码解析硬件指令的方式。

(4)其中针对支持多少个运算符的问题上我设定了一个上限是20个,其实这个是对我上次程序的一个比较大的改进,上次的程序只能最对支持3个运算符,感觉这次要是还支持最多三个运算符的设定是不是就太low了,于是费了一些时间把支持1-20个运算符的设定程序完成了,我会根据传进来的参数设定生成的字符串模式,在这个模式串里所有的数字都是用a,b,c,d等字母表示的(于是你可能也清楚了为什么有支持的上限,因为字母的个数是有限的啊)然后我会在这个标准的模式串的基础上进行加括号的算法和将抽象的字母生成具体的数字的算法。

(5)对于题目中是否有括号这个问题,我把加括号的这个算法封装的一个过程中,于是可以方便地控制是否这个过程参与表达式的生成。

(6)对于是否有负数的这个问题,我会在产生表达式后将表达式的最终结果计算出来,而就在计算的过程中运用中缀表达式的算法会把每一步的计算的结果存放下来,如果出现了负数就返回null.那么本次的生成就作废,重新再去生成。

(7)对于算数中是否有分数这个问题,我把生成数字的函数写成了是个形式,生成正整数,非正整数,正分数,非正分数。通过这四个函数控制在把字母变成数字的过程中到底用哪一类的数字替代字母。

时间: 2025-01-16 05:33:40

结对编程任务的算法流程思路的相关文章

对二分法的理解和结对编程情况

一.对二分法的理解 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的左半段中查找;若x大于当前位置值则在数列的右半段中继续查找,直到找到为止. 时间复杂度: 最好情况:1次 最坏情况:O(log n)次 感想:二分算法充分利用了元素间的次序关系,采用分治策略,并且便于初学者学习理解.相对顺序查找这种方法的效率较高,它能在大多数的情况,例如数据量很大,并且有序的时候,实现更快的数据查找功能,也是比较常用且易于

对二分算法的理解及结对编程情况

一.对二分算法理解 二分算法,又称折半算法,是应用分治策略的典型例子.二分查找主要对有序序列进行对所指定数字的查找,通过不断缩小搜查范围,在比较中间的数后对左右两个数组进行相同操作,以得到最终的带查找数字.时间复杂度logn,对数组较大时能显著提高程序效率. 二.算法代码 #include <iostream>using namespace std;int main(){ int n,x; cin >> n; if(1<=n<=100){  int a[n];  for

结对编程 By:李畅&amp;李雅楠

开始.结束与开始 by李畅 李雅楠 看似漫长实则短暂的结对编程项目就这么结束了.细细回想起来,其中更有着点滴的感悟与体会.那么,让我们一切从头说起,慢慢回味其中的点滴. Part 1 初遇结对编程,对其中的点滴真的是可以说完全不了解.结对编程?如何去做?怎么去做?又会有什么结果?一切,起于未知. 而在从个人项目到结对编程项目转换的初始,就开始体会到结对编程项目的细微好处了.首先是相互之间的互看代码.(先例行感慨一下自己的搭档真的很厉害)在互看代码的过程中,我们开始了解对方的思路,开始明确对方的想

软件工程结对编程博客

目录 结对编程博客 1.GitHub项目地址 2.PSP表格 3.看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节,说明你们在结对编程中是如何利用这些方法对接口进行设计的 4.计算模块接口的设计与实现过程 Input类 PreProcess类 DFS类 RingDFS类 Core类 Error类 5.画出UML图显示计算模块部分各个实体之间的关系 6.计算模块接口部分的性能改进.?记录在改进计算模块性能上所花费

实验二:结对编程 第一阶段

一.实验目标: 1)体验敏捷开发中的两人合作. 2)进一步提高个人编程技巧与实践. 二 .实验内容: 1)根据以下问题描述,练习结对编程(pair programming)实践: 2)要求学生两人一组,自由组合.每组使用一台计算机,二人共同编码,完成实验要求. 3)要求在结对编程工作期间,两人的角色至少切换 4 次: 4)编程语言不限,版本不限.建议使用 Python 或 JAVA 进行编程. 三.问题描述 四则运算:开发一个自动生成小学四则运算题目的命令行 “软件”.实现 输入你要出题的个数,

结对编程过程总结

(1)工作中的照片 (2)对方性格评价: 1.我个友善的人,愿意合作与交流,在与我的合作学习和探究活动中,能选择自己擅长的方式(语言.文字.图表等)表述研究过程和结果;主动提供自己的资料和想法,与我分享自己智慧,思路,体验合作的愉快.能倾听和尊重我提出的不同观点和评议,能对研究过程和结果进行评议,并与我交换意见,充分体现结对编程的价值. 2.是个谦逊的人,在与我的合作交流中,我们做到相互尊重,相互信赖,认真倾听对方意见,勇于承认自己的不足,有虚心向对方学习请教的良好风尚,能在合作交流中正确地评价

浅谈结对编程

浅谈结对编程 结对编程 结对编程,是一种敏捷软件开发的方法,极限编程的组成部分.结对编程技术是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计.同一个算法.同一段代码或同一组测试.一人充当“执行”角色,只负责编程.另外则负责“观察者”(或“导航”),检测bug和把控整体设计.两个程序员具有相同的缺点和盲点的可能性很小,所以当我们采用结对编程的时候会获得一个强大的解决方案.而这个解决方案恰恰是其它软件工程方法学中所没有的. 由于自己长时间都习惯了一个人编程,所以在这次结对编程的初期在做项目的

结对编程博客作业

一.结对编程: 结对编程的优点: 1.在写代码过程中,有人进行实时的“复审”,能够有效减少逻辑错误. 2.测试时,多一个人就多一个思路,可以更好地找到很多边界情况进行测试. 3.能够互相学习,开拓事业. 缺点: 1.两人的时间凑到一起并不容易,很难完全按照结对编程的工作模式进行工作. 2.分工的话必然会造成工作量上的差异,容易引起一些问题. 3.个人的编程习惯可能会有差异,相互适应的过程中会花费掉一定的实践. 我的同伴的优点: 1.性格挺好,易于沟通. 2.认真完成分工. 3.没有什么不良嗜好以

pair work结对编程(张艺 杨伊)

一.结对编程人员: 张艺(学号后三位:185) 杨伊(学号后三位:151) 二.这是我们工作的样子:(图片) 三.结对编程优缺点:  优点:  1.结对编程时间紧密,在一定程度上可以督促双方学习,提高效率. 2.Coder在coding过程中会遇到一些细小的问题,而reviewer可以及时指出错误,并给予解决方案进行讨论.  3.遇到问题时,两个人一起讨论,并补充对方没有想到的地方,是完善程序最好的方式.  缺点:  在编程过程中,很长时间是coder在coding的过程中想思路,大概这也是每个