24点游戏404包括答案

时间:2019-05-13 03:02:14下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《24点游戏404包括答案》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《24点游戏404包括答案》。

第一篇:24点游戏404包括答案

1)1118(1+1+1)*8 2)1126(1+1+2)*6 3)1127(1+2)*(1+7)4)1128(1+1*2)*8 5)1129(1+2)*(9-1)6)1134 4*(1+1)*3 7)1135(1+3)*(1+5)8)1136(1+1*3)*6 9)1137 3*(1+1*7)10)1138(1-1+3)*8 11)1139(1+1)*(3+9)12)1144 4*(1+1+4)13)1145 4*(1+1*5)14)1146(1-1+4)*6 15)1147 1*4*(7-1)16)1148(1+1)*(4+8)17)1149(4-1)*(9-1)18)1155(5-1)*(1+5)19)1156(1*5-1)*6 20)1157(1+1)*(5+7)21)1158(5-(1+1))*8 22)1166(1+1)*(6+6)23)1168 6/(1+1)*8 24)1169 6+(1+1)*9 25)1188 8+(1+1)*8 26)1224 4*2*(1+2)27)1225(2+2)*(1+5)28)1226(1+2)*(2+6)29)1227(2+2)*(7-1)30)1228(2-1+2)*8 31)1229 2*(1+2+9)32)1233 3*2*(1+3)33)1234 4*(1+2+3)34)1235(1+2)*(3+5)35)1236 3*(1*2+6)36)1237 1+2+3*7 37)1238 2*(1+3+8)38)1239 1*2*(3+9)39)1244(1+2)*(4+4)40)1245 4*(2-1+5)41)1246(2-1)*4*6 42)1247 2*(1+4+7)43)1248 1*2*(4+8)44)1249 4+2*(1+9)45)1255 1+5*5-2 46)1256(1+5-2)*6

47)1257 1*2*(5+7)48)1258(1+5)/2*8 49)1259 9+(1+2)*5 50)1266 6+(1+2)*6 51)1267(1+7)/2*6 52)1268 1*6/2*8 53)1269 6+1*2*9 54)1277(7*7-1)/2 55)1278 1+7+2*8 56)1279 1+9+2*7 57)1288 8+1*2*8 58)1289 9+2*8-1 59)1333(1+3)*(3+3)60)1334 4*(1*3+3)61)1335 1*3*(3+5)62)1336 3+3*(1+6)63)1337 1*3+3*7 64)1338 3*(1+8)-3 65)1339(1+3)*(9-3)66)1344 1*3*(4+4)67)1345 1+3+4*5 *68)1346 6/(1-3/4)69)1347(1+3)*7-4 70)1348 8+(1+3)*4 71)1349 1+3*9-4 72)1356 1+5+3*6 73)1357(7-3)*(1+5)74)1358 1+8+3*5 75)1359 9+1*3*5 76)1366 6+1*3*6 77)1367(7-3)*1*6 78)1368(1+6/3)*8 79)1369 3*(1+9)-6 80)1377(7-3)*(7-1)81)1378(7-(1+3))*8 82)1379(1+7)*9/3 83)1388(1+3)*8-8 84)1389 1*8*9/3 85)1399(9-1)*9/3 86)1444 4+4*(1+4)87)1445 1*4+4*5 88)1446 4*(1+6)-4 89)1447 1+7+4*4 90)1448 8+1*4*4 91)1449 4*(1+9-4)92)1455 4+(5-1)*5 *93)1456 4/(1-5/6)94)1457 1+4*7-5 95)1458(8-4)*(1+5)96)1459 9+(4-1)*5 97)1466(1+4)*6-6 98)1467(1+7-4)*6 99)1468(1+6-4)*8 100)1469(9-(1+4))*6 101)1477(7-4)*(1+7)102)1478 4*(1+7)-8 103)1479(7-4)*(9-1)104)1488 1*4*8-8 105)1489 1+4*8-9 *106)1555(5-1/5)*5 107)15565*(1+5)-6 108)1559(9-5)*(1+5)109)1566 1*5*6-6 110)1567 1+5*6-7 111)1568(1+8-5)*6 112)1569(9-5)*1*6 113)1578(1+7-5)*8 114)1579(9-5)*(7-1)115)1588(1*8-5)*8 116)1589(8-5)*(9-1)117)1599 9+1+5+9 118)1666(6-1)*6-6 *119)1668 6/(1-6/8)120)1669(1+9-6)*6 121)1679(9-6)*(1+7)122)1688(1+8-6)*8 123)1689 9+1+6+8 124)1699 9+1*6+9 125)1779 9+7+1+7 126)1788 8+1+7+8 127)1789 9+1*7+8 128)1799 9+7-1+9 129)1888 8+1*8+8 130)1889 9+8-1+8 131)2223 3*2*(2+2)132)2224 4*(2+2+2)133)2225 2*(2+2*5)134)2227 2*(2*7-2)135)2228(2/2+2)*8 136)2229 2+2*(2+9)137)2233(2+2)*(3+3)138)2234 3*(2+2+4)139)2235 3*(2*5-2)140)2236 2*(2*3+6)141)2237 2*(2+3+7)142)2238 2+2*(3+8)143)2239(2+2)*(9-3)144)2244 2*(4+2*4)145)2245 2+2+4*5 146)2246(2-2+4)*6 147)2247 2+2*(4+7)148)2248 8+(2+2)*4 149)2249 2+4+2*9 150)2255 2*(5+2+5)151)2256 2+2*(5+6)152)2257 2*5+2*7 153)2258 2*(5+8)-2 154)2259 2*(5-2+9)155)2266(2+6)/2*6 156)2267 6+2*(2+7)157)2268 8+2*(2+6)158)2269 2*(2*9-6)159)2277 2*(7-2+7)160)2278 2+8+2*7 161)2288(2+2)*8-8 162)2289 8+2*9-2 163)2333 3*(3+2+3)164)2335 2*(3*5-3)165)2336 2*(3+3+6)166)2337(7-3)*2*3 167)2338(3/3+2)*8 168)2339 9+3*(2+3)169)2344 4+4*(2+3)170)2345 2*(5+3+4)171)2346 2+4+3*6 172)2347 4+2*(3+7)173)2348(8-4)*2*3 174)2349 2*4*9/3 175)2355 2+5*5-3 176)2356 5*2*3-6 177)2357 2+7+3*5 178)2358 8+2*(3+5)179)2359 2+3*9-5 180)2366(2+3)*6-6 181)2367 3*(2*7-6)182)2368 3*(2+8)-6 183)2369 9+3+2*6 184)2377 7+3+2*7

185)2378(2+7)/3*8 186)2379 2*(3*7-9)187)2388 3*(2*8-8)188)2389 8/2*(9-3)189)2399 9+2*3+9 190)2444 2*(4+4+4)191)2445 4*(2+5)-4 192)2446 2+6+4*4 193)2447(7-4)*2*4 194)2448(4/4+2)*8 195)2449 4*(9-2)-4 196)2455 4+2*(5+5)197)2456 5*(2+4)-6 198)2457(4-2)*(5+7)199)2458(2*4-5)*8 200)2459(9-5)*(2+4)201)2466(2+6-4)*6 202)2467 2+4*7-6 203)2468 4*(2+6)-8 204)2469(9-6)*2*4 205)2477 2*(7+7)-4 206)2478 4*(2*7-8)207)2479 9+7+2*4 208)2488 8+2*4+8

209)2489(9-(2+4))*8 210)2499 9+2+4+9 211)2557 5+5+2*7 212)2558(5/5+2)*8 213)2559 9+5+2*5 214)2566(2*5-6)*6 215)2567 7+5+2*6 216)2568 2+5*6-8 217)2569 9+5*6/2 218)2577 7+7+2*5 219)2578(2*5-7)*8 220)2579 5*7-(2+9)221)2588 5*8-2*8 222)2589 9+2+5+8 223)2666 6+6+2*6 224)2667(6+6*7)/2 225)2668(6/6+2)*8 226)2669(9-6)*(2+6)227)2678(2+7-6)*8 228)2679 9+7+2+6 229)2688 8+2+6+8 230)2689(2*6-9)*8 231)2699 2*(9-6+9)232)2778 8+7+2+7 233)2788(2+8-7)*8 234)2789 2*(7+9)-8 235)2888(8/8+2)*8 236)2889(2+9-8)*8 237)2899(9/9+2)*8 238)3333 3*3*3-3 239)3334 3+3*(3+4)240)3335 3*3+3*5 241)3336 3+3+3*6 242)3337 3*(3/3+7)243)3338(3+3-3)*8 244)3339 3*(9-3/3)245)3344 3*(3*4-4)246)3345 4*(3/3+5)247)3346(3-3+4)*6 248)3347 3*(4-3+7)249)3348(8-4)*(3+3)250)3349 3+9+3*4 251)3355 5*5-3/3 252)3356 3+6+3*5 253)3357 3*(3*5-7)254)3359(9-5)*(3+3)255)3366 3*(6/3+6)256)3367 3*(3+7)-6 257)3368(3*3-6)*8 258)3369 9+6+3*3 *259)3377(3/7+3)*7 260)3378 8+7+3*3 261)3379 3+7*9/3 *262)3388 8/(3-8/3)263)3389 3*(3+8)-9 264)3399 9+3+3+9 265)3444 4*(3+4)-4 266)3445 3+5+4*4 267)3446(4/4+3)*6 268)3447 3*(4/4+7)269)3448(3+4-4)*8 270)3449 3*(9-4/4)271)3455 5+4+3*5 272)3456(3+5-4)*6 273)3457 7+5+3*4 274)3458 4*(3+5)-8 275)3459 3*(4+9-5)276)3466 6+6+3*4 277)3468(3*4-8)*6 278)3469 4*(3+9-6)279)3477 3+4*7-7 280)3478 8+(7-3)*4 281)3479 3*(4+7)-9 282)3489 9+3+4+8 283)3499 9+3*(9-4)284)3556(5/5+3)*6 285)3557 3*(5/5+7)286)3558(3+5-5)*8 287)3559 3*(9-5/5)288)3566(3+6-5)*6 289)3567 3*(6-5+7)290)3568 3*(6-5)*8 291)3569 3+5*6-9 292)3578 8+3*7-5 293)3579 9+7+3+5 294)3588 8+3+5+8 295)3589 5+3*9-8 296)3599 9+5*9/3 297)3666(6/6+3)*6 298)3667 3*(6/6+7)299)3668(3+6-6)*8 300)3669 9+6+3+6 301)3677 3*(7-6+7)302)3678 8+7+3+6 303)3679 3*(6+9-7)304)3688(8/8+3)*6 305)3689(3+9-8)*6 306)3699 6+3*9-9 307)3777 7+7+3+7 308)3778(3+7-7)*8 309)3779 3*(9-7/7)310)3788 3*(8/8+7)311)3789 3*(7+9-8)312)3799 3*(9/9+7)313)3888(3+8-8)*8 314)3889(9-8)*3*8 315)3899 9+3*8-9 316)3999 3*(9-9/9)317)4444 4+4+4*4 318)4445 4*(4/4+5)319)4446(4+4-4)*6 320)4447(7-4)*(4+4)321)4448 4*(4+4)-8 322)4449 4+4*(9-4)

323)4455 4*(5-4+5)324)4456 4*(5-4)*6

325)4457 4*(4+7-5)注意:*表示乘号 /表示除号

326)4458(4+4-5)*8 327)4468 4*(4+8-6)328)4469(9-6)*(4+4)*329)4477(4-4/7)*7 330)4478 4+4*7-8 331)4479 9+7+4+4 332)4488 8+4+4+8 333)4489 4*9-(4+8)334)4555 4+5*5-5 335)4556(4+5-5)*6 336)4557 4*(7-5/5)337)4558(4-5/5)*8 338)4559 9+4*5-5 339)4566 4*(6/6+5)340)4567 4*(5+7-6)341)4568(4+5-6)*8 342)4569 9+6+4+5 343)4577 4*(7/7+5)344)4578 8+7+4+5 345)4579 5+4*7-9 346)4588 4*(8/8+5)347)4589 4*(5+9-8)348)4599 4*(9/9+5)349)4666(4+6-6)*6 350)4667(7-6)*4*6 351)4668 8+6+4+6 352)4669 4*9-(6+6)353)4677 7+7+4+6 354)4678(4+6-7)*8 355)4679(7+9)/4*6 356)4688 8+4*6-8 357)4689(9-8)*4*6 358)4699 9+4*6-9 359)4777 4*(7-7/7)360)4778(4-7/7)*8 361)4788(4+7-8)*8 362)4789 4*(7+8-9)363)4799 4*(7-9/9)364)4888(4-8/8)*8 365)4889(4+8-9)*8 366)4899(4-9/9)*8 367)5555 5*5-5/5 368)5556 5+5*5-6

第二篇:delphi24点游戏

第3章 “速算24”扑克游戏--单元、异常、逻辑

3.1 “速算24”扑克游戏效果说明

“速算24”是一个考察心算能力、有助于开发智力的扑克游戏。在给出4张扑克牌之后,要求应用这些扑克牌数字做数学运算,迅速构造出一个数学表达式,得出结果24。这个游戏的关键在于迅速判断用户输入的表达式是否正确,并做出相应的反馈,告诉用户是算对了还是算错了。游戏的初始界面如图3.1所示。

图3.1 游戏的初始界面

当用户单击“开始”按钮时,系统开始发牌,随机发出4张牌,如图3.2所示为随机开始的一局游戏,给出的4张纸牌分别为“9”,“8”,“9”,“2”。在文本框中输入运算表达式,比如,输入“8*(2+(9-9))”,单击“计算”按钮,系统会出现提示框,显示“您输入的表达式的计算结果为16!”,告诉你该表达式的结果不是“24”,如图3.3所示。单击“确定”按钮,再次在文本框中输入表达式,比如“8*(2+(9/9))”,单击“计算”按钮,系统会出现提示框,显示“您真行,我服了您!”,表明运算正确,如图3.4所示。

图3.2 系统随机发4张纸牌

图3.3 运算式不正确

图3.4 运算式正确

这个游戏具体的规则如下:

(1)单击“开始”按钮,游戏开始,系统将随机发牌。

(2)请迅速在文本框中输入运算表达式,然后单击“计算”按钮。

(3)这时系统会提示您的运算是对了还是错了,在弹出的对话框中单击“OK”按钮,再次输入新的运算表达式,重复上一步,直到您的运算表达式结果正确,这时系统会恭喜您!

(4)如果结果错了还想继续或者中途想计算另一局扑克牌,就单击“重新开始”按钮,得到新一局扑克牌进行游戏。

下面,我们开始循序渐进地创建这个小游戏。在最开始,游戏的界面和效果都会非常简单,在后面我们会逐渐地完善它。

第3章 “速算24”扑克游戏--单元、异常、逻辑

3.2 生成和建立程序(1)在程序中用到了Image组件,用于放置图片。还用到了Timer组件,用于计算用户操作时间。下面我们来生成游戏的基本框架。

3.2.1 Image组件

Image组件在Additional页上,用来在窗口中显示一幅图片。它拥有如下几个主要属性: 1.Picture属性

可以在picture属性中调入图像文件。Delphi支持多种图像格式,如位图(.BMP)、图标(.ICO)、图元(.WFM)、动画光标(.ANI)、JPEG图片(.JPG、.JPEG)等。

2.AutoSize属性

当AutoSize为True时,Image组件将根据它所包含的图像的大小来调整自身的大小;当AutoSize为False时,不论图像有多大,组件将保持设计时的大小。如果组件比图像小,那么只有一部分图像是可见的。

3.Stretch属性

当Stretch为True时,位图图像将根据组件的大小调整自身的大小,当组件大小改变时,上述三种文件也做相应变化。Stretch属性对图标没有作用。

上述的AutoSize和Stretch属性决定了图像在窗口中的显示尺寸。

图3.5演示的3个Image分别为:AutoSize为True,AutoSize为False,Stretch为True的情形。可以看到,Image的原始尺寸比图片宽,矮,在上面的属性设置下,就会有不同的显示效果。

图3.5 AutoSize和Stretch的设置 3.2.2 Timer组件

在Delphi中,组件分可视组件和非可视组件。可视组件是指那些在运行期间仍然能显示的组件,例如Label,Button,Image组件等。非可视组件是指那些在程序界面设计期间可见,而在程序运行时不可见的组件,例如在System页上的Timer组件。

Timer组件能够有规律地触发OnTimer事件,发送信息给应用程序,它是编制应用程序时最为重要的组件之一。

1.Timer组件的属性

Enabled属性表示Timer是打开还是关闭。用Interval属性设置两个OnTimer事件间的间隔,单位是毫秒。将间隔设置为0相当于关闭计时器,Interval是Cardinal类型的,最大值可到4294967295,当然程序中一般不会把Interval设成很大的值。2.Timer组件的使用

Timer是独立的对象,在启动与Windows无关的逻辑和应用事件时极其有用。可以模拟时钟或计时器,可视地显示经过的时间;可以用作系统延时,Delphi提示信息出现只需在该区域停顿几秒,就是Timer组件应用的一个例子;可以检查系统环境、事件,根据结果进行响应;也可以在窗口中闪烁一段正文或图像,提示某种操作或处理正在进行等等。

尽管Delphi的计时器每秒可以产生1000次激发,在编程中还必须注意程序对Timer触发的响应。如果程序处理OnTimer事件的时间超过Interval的设定值,就可能错过事件,因为当下一次触发到来时,系统正忙于处理上一事件,则这次触发就会被忽略。同时要注意其他的Windows应用程序是否会影响Timer的触发。如果后台正运行着一个占用处理器的程序,就可能会导致Timer的触发不准确,从而使前台程序运行出现错误。

这里要强调的是Timer组件是一个非可视组件,可以把它放置到窗体或者其他容器组件上的任何位置。3.实现游戏计时功能

在本章的游戏中,我们加入一个Timer组件,实现游戏的计时功能。

在窗体中加入一个Label组件,将此组件的Caption属性设置为“使用时间”,然后从组件面板上选择System页中的Timer组件。

在Unit1中加入Form1的一个私有成员SpendTime,记录用户计算所用的时间。代码如下所示:

private { Private declarations } SpendTime:Integer;在Form1的onCreate事件中加入如下代码。将SpendTime设置为0,并将Timer1的Enabled属性设置为False,使Timer1组件不能响应OnTimer事件;并将Timer1的Interval属性设置为1000,表示当Timer1有效时,每间隔1000ms(即1秒)发生一次OnTimer事件:

procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin //初始化,设置数组RandomData的长度为4 //并将每个数组元素初始化为零

setLength(RandomData,4);for i := 0 to 3 do RandomData[i]:=0;SpendTime:=0;Timer1.Enabled:=False;Timer1.Interval:=1000;end;然后在标题为“开始”的“开始”按钮的OnClick事件中,加入如下所示的代码,将Timer1的Enabled属性设置为True,使Timer1组件有效,即现在Timer1能响应OnTimer事件,计时开始。并将SpendTime重新设置为0:

Timer1.Enabled:=True;Timer1.Interval:=1000;SpendTime:=0;//将SpendTime重新设为0 再在“计算”按钮的OnClick事件句柄中,增加下面的语句,使Timer1无效:

Timer1.Enabled:=False;最后双击Timer1组件,创建Timer1的OnTimer事件句柄,在其中加入如下所示的代码,将SpendTime加1,并设置Label5的Caption属性:

procedure TForm1.Timer1Timer(Sender: TObject);begin SpendTime:=SpendTime+1;Label5.Caption:='使用时间:'+IntToStr(SpendTime)+'秒';end;这样,每隔1秒钟,程序就刷新一次使用时间。

3.2.3 设计初始界面

按住Shift键,然后单击组件面板中Additional页中的Image组件,这时该组件边缘出现蓝色的边框,并且凹陷下去,表示可以在窗体上连续加入几个Image组件。选择好Image组件后,在窗体的左上角单击,加入1个Image组件,然后依次向右单击鼠标3次,再加入3个Image组件。最后再单击组件面板中最左边的箭头。

为了排列这4个Image组件,先利用Shift键将它们同时选上,然后右击,选择Align命令,在随后出现的Alignment对话框中的Horizontal选项组中选择Space equally,在Vertical选项组中选择Tops,表示这4个组件顶端对齐,水平方向上间距相等。

按照同样的方法加入4个Label组件、3个Button组件和1个Edit组件。按照表3.1所示设置各个组件的属性。

表3.1 各个组件的属性

组件名 Form1 Label1 属性名 Caption Caption AutoSize WordWrap Caption

属性值 速算24

1.单击“开始”按钮,游戏开始,系统将发出4张扑克牌

False False

2.要求用户利用扑克牌显示的数字,通过加减乘除运算,以最快的速度得出24(可以使用括号),JQKA和“王”算做1。然后在文本框中写好表达式,接

着单击“计算”按钮

Label2

Label3 AutoSize WordWrap Caption

False True

3.这时系统会计算输入表达式的结果,告诉用户是对还是错了。在弹出的对话框中单击“OK”按钮,如果错了可以再次输入新的表达式,重复上一步。直

到您的表达式正确,这时系统会恭喜算对了!

Label4 AutoSize WordWrap Caption AutoSize Caption Caption Caption Text

False True 在下面输入数学表达式

False 开始 计算 退出游戏 空

Button1 Button2 Button3 Edit1

现在同时选择Label1,Label2和Label3,将它们左对齐,垂直方向等距离排列。将Button1,Button2和Button3左对齐,垂直方向等距离排列。

下面放置4个Image组件,用于放置4张纸牌的图片。

先选择Image1,然后切换到对象查看器中的属性编辑器,选择属性选项页中的Picture属性,然后在Picture属性值栏中双击,或单击此属性值旁边的带有省略号的按钮,打开Picture Editor对话框,如图3.6所示。然后单击Load按钮,弹出Load Picture对话框,在此对话框中选择background.bmp文件。最后单击OK按钮,退出Picture Editor对话框。

图3.6 指定图片

使用同样的方法,设定其他3个Image组件的Picture属性。

保存我们的新项目,运行之后界面如图3.7所示,与运行时的界面图3.1稍有不同。这里是设计时界面,只有界面没有事件响应。是程序创建过程中的一个步骤的检验。但是,这个程序还没有什么具体的功能,为了让游戏运行起来,必须添加代码,创建相应的事件处理程序。

第3章 “速算24”扑克游戏--单元、异常、逻辑

生成和建立程序



3.2.4 事件处理

需要添加个事件:第一个用于响应单击开始按钮,在此事件中完成发牌,即随机显示图片;第二个用于响应单击计算按钮,解析用户在文本框中输入的表达式,计算表达式的结果,并判断表达式的结果是否等于;第三个用于响应单击退出游戏按钮,退出游戏(程

序)。

1.数据初始化

创建窗体的事件处理程序,在这里进行必要的初始化。第一步先在Unit1中添加Form1的私有成员数组:

private

{ Private declarations }

RandomData:array of Integer;然后,在对象查看器中选中Form1,选中Event选项卡,在OnCreate一栏对应的右边的空白栏中双击,创建OnCreate函数。添加如下代码。

procedure TForm1.FormCreate(Sender: TObject);

var

i:integer;

begin //初始化,设置数组RandomData的长度为4

//并将每个数组元素初始化为零

setLength(RandomData,4);

for i := 0 to 3 do

RandomData[i]:=0;

end;这里使用一个for循环语句,i是循环变量,格式是:for循环变量:=初值to末值do循环体。你也可以借助Delphi的自动完成功能,在输入for之后按下Ctrl+J键,生成如下代码:

procedure TForm1.FormCreate(Sender: TObject);

begin

for := to do

begin end;

end;在上述代码中,程序首先利用setLength函数设定可变数组RandomData的数组长度为4,然后,将数组的每一个单元都设置为0。这样,就完成了数组的数据初始化工作。

2.“开始”按钮的Click事件处理

()功能单击开始按钮时,系统就随机地发出张纸牌,显示在个组件中。

()代码首先,我们需要一个循环变量,一个字符串变量存放随机选取的图片的文件名。创建“开始”按钮的OnClick事件处理程序,在begin前头添加需要的变量,然后在此事件

中加入如下所示的代码。

procedure TForm1.Button1Click(Sender: TObject);

var

i:integer;

filename:String;

begin

Randomize;//初始化随机数

for i := 0 to 3 do

begin RandomData[i]:=Random(13)+1;//产生一个1到13的随机数

filename:=IntToStr(RandomData[i])+'.bmp';//根据随机数,得到文件名

//根据i的不同为不同的Image组件载入图像文件

case i of 0 : Image1.Picture.LoadFromFile(filename);1 : Image2.Picture.LoadFromFile(filename);2 : Image3.Picture.LoadFromFile(filename);3 : Image4.Picture.LoadFromFile(filename);

end;

edit1.Text:='';

edit1.SetFocus;

end;

end;在Delphi内部,随机数的产生实际上也是在一套算法的控制之下,Randomize函数用于初始化产生随机数的种子,保证两次产生的随机数不同,而Random(i:integer)则利用初始化过后的随机数种子产生一个1~i之间的随机数。这里i设定为13,以配合扑克牌的张数13。

用来将一个整数转换成一个字符串,和上一章中的的功能恰好相反。我们已经预先准备了位图文件,它们都是形式,文件名则是利用数字命名。中特殊的字符串运算符将两个字符串串联起来,产生一个新的字符串,我们需要的位图文件后缀是,因此,在产生文件名的时候,在数字后面加上这个字符串。语句在上一章中已经讲过,单击开始按钮后,准备接受用户的输入,然后利用方法,把焦点设置到上。是提供的方法之一,用于设置输入

焦点到某个指定的组件。

3.“计算”按钮的OnClick事件

双击“计算”按钮,创建此组件的OnClick事件响应句柄,然后在代码编辑器中加入如下所

示的代码,用于计算用户输入的表达式。

procedure TForm1.Button2Click(Sender: TObject);

var

result:integer;

answer:String;

begin

result:=TotalCompute(Edit1.Text);

if(result=24)then Application.MessageBox('您真行,我服了您!','对了',MB_OK)

else

begin answer:='您输入的表达式的计算结果为'+IntToStr(Result)+'!';Application.MessageBox(PChar(answer),'错了',MB_OK);

end;

end;这段程序根据自定义函数的计算结果判断用户的输入正确与否,并且输出相应的结果以提示

用户。

在语句“result:=TotalCompute(Edit1.Text)”中用到了一个自定义的函数TotalComp-ute,我们用它来计算用户输入的表达式。现在我们还没编写这个函数的代码,所以,目前这段代码是无法运行的。没关系,可以先把它用“//”注释掉,然后随便给 result赋一个值,测试这个事件处理程序的其他部分是否运行正常,例如:

//result:=TotalCompute(Edit1.Text);

result:=24;这样,运行后,单击“计算”按钮后的显示如图3.8所示。

图3.8 成功的提示信息

我们用一个类型的变量存放出错信息,但是函数的第一个参数要求是(字符指针)类型,因此,我们用一个强制类型转换将转换

成。4.“退出游戏”按钮的OnClick事件

双击“退出游戏”按钮,创建此组件的OnClick事件处理程序,然后在代码编辑器中加入如

下所示的代码,用于退出程序。

procedure TForm1.Button3Click(Sender: TObject);

begin

Close;

end;在上一章中我们提到可以用代替,但这里使用来结束程序的运行。这样,可以通过事件来指定在什么条件下窗体可以关闭。

第3章 “速算24”扑克游戏--单元、异常、逻辑

生成和建立程序5.OnCloseQuery事件

当调用方法来关闭窗体时,事件发生。利用事件来指定在什么条件下窗体可以关闭。事件包含一布尔型的参量,可以用它来决定窗体是否关闭。的默认值为。可以利用事件来询问用户是否真的希望马上关闭窗体。我们在这里弹出一个对话框,代码如下所示:

procedure TForm1.FormCloseQuery(Sender: TObject;var CanClose: Boolean);begin if(MessageDlg('现在要退出游戏吗?', mtConfirmation, [mbOk, mbCancel], 0)= mrOk)then canClose:=True else canClose:=False;end;MessageDlg是一种提示对话框,第一个参数是对话框询问的讯息,是一个字符串;第二个参数则代表对话框的类型,mtConfirmation是一个TMsgDlgType的枚举类型,表示这个对话框是个确认对话框。TMsgDlgType类型如下所示:

type TMsgDlgType =(mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);以上定义的对话框类型分别表示:警告、错误、提示、确认和自定义类型。

第三个参数是TMsgDlgBtn类型的集合,这个集合包含了类型为TMsgDlgBtn的按钮,TMsgDlgBtn的定义如下:

type TMsgDlgBtn =(mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mnNoToAll, mbYesToAll, mbHelp);在我们的程序中,利用了一个集合[mbOK, mbCancle],表示在对话框中显示两个按钮:OK和Cancel的组合。

最后一个参数是用来描述帮助索引的长整型变量,用来获取提示用户的帮助信息,这里我们没有任何帮助信息,先不管它。函数和用户交互,返回一个类型的数字,预先定义了一套数字,用来直观地表示对话框返回信息。如果用户单击了按钮,这个对话框返回,效果如图所示。

图3.9 关闭窗口时询问用户

现在,我们已经完成了程序的主体部分。第3章 “速算24”扑克游戏--单元、异常、逻辑

单元间的互相引用3.3.1 单元引用的概念

在第章关于单元的知识里,我们已经知道可以定义不包含窗体的单元,它集中定义了程序中使用的函数,这一节里,我们就要实现这样的一个单元,用来实现上面提到的函数。我们可以在任何单元中编写自己的函数,当然包括与窗体相连的单元。可是我们常常需要用到一些常用的函数,这时最好是创建一个不与窗体相连的独立单元,用它来容纳自己的函数,这称为独立的单元文件。当创建了不与窗体相连的独立单元文件后,项目中的其他单元就能很容易地共享这些函数,其他项目也可以很容易地调用这些函数了。对于单元间的引用,要用到语句。3.3.2 uses语句

语句告诉程序在最终的执行代码中需要用到哪些函数和过程。会自动把一些必须的单元包括进来,例如,,等。对于我们自己编写的单元,如果程序中使用了该单元的函数或代码,也需要包括在部分中。语句具有两种类型:公有引用和私有引用。在部分包含的语句代表的是本单元的公有引用,就是说,这部分的引用可以被其他引用本单元的单元继承性地引用。在部分的语句应包含在部分中的代码所需要的单元,去掉那些可以自动加入到程序中的单元。在部分包含的语句代表的是本单元的私有引用,就是说,这部分的引用只能被本单元内部使用。在部分的语句应只包含在部分中的代码所需的单元的名字。对于单元间的引用,要避免交叉引用。假设有两个单元和,如果出现在的部分的语句中,那么单元便不能出现在单元的的语句中。因为这样会产生对单元的循环访问,编译时会出现错误信息。3.3.3 创建另一个单元

创建一个不与窗体相连的单元文件的方法是,首先选择主菜单的命令,然后选择命令,此时弹出一个对话框,如图所示。在此图中选择选项卡中的,然后单击按钮。此时自动为我们创建一个名为的独立单元文件,并显示在代码编辑器中,我们只需在此加入函数即可。

图3.10 New Items对话框

单元创建之后,就需要实现单元之间的互相引用。这里有两种方法:(1)直接在Unit1中写入uses Unit2,代码如下所示:

var Form1: TForm1;implementation uses Unit2;(2)选择主菜单的File | Use Unit命令,此时Delphi弹出Use Unit对话框,如图3.11所示,在此窗口中列出当前文件没有连接的所有文件,只需选择需要连接的文件即可。当选择了某一文件并单击OK按钮后,当前文件就包含了对所选文件的引用。

图3.11 Use Unit对话框

如果当前文件已经连接了当前项目中所有其他文件,选择命令后,就会弹出如图所示的信息窗口,告诉程序员当前文件已经连接了当前项目中所有其他文件。

图3.12 Information对话框

此时再编译,程序就没有任何错误了。现在我们已经创建了,它将用作我们的数学函数定义单元。在开始定义这个单元之前,需要先了解一下关于的异常处理机制。第3章 “速算24”扑克游戏--单元、异常、逻辑

3.4 异 常 处 理

3.4.1 异常处理的概念 在应用程序开发中如何检测、处理程序的运行错误是一个很重要的问题。在 Delphi 的IDE(集成开发环境)中提供了一个完善的内置调试器,可以发现大部分程序错误。但并不是所有的错误都可以被发现,而且当程序涉及到与外设的数据交换或操作外设,如要求用户输入、读写磁盘等时,错误的发生是程序无法控制的,如输入非法字符、磁盘不能读写等。这些情况不仅会导致应用程序异常中止,而且可能引起系统的崩溃。针对这些问题,Delphi提供了一套强大的异常处理机制。巧妙地利用它,可以使程序更为强健,使用更为友好。

Delphi异常处理机制建立在Protected Blocks(保护块)的概念上。所谓保护块是指用保留字try和end封装的一段代码。保护块的作用是当应用程序发生错误时自动创建一个相应的Exception(“异常”类)。程序可以捕获并处理这个“异常”类,以确保程序的正常结束以及资源的释放和数据不受破坏。如果程序不进行处理,则系统会自动提供一个消息框。“异常”类是Delphi异常处理机制的核心,也是Delphi异常处理的主要特色。Delphi提供的所有“异常”类都是类Exception的子类。用户也可以从类Exception派生一个自定义的“异常”类。

3.4.2 资源保护方式

回收分配的资源是确保程序健壮性的一个关键。但默认情况下异常发生时程序会在出错点自动退出当前模块,因此需要一种特殊的机制来确保即使在异常发生的情况下,释放资源的语句仍能被执行,而Delphi的异常处理正提供了这种机制。

Delphi提供了一个保留字finally,用于实现资源的保护。

{分配资源}

try {资源使用情况} finally {释放资源}

end;try„finally„end就形成了一个资源保护块。finally后面的语句在任何情况下(不论程序是否发生异常)都会执行。

在异常保护的情况下,当异常发生时,系统会自动弹出一个消息框,在框中显示异常的消息。退出当前模块后异常类自动清除。

3.4.3 异常响应方式

异常响应为开发者提供了一个按需进行异常处理的机制。try„except„end形成了一个异常响应保护块。与finally不同的是:正常情况下except 后面的语句并不被执行,而当异常发生时程序自动跳到except处,进入异常响应处理模块。当异常被响应后异常类自动清除。

下面是异常响应方式的一般代码:

try {程序正常功能} except on ESomething do {响应特定异常} else {提供默认响应} end;保留字on„do用于判断异常类型。必须注意的是:except后面的语句必须包含在某一个on„do模块中,而不能单独存在。这是又一个与finally不同的地方。

3.4.4 提供默认响应

在异常响应模块中,一般我们只对希望响应的特定异常进行处理。如果一个异常发生而响应模块并没有包含对它的处理代码,则退出当前响应模块,异常类仍被保留。

为了保证任何异常发生后都能在当前响应模块中被清除,可以定义默认响应:

try {程序正常功能} except on ESomething do {响应特定异常} else {提供默认响应} end;由于else可以响应任何异常,包括我们一无所知的异常,因此在默认响应中最好只包括诸如显示一个消息框之类的处理,而不要改变程序的运行状态或数据。

第3章 “速算24”扑克游戏--单元、异常、逻辑

3.5 数学逻辑单元(1)

此游戏程序最关键的地方是如何将用户输入的字符串表达式解析成数学表达式。为了使程序结构清晰明了,我们将此解析代码和程序的主代码分开,单独编写成一个单元。

3.5.1 算法设计

游戏的难点是如何将一字符串形式的表达式解析成计算机能计算的算术表达式。例如对于字符串“3^(4*(9+4))”,如何让计算机解析、计算。

我们的想法是按照数学四则运算规则,先逐层进入最里层的括号,然后在括号内部计算乘方,接着进行乘(除)法运算,最后按顺序进行加(减)运算,当本层括号内部计算完成后,返回结果,去掉括号内部数据,退出到下一级括号(如果有)内进行计算。

这里面涉及的技术细节主要有下面几点:

(1)层层剥离括号,然后从最里层的括号开始计算。(2)对于每一个运算符号,找到符号两侧的数字,形成一个计算式。

(3)每一个子计算式完成后,运算结果返回到原始数列中,作为子串的一部分,继续进行上述计算。

3.5.2 字符串的相关函数

在游戏中,用户输入的都是字符数据,我们需要从这些字符中分析得到数字和运算符号,因此要用到与字符串操作有关的函数。

function Pos(sub , all:string):integer;这个函数含有两个参数:sub表示要查找的字符,all表示原字符串。函数在字符串all中寻找指定的字符sub的位置,如果字符串中不存在sub字符,则函数结果为0。

function LastDelimiter(sub,all :string):integer 这个函数含有两个参数:sub表示要查找的字符,all表示原字符串。函数返回在字符串all中所有查找到的指定字符sub的最后一个的位置,如果字符串中不存在sub字符,则函数结果为0。

function Copy(allstring:string;first,length:integer):string 这个函数的3个参数的含义分别是:allstring代表原来的字符串,first表示拷贝开始的位置,length表示要拷贝的子串长度。函数返回拷贝成功的子串。

procedure Delete(str:string;ppos,length:integer)这个过程用于删除字符串中的一段字符。参数str代表将要操作的字符串,ppos代表开始删除的位置,length表示将要删除多少个字符。function Length(S): Integer;Length函数返回字符串S的长度。

function Trim(const S: string): string;overload;function Trim(const S: WideString): WideString;overload;Trim函数返回字符串S去掉前面和后面的空格后的字符串。

下面的例子给出一个综合利用字符串处理函数编写的一个处理特定字符串的函数,它的功能是:输入一个字符串后,可以返回字符串中两个单括号之间的子字符串,并去掉前面和后面带着的空格:

function GetMyStr(const S: string): string;begin Result:=Trim(Copy(S,Pos('<',S)+1,Pos('>',S)-Pos('<',S)-1));end;比如我们在程序中写到GetMyStr(‘This is a test < Result to output > end of test’);,会得到字符串“Result to output”。

3.5.3 算法的代码编写

基于上述的考虑和知识基础,我们在声明部分定义下列几个主要函数:

(1)AnyLastPos函数定位最后一个算术运算符的位置。

function AnyLastPos(Str:String):integer;(2)AnyFirstPos函数定位最先一个算术运算符的位置。

function AnyFirstPos(Str:String):integer;(3)AnyFirstF函数判断最先出现的符号是+号、-号、*号还是/号。

function AnyFirstF(Str:String):Char;(4)SubCompute函数用于计算不带()号的加、减、乘、除运算。

function SubCompute(Str:String):integer;(5)TotalCompute函数用于计算表达式的结果。

function TotalCompute(Str:String):integer;1.寻找最后一个算术运算符

定义4个整数变量SubPos,PluPos,MulPos,DivPos,在给定的字符串中寻找+,-,*,/的最后位置,将这些位置存储在上述的4个变量中,然后比较4个符号出现的位置,得到数值最大的运算符;在返回的结果中,返回这个运算符的位置。

程序代码如下所示:

function AnyLastPos(Str:String):integer;var SubPos:integer;PluPos:integer;MulPos:integer;DivPos:integer;Pos:Integer;begin //定位字符串中最后一个运算符的位置

SubPos:=LastDelimiter('-',Str);PluPos:=LastDelimiter('+',Str);MulPos:=LastDelimiter('*',Str);DivPos:=LastDelimiter('/',Str);Pos:=SubPos;if(Pos

分别在给定的字符串中寻找+,-,*,/第一次出现的位置,然后比较4个符号出现的位置,得到数值最小的运算符。在返回的结果中,传递的是这个运算符的位置。

程序代码如下所示:

function AnyFirstPos(Str:String):integer;var SubPos:integer;PluPos:integer;MulPos:integer;DivPos:integer;ForPos:integer;FirstPos:integer;begin //定位字符串中最先一个运算符的位置

SubPos:=Pos('-',Str);PluPos:=Pos('+',Str);MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);ForPos:=Pos('^',Str);FirstPos:=200;if(SubPos=0)then //如果没有-号

SubPos:=200;//将SubPos设置成一个不可能的值

if(PluPos=0)then //如果没有+号

PluPos:=200;//将PluPos设置成一个不可能的值

if(MulPos=0)then //如果没有*号

MulPos:=200;//将MulPos设置成一个不可能的值

if(DivPos=0)then //如果没有/号

DivPos:=200;//将DivPos设置成一个不可能的值

if(ForPos=0)then //如果没有^号

ForPos:=200;//将ForPos设置成一个不可能的值

if(FirstPos>SubPos)then FirstPos:=SubPos;if(FirstPos>PluPos)then FirstPos:=PluPos;if(FirstPos>MulPos)then FirstPos:=MulPos;if(FirstPos>DivPos)then FirstPos:=DivPos;if(FirstPos>ForPos)then FirstPos:=ForPos;

AnyFirstPos:=FirstPos;//结束函数,返回位置

end;第3章 “速算24”扑克游戏--单元、异常、逻辑

3.5 数学逻辑单元(2)

3.得到最先出现的运算符类型

这个函数的返回结果是Char类型,代表这是一个字符变量。实际上,它返回的是+、-、*、/ 这4个符号中最早出现的一个。

程序分别寻找4个符号最早出现的位置,然后判断最先出现的是哪一种符号,再根据符号类型返回代表运算符的字符。

在具体的实现过程中,因为我们要得到最先出现的运算符,所以判断的是每次寻找后各个运算符的位置的最小值。如果不存在这个运算符,则将代表这个运算符位置的相应变量设置为200。对于本程序来说,这是一个搜索过程中不可能达到的值,这样就排除了这个位置的继续比较的可能。

程序代码如下所示:

function AnyFirstF(Str:String):Char;var SubPos:integer;PluPos:integer;MulPos:integer;DivPos:integer;Operator:char;tempPos:integer;begin SubPos:=Pos('-',Str);PluPos:=Pos('+',Str);MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);

if(SubPos=0)then //如果没有-号

SubPos:=200;//将SubPos设置成一个不可能的值

if(PluPos=0)then //如果没有+号

PluPos:=200;//将PluPos设置成一个不可能的值

if(MulPos=0)then //如果没有*号

MulPos:=200;//将MulPos设置成一个不可能的值

if(DivPos=0)then //如果没有/号

DivPos:=200;//将DivPos设置成一个不可能的值

Operator:='-';tempPos:=SubPos;if(tempPos>PluPos)then begin tempPos:=PluPos;Operator:='+';end;if(tempPos>MulPos)then begin tempPos:=MulPos;Operator:='*';end;if(tempPos>DivPos)then begin tempPos:=DivPos;Operator:='/';end;

AnyFirstF:=Operator;//结束函数,返回位置 end;4.计算不带括号的运算表达式

做完上述工作后,我们可以开始进行一些实际的运算了。

包括加、减、乘、除、乘方运算的表达式的程序算法如下所示:

(1)寻找乘方符号“^”,如果存在,则计算一次乘方,去掉计算过的部分,接着循环查找和计算子串的乘方。

(2)寻找乘号“*”或者除号“/”,如果存在,则计算一次乘(除)法,去掉计算过的部分,接着循环计算子串的乘除法。

(3)寻找加号“+”或者减号“-”,如果存在,则计算一次加(减)法,去掉计算过的部分,接着循环计算子串的加减法。

上述算法是严格按照顺序进行的,它体现了数学运算中的优先关系,经过上述的计算,子字符串被分解,计算完毕。

无论是乘方、乘除法还是加减法,内部实现的逻辑是基本一致的。下面,我们设定有一个运算表达式:3+2^5/4。

程序代码如下所示:

function SubCompute(Str:String):integer;var Middle:String;Mul2:String;Right:String;First:integer;tempStr:String;temp:integer;Left:String;Mul1:String;MulPos:Integer;DivPos:Integer;Fuhao:Char;begin Middle:='';Mul2:='';Right:='';

//定位第一个^号位置,计算乘方

First:=Pos('^',Str);While(First<>0)do //循环计算乘方

begin tempStr:=Copy(Str,1,First-1);temp:=AnyLastPos(tempStr);Left:=Copy(Str,1,temp);Mul1:=Copy(str,temp+1,First-temp-1);tempStr:=Copy(str,First+1,Length(str)-First);temp:=AnyFirstPos(tempStr);if(temp=200)then begin Mul2:=tempStr;Right:='';end else begin Mul2 :=Copy(tempStr,1,temp-1);Right:=Copy(tempStr,temp,Length(tempStr)-temp+1);end;Middle:=FloatToStr(IntPower(StrToInt(Mul1),StrToInt(Mul2)));Str:=Left+Middle+Right;First:=Pos('^',Str);end;

//定位第一个*号或/号的位置

MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);First:=MulPos;if(MulPos>DivPos)then First:=DivPos;if((DivPos=0)and(MulPos<>0))then begin First:=MulPos;DivPos:=2000;// 将除号所在位置设置成一个大于MulPos但又不可能的值

end;if((DivPos<>0)and(MulPos=0))then begin First:=DivPos;MulPos:=2000;// 将乘号所在位置设置成一个大于DivPos但不可能的值

end;while(First<>0)do //循环计算乘、除

begin tempStr:=Copy(Str,1,First-1);temp:=AnyLastPos(tempStr);Left:=Copy(Str,1,temp);Mul1:=Copy(Str,temp+1,First-temp-1);tempStr:=Copy(Str,First+1,Length(Str)-First);temp:=AnyFirstPos(tempStr);if(temp=200)then begin Mul2:=tempStr;Right:='';end else begin Mul2 :=Copy(tempstr,1,temp-1);Right:=Copy(tempStr,temp,Length(tempStr)-temp+1);end;if(MulPos>DivPos)then Middle:=IntToStr(StrToInt(Mul1)div StrToInt(Mul2))else Middle:=IntToStr(StrToInt(Mul1)*StrToInt(Mul2));Str:=Left+Middle+Right;

MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);First:=MulPos;if(MulPos>DivPos)then First:=DivPos;

if((DivPos=0)and(MulPos<>0))then begin First:=MulPos;DivPos:=2000;// 将除号所在位置设置成一个大于MulPos但又不可能的值

end;if((DivPos<>0)and(MulPos=0))then begin First:=DivPos;MulPos:=2000;// 将乘号所在位置设置成一个大于DivPos但不可能的值

end;end;//定位+、-号首先出现的位置

First:=AnyFirstPos(Str);if(First=200)then //如果没有+、-号,则可以直接返回结果

begin SubCompute:=StrToInt(Str);exit;end;Fuhao:=AnyFirstF(Str);//确定首先出现的符号是+号还是-号

while(First<>0)do begin //如果找到+号或-号

tempStr:=Copy(Str,1,First-1);temp:=AnyLastPos(tempStr);Left:=Copy(Str,1,temp);Mul1:=Copy(Str,temp+1,First-temp-1);tempStr:=Copy(Str,First+1,Length(Str)-First);temp:=AnyFirstPos(tempStr);if(temp=200)then begin Mul2:=tempStr;Right:='';end else begin Mul2 :=Copy(tempStr,1,temp-1);Right :=Copy(tempStr,temp,Length(tempStr)-temp+1);end;if(Fuhao='+')then Middle:=IntToStr(StrToInt(Mul1)+StrToInt(Mul2))else Middle:=IntToStr(StrToInt(Mul1)-StrToInt(Mul2));Str:=Left+Middle+Right;First:=AnyFirstPos(Str);if(First=200)then break;Fuhao:=AnyFirstF(Str);end;

SubCompute:=StrToInt(Middle);end;程序执行过程如下所示:

(1)定位字符串中第一个乘方符号“^”的位置First。这个式子中的First为4。

(2)如果存在乘方符号,即First不等于0,则继续进行计算,否则退出循环。

(3)进入循环体内部,得到“^”前面的子串tempStr(“3+2”),寻找tempStr中的最后一个运算符temp(这里是“+”),则Temp和First之间的字符就是乘方符号的第一个参数(“2”)。

(4)同样的逻辑,得到“^”后面的子串tempStr(“5/4”),寻找tempStr中的第一个运算符位置temp(“/”),则Temp和First之间的字符就是乘方符号的第二个参数(“5”)。

(5)去掉乘方符号和两个参数,得到左侧子串left(“3+”)和右侧子串right(“/4”)。

(6)利用这两个参数和乘方符号,计算乘方,将结果返回,并插入在left和right之间,得到一次计算后的新字符串(“3+32/4”)。

(7)判断新串内部是否包含“^”,如果包含,则返回到步骤(3),不包含则进入下一种运算。

第3章 “速算24”扑克游戏--单元、异常、逻辑

3.5 数学逻辑单元(3)5.计算整个表达式的值

TotalCompute函数利用循环,找到最内层的一对括号,然后调用SubCompute函数处理这一对括号中的表达式。SubCompute函数处理的表达式中已经没有括号了,因此SubCompute只需处理乘方、加、减、乘、除,返回结果,形成新的字符串。

当整个字符串缩减至空值时,整个表达式计算完成。

程序代码如下所示:

function TotalCompute(Str:String):integer;var First:integer;Last:integer;SubStr:String;LeftStr:String;Middle:String;Right:String;temp:integer;begin First:=LastDelimiter('(',Str);//定位最后一个(号位置 while(First<>0)do begin SubStr:=Copy(Str,First+1,Length(Str)-First);Last:= Pos(')',Str);//Last:=Last+First;//定位最后一个(号以后的最开始的)号位置

LeftStr:=Copy(Str,1,First-1);//(号左边的字符串

Middle:=Copy(Str,First+1,Last-First-1);//()号中间的字符串

Right:=Copy(Str,Last+1,Length(Str)-Last);//)号右边的字符串

temp:=SubCompute(Middle);//进入下面的计算

Middle:=IntToStr(temp);

Str:=LeftStr+Middle+Right;First:=LastDelimiter('(',Str);end;

Result:=SubCompute(Str);end;end.在程序中,“计算”按钮的OnClick事件处理程序中调用TotalCompute函数。函数中使用了一些数学函数和定位字符串的函数,这些函数Delphi已经在相应的系统单元中进行了定义,我们需要把这些系统单元包括到文件里面:

uses Sysutils,Math;将前面调用TotalCompute的注释去掉,把代码改回:

procedure TForm1.Button2Click(Sender: TObject);var result:integer;answer:String;begin result:=TotalCompute(Edit1.Text);if(result=24)then Application.MessageBox('您真行,我服了您!','对了',MB_OK)else begin

第三篇:c++24点游戏

c++24点游戏

#include “iostream” #include “string” using namespace std;

//定义Stack类

const maxsize=20;

enum Error_code { success, overflow, underflow };

template class Stack { public: Stack();

bool empty()const;bool full()const;int size()const;void clear();

Error_code top(T &item)const;Error_code pop();

Error_code push(const T &item);private: int count;T entry[maxsize];};

template Stack::Stack(){ count=0;}

template

bool Stack::empty()const { return count==0;}

template

bool Stack::full()const { return count==maxsize;}

template int Stack::size()const { return count;}

template void Stack::clear(){ count=0;}

template

Error_code Stack::top(T &item)const { if(empty())return underflow;item= entry[count-1];return success;}

template

Error_code Stack::pop(){ if(empty())return underflow;count--;return success;}

template

Error_code Stack::push(const T &item){ if(full())return overflow;entry[count++]=item;return success;}

Stack sign;Stack num;

int set;

// 判断程序中的异常,以便适时退出?//

void process(char c)

//计算两个数的 +-* / 运算// { int k=0;double a,b;sign.pop();

if(num.top(b)==success){

num.pop();

if(num.top(a)==success){ num.pop();k=1;} } if(k){ switch(c){

case '+': num.push(a+b);break;case '-': num.push(a-b);break;case '*': num.push(a*b);break;case '/': if(b==0){ set=4;num.push(-1);} else

num.push(a/b);break;} }

else {set=1;num.push(-1);} }

void get_command(string &str){

cout<<“n请输入要进行运算的表达式,包括” +,-,*,/,=,(,)“和数字,”<

<<“注意: 以数字开头,等号结尾,中间括号要匹配.”<>str;}

double do_command(const string &str){ string s=“";

double outcome=-1;char c;

for(int i=0;str[i]!='';i++){

if(set!=0)break;//例外 则停止运行

while(1){ //分离数据与运算符

if(str[i]<='9' && str[i]>='0' || str[i]=='.'){ s+=str[i];i++;} else { if(s!=”“){

if(num.push(atof(s.c_str()))==overflow)set=3;s=”“;} break;} }

char ch= str[i];

switch(ch){ //处理运算的优先级,并注意例外抛出

case '*': case '/':

if(sign.top(c)==success)if(c=='*'||c=='/')process(c);if(sign.push(ch)==overflow)set=3;break;case '+': case '-':

while(sign.top(c)==success){ if(c!='(')process(c);else break;}

if(sign.push(ch)==overflow)set=3;break;case '(':

if(sign.push(ch)==overflow)set=3;break;case ')':

while(sign.top(c)==success){ if(c!='(')process(c);else break;}

sign.pop();break;case '=':

while(sign.top(c)==success){ if(c!='(')process(c);else break;} break;

default: set=2;break;} }

if(num.size()==1 && sign.size()==0)num.top(outcome);else set=1;

if(set==0)cout<<”运算结果是:n“<

if(set==1)cout<<”n您输入的不匹配,有错误发生。Result lost!“<

if(set==4)cout<<”n 分母为0,不能进行除法运算,出现溢出,Lost result!“<

return outcome;}

void main()int f(){ double out;do { string str,s;set=0;

get_command(str);s=str;

if(str[0]=='-')str='0'+str;//处理表达式中的负号

for(int i=1;str[i]!='';i++){ if(str[i]=='-' && str[i-1]=='('){ str.insert(i,”0“);i++;} } out= do_command(str);

cout<

我gai过此行

cout<<”如果你算的结果不等于24,需要重新计算请输入你算出的结果,程序有漏洞,请合作。“<>out;cout<<”谢谢合作“<

return out;}

int main(void)

{

int ii,zz,jj;

printf(”0-12的4个数字nn“);

for(jj=0;jj<2;)

{

for(ii=0;ii<4;ii++)

{

zz=rand()()% 12;

cout<

}

cout<<”请用这4个数字算出24“<

f();

cout<<”是否继续;是1否2"<

cin>>jj;

cout<

}

第四篇:2017信息技术选择题包括答案

2017信息技术中考选择题

1. 机器人中的各种电机属于机器人的()设备。A.通信

B.输入

C.输出

D.存储 2.信息技术是指()、存储、处理、传递和应用信息的技术 A.分析B.固化C.分解D.获取

3.微型计算机的运算器、控制器及内存储器的总称是()。A.MPU B.CPU C.ALU

D.主机 4.键盘上F1-F12属于()

A.数字键区

B.光标控制键区

C.功能键区

D.主键区 5.感染计算机病毒后,很多情况下并不是产刻就对计算机系统造成损害,这属于计算机病毒的:()

A.良性

B.犹豫性

C.自觉性

D.潜伏性 6.多媒体信息不包括()

A.影像 动画

B.文字、图形

C.音频、视频

D.硬盘、网卡 7.Caps Lock键的功能是()。

A.测试容量

B.复制数据

C.大写锁定

D.暂停 8.按照下面的流程图运行,描述正确的是:()

A.以两轮中间为中心,小车向左转1秒

B.以左轮为中心,小车向右转1秒

C.以右轮为中心,小车向左转1秒

D.以两轮中间为中心,小车向右转1秒

9.按照下面的流程图运行,描述正确的是:()

A.小车在地面行走,撞到凸出障碍物后会后退选择择其他方式

B.小车在桌面上行走,当走到桌子边的时候会自动后退左转——防跌落

程序

C.小车在地面行走能避开地面上的凸出障碍物——智能避障程序。D.小车会走出一个“凸”字的图形 10.小明搭建的“二驱四轮车”。小车按下面的流程图运行,会走出一个什么样的(近似)图形呢?()2017信息技术中考选择题

A.波浪形

B.“W”型

C.圆环型

D.“M”型 11.下列不属于多媒体技术应用的是()A.用笔在纸上画画

B.用PhotoShop软件处理图片 C.用PowerPoint软件制作课件 D.用FLASH软件制作动画

12.按照下面的流程图运行,描述正确的是:

A.以左轮为中心,小车向左转1秒 B.以右轮为中心,小车向右转1秒 C.以右轮为中心,小车向左转1秒 D.以左轮为中心,小车向右转1秒

13.计算机机网络一般分为广域网和局域网两大类,其分类依据是()A.地理范围

B.计算机机软件

C.连接介质

D.计算机机硬件 14.以下文件的扩展名,均属于“图片”文件的是:()A..mp4.wmv.avi.flv

B..xls.doc.ppt.htm

C..jpg.bmp.gif.png

D..mid.mp3.wma.wav

15.感染计算机病毒后,常规方法通常无法找到该病毒,这属于计算机病毒的()

A.隐蔽性

B.变化性

C.可执行性

D.破坏性 16.现代微机采用的主要元件是()

A.大规模、超大规模集成电路

B.电子管

C.晶体管

D.中小规模集成电路 17.下面IP地址正确的是()

A.555.23.4.0

B.127.0.0.1 C.210.11.200

D.21,6,250,8 18.PC机的含义是()

A.苹果机

B.个人计算机

C.巨型机

D.大型机 19.以下应用软件不可以播放音乐文件的是:()

A.Windows Media Player B.千千静听 C.美图秀秀D.暴风影音 20.被称为计算机之父的是()

A.比尔盖茨

B.乔布斯

C.图灵D.冯·诺依曼 21.以下文件扩展名,均属于“声音”文件的是:()

A..mid.mp3.wma.wav

B..doc.mp3.wav.mid

C..ppt.mp3.wmv.xls

D..mid.wav.mp4.htm

2017信息技术中考选择题

22.“粘贴”的快捷键是()

A.Ctrl+V

B.Ctrl+Z

C.Ctrl+X

D.Ctrl+C 23.CPU是计算的核心,它是由控制器和()组成的。A.输入设备B.存储器C.输出设备D.运算器

24.小车右转2秒可以转90度角,小车按下面的流程图运行会走出一个“田”,那么小车行驶的起始位置是什么呢?A

25.使用搜索引擎搜索信息,有时会搜索不到需要的信息,可采取的改善措施是()①重新提炼关键词后再搜索②对原有关键词加双引号后重

新③ 引擎后重新搜索④采用多关键词重新搜索 A.①②④ B.①②③

C.①③④

D.②③④ 26.对于信息,下列说法不正确的是()

A.信息必须以某种记录形式表示出来,如语音、文字符号声音等 B.信息必须寄存在某种传播媒体中,如纸张、声波等 C.信息是以二进制的形式在计算机中存储的。

D.信息本身是一些有形物质,如人体、报纸、书等。27.购买了一款商业软件后,就拥有了它的()A.修改权B.署名权C.复制销售权D.使用权 28.WPS Office是一款优秀的国产()

A.杀毒软件B.多媒体播放软件C.办公软件D.游戏软件 29.下面设备中,哪个是输出设备()

A.投影仪B.手写板C.扫描仪D.摄像头 30.“美图秀秀”中“美容”里的“磨皮”原理是 A.增加亮度

B.增加清晰度 C.增加饱和度

D.增加模糊度 31.文件的类型由文件的()来决定。

A.主文件名B.扩展名C.存储位置D.内容

32.在浏览器与WEB服务器之间信息交互的过程中,使用的协议是()A.POP3

B.MIME

C.HTTP

D.SMTP

33.家用数码相机拍摄的照片文件,扩展名通常是()

A..bmp B..gif C.mp4 D..jpg

34.听说某商场打折了,你赶过去购物,到了才发现优惠活动已结束,这体现了信息的()

A.必要性

B.时效性

C.载体依附性

D.共享性

2017信息技术中考选择题

35.小车右转约2秒可以转90度角,小车按下面的流程图运行,会走出一个“田”字,那么小车行驶的起始位置是什么呢?B

36.在计算机中1BM的含义是()

A.1024K个字节B.1000K个字节C.1000K个汉字D.1024K个汉字37.计算机网络最突出的优点是()

A.存储容量大B.运算精度高C.资源共享D.运算速度快 38.世界上第一台电子计算机叫

A.ANIAC

B.INAC

C.ENIAC

D.ANAC

39.小车右转约2秒可以转90度角,小车按下面的流程图运行,会走出一个“田”字,那么小车行驶的起始位置是什么呢?

2017信息技术中考选择题

40.以下不属于基本程序结构的是()

A.分支结构B.顺序结构C.嵌套结构D.循环结构

41.计算机病毒感染后,会对计算机系统造成各种各样的损害,这属于计算机病毒的

A.恶性B.无知性C.破坏性D.潜伏性

42.下列选项项中()与其它三个选项不属于同一类软件。

A.PowerPoint 2003 B.Word 2007 C.Flash 8 D.Windows 10

43.计算机操作系统的主要功能是()

A.进行数据处理 B.把程序转换为目标程序

C.管理系统所有的软件、硬件资源

D.实现软件、硬件转换 44.根据某些特定需要编制的专用程序称为()

A.系统软件B.应用软件C.机器语言D.汇编语言 45.以下描述Shift键的不正确的是()A.Shift键可在输入时切换至大写状态 B.Shift全称Escape,通常用于程序的退出 C.在主键盘区,可以用Shift键输入符号 D.Shift键又称“上档键”

46.如果想让某段程序多次执行,应采用哪种程序结构()A.循环结构B.顺序结构C.分支结构D.调用结构 47.“剪切”的快捷键是()

A.Ctrl+C B.Ctrl+X

C.Ctrl+Z

D.Ctrl+V 48.“复制”的快捷键是()

A.Ctrl+C B.Ctrl+X

C.Ctrl+Z

D.Ctrl+V

49.下列选项中()与其它三个选项不属于同一类设备 A.键盘B.扫描仪 C.显示器D.鼠标

50.小车遇到阻碍后自动后退可以用什么传感实现()

A.红外传感器B.声音传感器C.烟雾传感器D.光传感器 51.对于裸机来说,首先必须安装的软件应该是()

A.文字处理软件B.操作系统C.应用软件D.数据库软件 52.世界上第一台电子计算机诞生于()年 A.1946 B.1947

C.1953

D.1936

53.家用摄像机拍摄后的视频文件有可能是以下哪种文件类型()A..jpg

B..zip

C..mp4

D..exe

54.同学们要在文艺演出中使用三段歌曲合成一段音乐,下面不属于处理步骤的是()

A.使用Photoshop剪辑、编辑音乐

B.使用CoolEdit剪辑、编辑音乐

C.收集那三段歌曲,比如下载mp3文件

2017信息技术中考选择题

D.使用CoolEdit把剪辑好的音乐,导出为一个音频文件 55.“美图秀秀”中“基础”面析上的“色彩饱和度”是指()A.对比度

B.透明度

C.彩度

D.亮度 56.下列软件中属于应用软件的是()

A.MS—DOS

B.Windows XP

C.格式工厂

D.UNIX 57.下列不属于信息载体的是()

A.思想

B.画面

C.文字

D.声音 58.下面设备中,哪个是输入设备

A.打印机

B.音箱

C.手写板

D.显示器

59.2KB等于()

A.1000B

B.2048B

C.1024KB D.2000KB 60.使用计算机时,下列对身体健康的说法,哪一英是正确的()

A.使用计算机时不太运动,所以是一种休息的好办法,可以一直坐着不动

B.使用计算机时对眼睛不好,但对颈椎没什么影响 C.可以偶尔玩通宵游戏,不会身体有影响

D.眼睛不要离显示器太近,身体要坐正,不应该长时间使用计算机 61.机器人通过各种传感器来感知外部世界,这属于信息技术的()方面

A.计算机技术

B.感测技术

C.网络

D.通信技术 62.微型计算机中,I/O设备的含义是()

A.输入设备

B.输出设备

C.控制设备

D.输入/输出设备

63.小明搭建的“二驱四轮车”小车按下面流程图运行,会走出一个什么样的(近似)图形

B

A.“3”型

B.“8”型

C.“V”型

D.“9”型 64.要实现机器人小车左转,需要什么指令()A.左轮前进,右轮前进

B.左轮停止,右轮停止 C.左轮前进,右轮停止

D.左轮停止,右轮前进 65.我们说的宽屏显示器,显示屏比例为()A.16:9

B.2:1

C.1:1

D.4:3 66.计算机中负责进各种运算处理的部件是()A.控制器 B.运算器 C.主板 D.输入输出设备 67.“你有一个苹果,我有一个苹果,彼此交换一下,我们仍然各有一个苹果。如果你有一种思想我也有一种思想,交换有两种思想,甚至更多”,这体现了信息的()

A.时效性

B.价值性

C.共享性

D.载体依附性 68.计算机的软件系统包括()

2017信息技术中考选择题

A.程序和数据包

B.操作系统与语言处理程序

C.程序、数据和文档

D.系统软件与应用软件 69.以下哪种文件类型是压缩包()A..bat

B..txt

C..rar

D..bmp 70.消火机器人能够发现火场是通过()A.气压传感器

B.碰撞传感器

C.火焰传感器

D.声音传感器

71.矢量图形和位图图形相比,哪一项是位图图形的优点()A.图像所占空间大

B.缩放不会失真

C.色彩丰富、图像逼真

D.旋转不会失真

72.在文字编辑软件中()可以删除插入点光标左侧的字符 A.Delete

B.退格键

C.空格

D.Enter 73.下列存储单位换算正确的是()A.1000GB=1TB B.1024B=1KB C.1000MB=1GB

D.1024KB=1TB 74.我们常说的IT是指()

A.信息技术

B.计算机技术

C.网络技术

D.通讯技术 75.指挥、协调计算机工作的部件是()A.存储器

B.控制器

76.以下观点哪个是正确的()A.杀毒软件需要定期升级理新

B.杀毒软件可以杀掉所有的病毒C.杀毒软件是“傻瓜”软件,不需要做任何设置

D.安装杀毒软件后,计算机不会中毒 77.E-mail是指()

A.电报、电话、电传等通讯方式B.利用计算机网络及时地向特定对象传送文字、声音、图像或图形的一种通讯方式C.无线和有线的总

称D.报文的传送

78.下列软件中属于系统软件的是()

A.Excel B.美图秀秀

C.Flash动画

D.Windws XP 79.以下哪个软件不是杀毒软件()

A.金山毒霸

B.360杀毒

C.金山打字通

D. 瑞星杀毒

80.下面哪一种软件是要能随意使用无须付费,无须负法律责任()A.盗版软件

B.商业软件

C.免费软件

D.各版本的Windows

第五篇:数学谜语包括答案

数学谜语是一种有趣的谜语,一般带有数字,或者是数学术语,下面是小编整理的数学谜语包括答案,为大家提供参考。

数学谜语包括答案

1、两牛打架(数学名词)——对顶角

2、三十分(数学名词)——三角

3、再见吧,妈妈(数学名词)———分母

4、大同小异(数学名词)——近似值5、1、2、3、4、5(成语)——屈指可数6、1000×10=10000(成语)——成千上万

7、周而复始(数学名词)———循环小数.8、考试不作弊(数学名词)——真分数

9、五四三二一(数学名词)——倒数

10、一元钱.(数学名词)——百分数

11、考试成绩(猜两个数学名词)——分数,几何?

12、道路没弯儿(数学名词)——直经

13、风筝跑了(数学名词)——线段

14、最高峰(数学名词)——顶点

15、入坐(数学名词)——进位

16、齐头并进(数学名词)——平行

17、废律(数学名词)——除法

18、大家发表意见(数学名词)——商

19、彼此盘问(数学名词)——互质

20、五角钱(数学名词)——半圆

21、七天七夜.(数学名词)——周长

22、看谁力量大(数学名词)——比例(力)

23、人民的力量(数学名词)——无限

24、一直不来(猜数学名词)——恒等

25、不用再说(猜数学名词)——已知

26、搬来数一数(猜数学名词)——运算

27、隔河相答(猜数学名词)——对应

28、再算一遍(猜数学名词)——复数

29、招收演员(猜数学名词)——补角

30、十八斤(猜数学名词)——分析

31、司药(猜数学名词)——配方

32、请人做事(猜数学名词)——求作

33、查帐(猜数学名词)——对数

34、大家的样子(猜数学名词)——公式

35、小小的房子(猜数学名词)——区间

36、千刀万割(猜数学名词)分式

37、大家发表意见(猜数学名词)——讨论

38、从后面算起(猜数学名词)——倒数

39、北(猜数学名词)——反比

40、剑穿楚霸王(猜数学名词)——通项

41、算信件(猜数学名词)——函数

42、登楼计步(猜数学名词)——级数

43、逐优录取(猜数学名词)——0.618法

44、计算转动杆(猜数学名词)——数轴

45、不准确(猜数学名词)——误差

46、五分钱(猜数学名词)——五分钱

47、待命(猜数学名词)——等差

48、小本生意(猜数学名词)——微商

49、祖父错了(猜数学名词)——公差50、72小时(打一字)——晶

下载24点游戏404包括答案word格式文档
下载24点游戏404包括答案.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    2011年机关团拜会方案(包括游戏)

    机关2011年春节团拜会方案 一、活动目的:开开心心,快快乐乐过“兔”年 二、活动时间:2011年1月31日下午2:30(预计3:00开始,5:00晚餐) 三、活动地点:机关食堂 四、活动内容: 团拜会联欢:......

    钳工中级试题(包括答案)

    钳工初级 一、填空题 1.工件的几何形状是由( 点)、( 线 )和( 面 )构成的。 2.游标卡尺的尺身每一格为1mm,游标共有50格,当两量爪并拢时,游标的50格正好与尺身的49格对齐,则该......

    二十四点游戏作文[精选五篇]

    二十四点游戏作文在平平淡淡的学习、工作、生活中,大家都经常接触到作文吧,借助作文可以提高我们的语言组织能力。相信很多朋友都对写作文感到非常苦恼吧,以下是小编帮大家整理......

    培训游戏—团队游戏—连点游戏

    培训游戏—团队游戏—连点游戏这是个带有些性格测试的小游戏,可以用来训练团体合作、找寻问题的解决途径。游戏可安插在培训课程的任何时段中进行,还可安排在等待迟到者的间隙......

    小班体育游戏:点鞭炮

    小班体育游戏:点鞭炮 活动目的: 感受点鞭炮游戏的快乐。 练习蹲、跑、纵跳的基本动作。 能够听信号并遵守游戏规则。 活动准备: 经验准备:幼儿有过放鞭炮的经验 听过故事《怕鞭......

    初二名著阅读—名人传,包括答案

    一、填空题。1.《名人传》的作者是罗曼·罗兰,他是20世纪享誉国际文坛的法国现实主义作家。是一位伟大的民主主义者和人道主义者,有 “欧洲的良心” ,之称,他们另外一部长篇小说......

    计算机会考(包括答案)(共五则)

    1、最能准确描述计算机主要功能的是___C A.计算机可以代替人的脑力劳动B.计算机可以存储大量信息 C.计算机是一种信息处理机D.计算机可以实现高速度的计算2、微型计算机的性能指标......

    初一名著阅读—钢铁是怎样炼成的,包括答案

    《钢铁是怎样炼成的》练习题(名著阅读) 1.在朱赫来的启发和教育下,保尔懂得了许多关于革命工人阶级和阶级斗争的道理。2.保尔救出了朱赫来后,被贵族的儿子维克托出卖,被白匪关押起......