C++24点扑克牌游戏(含源码).doc_第1页
C++24点扑克牌游戏(含源码).doc_第2页
C++24点扑克牌游戏(含源码).doc_第3页
C++24点扑克牌游戏(含源码).doc_第4页
C++24点扑克牌游戏(含源码).doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、 实验设计方案1、 实验内容与目的(简单介绍实验内容,说明实验目的)实验目的:实现扑克牌游戏:对于任意的四个1到13的整数(四张扑克牌),求能算出24的表达式;运算符有()+-*/;若无解则输出相应的信息。实验内容:你的具体选择(要详细)文件输入(input.txt)输出(output.txt),输出全部结果;2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)本次实验相当于,给出四个数字,要求,在其间添加运算符和括号,使得计算结果等于24。括号的放置即为决定哪几个数先进行计算。所以,我们先确定首先进行计算的两个相邻的数,计算完成后,就相当于剩下三个数字,仍需要在它们之间添加符号;然后再决定在这三个数中哪两个相邻的数先计算。由此,我们就成功解决了数字的运算次序问题,此时不需要再考虑不同运算符号的优先级问题,因为括号的优先级高于加减乘除。通过循环,我们可以得到第一第二第三次计算的运算符,再通过计算,就可以得出和,若和等于24,即为所求解。在输出格式中,由于括号的放置共六种情况,故根据计算先后顺序的不同,输出时在不同地方放置括号;以下为循环计算的流程图:第一个数字第二个数字第三个数字第四个数字第二个数字第一个数字第二个数字第三个数字第一个数字选择先行计算的两个相邻数选择先行计算的两个相邻数第一个符号第二个符号第三个符号和 表示循环获取; 表示计算数值以下为计算函数的流程图:数字2数字1符号数字1数字2结果 +或-或*/若数字2不为0返回结果二、实验步骤、测试与结果分析1、源程序的设计(在此附上源程序(cpp文件)清单)#include#include#includeusing namespace std;char sign4=+,-,*,/;/定义一个全局变量,用于储存加减乘除符号,方便下面符号判断class game24point/24点纸牌游戏类private:double a4;/为实现精确计算,防止计算结果为小数却被强制转换为整数,采用double变量public: game24point();/构造函数double calcute(double,double,char);/计算函数,给出一个符号两个有顺序的数,计算结果void search();/搜索函数,用于寻找合适的解void print();/打印得到的四张纸牌的数值;game24point:game24point()char ch4;/由于纸牌中除了数字还有AJQK等字符,故使用字符数组ifstream infile(input.txt);if(!infile)/若打开失败cout打开文件input.txt失败!endl;exit(1);for(int i=0;ichi;/在input文件中读取数据cout #endl;cout # #endl;cout # 正在从input.txt中读取数据 #endl;cout # #endl;cout #endl;for(i=0;i4;i+)if(chi=A) ai=10;else if(chi=J) ai=11;else if(chi=Q) ai=12;else if(chi=K) ai=13;else if(chi=1) ai=1;else if(chi=2) ai=2;else if(chi=3) ai=3;else if(chi=4) ai=4;else if(chi=5) ai=5;else if(chi=6) ai=6;else if(chi=7) ai=7;else if(chi=8) ai=8;else if(chi=9) ai=9;else cout第i+1个数据输入有误!endl;exit(1);/纸牌字符转换为数值infile.close();double game24point:calcute(double a,double b,char index)if(index=+) return a+b;/若为+,则返回相应结果else if(index=-) return a-b;else if(index=*) return a*b;else if(index=/) if(b!=0) return a/b; /只有当分母不为0时,返回结果void game24point:search()double temp3,tem2;/第一个符号放置后,经过计算后相当于剩下三个数,这个数组用于存储这三个数double sum;/求得的和int judge=0;/判断是否找到一个合理的解ofstream outfile(output.txt,ios:app);/以输出的方式打开文件if(!outfile)/若文件打开失败cout打开文件output.txt失败endl;exit(1);cout #endl;cout # #endl;cout # 正在计算结果,请等待 #endl;cout # #endl;cout #endl;outfile=endl;outfile #endl;outfile # #endl;outfile # 本次24点游戏求得结果如下 #endl;outfile # #endl;outfile #endl;for(int i=0;i4;i+)/第一次放置的符号for(int j=0;j4;j+)/第二次放置的符号for(int k=0;k4;k+)/第三次放置的符号for(int m=0;m3;m+)/首先计算的两个相邻数字,共有3种情况,相当于括号的作用if(am+1=0 & signi=/) break;tempm=calcute(am,am+1,signi);temp(m+1)%3=a(m+2)%4;temp(m+2)%3=a(m+3)%4;/先确定首先计算的两个数字,计算完成相当于剩下三个数,按顺序储存在temp数组中for(int n=0;n2;n+)/三个数字选出先计算的两个相邻数字,两种情况,相当于第二个括号if(tempn+1=0 & signj=/) break;temn=calcute(tempn,tempn+1,signj);tem(n+1)%2=temp(n+2)%3;/先确定首先计算的两个数字,计算完成相当于剩下两个数,按顺序储存在temp数组中if(tem1=0 & signk=/) break;sum=calcute(tem0,tem1,signk);/计算和if(sum=24) /若和为24judge=1;/判断符为1,表示已求得解if(m=0 & n=0) outfile(a0signia1)signja2)signka3=sumendl;else if(m=0 & n=1)outfile(a0signia1)signk(a2signja3)=sumendl;else if(m=1 & n=0)outfile(a0signj(a1signia2)signka3=sumendl;else if(m=1 & n=1)outfilea0signk(a1signia2)signja3)=sumendl;else if(m=2 & n=0)outfile(a0signja1)signk(a2signia3)=sumendl;else if(m=2 & n=0)outfilea0signk(a1signj(a2signia3)=sumendl;/m=0,1,2 n=0,1表示六种括号放置可能,并按照这六种可能输出相应的格式的计算式if(judge=0) outfile这四张扑克牌无法找到一个合理的解endl;/如果没有找到结果,符号位为0outfile=endl;outfileendlendl;outfile.close();cout计算完成,结果已保存在output.txt文件中!endl;void game24point:print()cout读取成功!endl;for(int i=0;i4;i+)cout第i+1张牌 aiendl;int main(void)game24point obj;obj.print();coutendl;obj.search();coutendl;system(PAUSE);return 0;2、 实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)input.txt截图Exe执行文件截图Output.txt执行截图input.txt 输入截图如下:Jcsy.exe 执行截图如下:output.txt 输出截图如下:input.txt 输入截图如下:jcsy.exe 执行截图如下:Output.txt 输出截图如下:3、 实验总结(是否成功解决问题,总结实验中最有价值的内容,程序能够在哪些方面进一步改善,自我评价成败得失)试验中,我们按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;通过对例题的学习,我们最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;编码的速度有一个从慢到快的过程,在本次试验中,我们的速度依然比较慢,这看出我们平时编码比较少,缺乏熟练度,并对算法了解不深入;但是我们的代码看起来仍然有些凌乱,效率还没有带到真正的高效,每次运行都需要等待几秒钟。再以后我们将通过练习基础功,简化程序代码,实现简单代码完善功能的理想。1. 编码要尽量使程序简单,采用最切实可靠的算法,实现封装,不同部分的代码应分工明确,最后由主函数统一调用; 2. 编写完成后先自己检查一遍代码,然后由机器检测,找出错误的根源,从不同角度思考如何解决问题;3. 测试时应尽可能输入各种可能情况的数据以确保程序准确无误。4. 应避免任何可能的漏洞,使代码的可用性和可靠性增强。5. 试验中,我按照从简单到复杂的方法,一步一个脚印编写代码,使得程序不易发生错误,并且容易更正,编写出来的程序代码简洁明朗,效率较高;6. 通过对例题的学习,我最终将正确的代码编写出,并在不断地修改之下做到方便用户使用的要求;7. 编码的速度有一个从慢到快的过程,在本次试验中,我的速度依然比较慢,这看出我平时编码比较少,缺乏熟练度,并对算法了解不深入;8. 但是我的代码看起来仍然有些凌乱,效率还没有带到真正

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论