第一篇:24點(diǎn)速算游戲訓(xùn)練題庫
24點(diǎn)速算游戲訓(xùn)練題庫
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)1346f 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)1456f 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)1555f(5-1/5)*5 107)1556 5*(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)1668f 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)3377f(3/7+3)*7 260)3378 8+7+3*3 261)3379 3+7*9/3 262)3388f 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)4477f(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 369)5559 9+5+5+5 370)5566(5+5-6)*6 371)5567 6+5*5-7 372)5568 8+6+5+5 373)5577 7+7+5+5 374)5578(5+5-7)*8 375)5588 5*5-8/8 376)5589 8+5*5-9 377)5599 5*5-9/9 378)5666(5-6/6)*6 379)5667 7+6+5+6 380)5668 6+(8-5)*6 381)5669 6*9-5*6 382)5677(5-7/7)*6 383)5678(5+7-8)*6 384)5679 6+(7-5)*9 223)224Q 2*(2+4)+Q 224)224K 2+2*K-4 225)225T T+2*(2+5)226)225J(2+2)*(J-5)227)225Q 2+2*5+Q 228)226T 2+T+2*6 229)226J 6+2*(J-2)230)226Q(2+2)*(Q-6)231)226K 2*(2+K)-6 232)227T 2*(T/2+7)233)227Q 2*7-2+Q 234)227K 2+2+7+K 235)228T 2*(2*T-8)236)228Q 2+2+8+Q 237)229T T+2*(9-2)238)229J J+2+2+9 239)229Q(2+2)*9-Q 240)22TT T+2+2+T 241)22TJ 2*(2*J-T)242)22TK 2/2+T+K 243)22JJf(2/J+2)*J
244)22JQ 2/2+J+Q 245)22JK 2-2+J+K 246)22QQ 2-2+Q+Q 247)22QK Q-2/2+K 248)22KKf(2-2/K)*K 249)233T 3*(3+T/2)250)233J 2*(3/3+J)251)233Q(2+3-3)*Q 252)233K 2+3*3+K 253)234T 2+T+3*4 254)234J 2*(3+J)-4 255)234Q(2*3-4)*Q 256)234K 2*(3+K-4)257)235T 2*(5-3+T)258)235J 2+(5-3)*J 259)235Qf Q/(3-5/2)260)235K 5+2*3+K 261)236T(T-6)*2*3 262)236J 2+6/3*J 263)236Q 2*3+6+Q 264)236K 2+3+6+K 265)237T(2+7*T)/3 266)237J(2+3)*7-J 267)237Q 2+3+7+Q 268)237K 2*7-3+K 269)238T T+2*3+8 270)238J J+2+3+8 271)238Q 2*(3*8-Q)272)238K 2*(3+K)-8 273)239T T+2+3+9 274)239Q 2*(9-3)+Q 275)239K(K-9)*2*3 276)23TT T+2*(T-3)277)23TQ 3*(2+T)-Q 278)23TK 3-2+T+K 279)23JJ 2+3*J-J 280)23JQ 3-2+J+Q 281)23JK(3-2)*J+K 282)23QQ(3-2)*Q+Q 283)23QK 2+Q-3+K 284)23KK 3*K-(2+K)285)244T 2*(4+T)-4 286)244J 2*(4/4+J)287)244Q(2+4-4)*Q 288)244K 2*(K-4/4)289)245T T+4+2*5 290)245J J+5+2*4 291)245Q 2*(5-4)*Q 292)245K 5+2+4+K 293)246T T+6+2*4 294)246J 2*(4+J)-6 295)246Q 2+4+6+Q 296)246K 4+2*K-6 297)247T(T-7)*2*4 298)247J J+2+4+7 299)247Q 4*(2+7)-Q 300)248T T+2+4+8 301)248J(J-8)*2*4 302)248Q(Q-8)*(2+4)303)248K 2*K-8/4 304)249T T+2*9-4 305)249Q(Q-9)*2*4 306)249K(K-9)*(2+4)307)24TTf(4/T+2)*T 308)24TJ T+2*(J-4)309)24TQ 2*(T-4)+Q 310)24TK 2*(4+K)-T 311)24JJ J+4-2+J 312)24JQ 4*(J-2)-Q 313)24QQ 4*Q-2*Q 314)24KK 2+K-4+K 315)255Tf(5-2/T)*5 316)255J 5*(2+5)-J 317)255Q 5+2+5+Q 318)255K 2*(5*5-K)319)256T 2*(5+T)-6 320)256J J+6+2+5 321)256Q 2*(6-5)*Q 322)256K 2*(5+K-6)323)257T T+2+5+7 324)257J 2+(7-5)*J 325)257K 2+5*7-K 326)258T(8-5)*(T-2)327)258J 2*(5+J)-8 328)258Q(2*5-8)*Q 329)258K 2*8-5+K 330)259T 9+2*T-5 331)259J J+2*9-5 332)259Q 5-2+9+Q 333)25TT 2*(T/5+T)334)25TJ 2+T/5*J 335)25TQ 2*(5+Q)-T 336)25TK 2*K-T/5 337)25JQ 2*(J-5)+Q 338)25QQ(5-2)*Q-Q 339)25QK 2*(5+K)-Q 340)266T T+6+2+6 341)266J 2*(6/6+J)342)266Q(2+6-6)*Q 343)266K 2*(K-6/6)344)267T(T-7)*(2+6)345)267J 2*(7-6+J)346)267Q 2*(7-6)*Q 347)267K 2*(6+K-7)348)268T 2*(6+T)-8 349)268J(J-8)*(2+6)350)268Q(2*8-Q)*6 351)268K 6+2*K-8 352)269T(9-T/2)*6 353)269J(J-9)*2*6 354)269Q(Q-9)*(2+6)355)26TT T+2*T-6 356)26TJ 2*(6+J)-T 357)26TQ(2*6-T)*Q 358)26TK(K-T)*(2+6)359)26JQ 2+J*Q/6 360)26JK(K-J)*2*6 361)26QQ 2*(6+Q)-Q 362)26QK 2*K-Q/6 363)277Tf(T/7+2)*7 364)277J 2*(7/7+J)365)277Q(2+7-7)*Q 366)277K 2*(K-7/7)367)278J(2*7-J)*8 368)278Q 2*(8-7)*Q 369)278K 2*(7+K-8)370)279T 2*(9-7+T)371)279J 2+(9-7)*J 372)279K 2*9-7+K 373)27TT 2*(7+T)-T 374)27TJ J+2*T-7 375)27TQ 7+T/2+Q 376)27JQ 2*(7+J)-Q 377)27QQ(2*7-Q)*Q 378)27QK 2*(K-7)+Q 379)288T T+8-2+8 380)288J 2*(8/8+J)381)288Q(2+8-8)*Q 382)288K(2*8-K)*8 383)289T 2*(8+9)-T 384)289J 2*(9-8+J)385)289Q 2*(9-8)*Q 386)289K 2*(8+K-9)387)28TT 2*(T-8+T)388)28TJ 2+(T-8)*J 389)28TQ 2*(8+T)-Q 390)28TK 8+2*K-T 391)28JJ(J/J+2)*8 392)28JQ(2+Q-J)*8 393)28QQ(Q/Q+2)*8 394)28QK(2+K-Q)*8 395)28KK(K/K+2)*8 396)299J 2*(9/9+J)397)299Q(2+9-9)*Q 398)299K 2*(K-9/9)399)29TT 9+T/2+T 400)29TJ 2*(T-9+J)401)29TQ 2*(T-9)*Q 402)29TK 2*(9+K-T)403)29JJ 2+(J-9)*J 404)29JK 9+2*K-J 405)29QK(K-9)*Q/2 406)29KK(9+K)/2+K 407)2TTJ 2*(T/T+J)408)2TTQ(2+T-T)*Q 409)2TTK 2*(K-T/T)410)2TJJ 2*(J-T+J)411)2TJQ 2*J-T+Q 412)2TJK(K-J)*(2+T)413)2TQK T+2*K-Q 414)2JJJ 2*(J/J+J)415)2JJQ(2+J-J)*Q 416)2JJK 2*J-J+K 417)2JQQ 2*(Q/Q+J)
418)2JQK 2*(J+K-Q)419)2JKK 2*(K/K+J)420)2QQQ(2+Q-Q)*Q 421)2QQK(K-Q)*2*Q 422)2QKK K+2*Q-K 423)2KKK 2*(K-K/K)424)333T 3+3*(T-3)425)333J 3*J-3*3 426)333Q 3+3*3+Q 427)334J J+4+3*3 428)334Q(3+3-4)*Q 429)334K 3*(K-4)-3 430)335T T+5+3*3 431)335Q 3+3*(Q-5)432)335K 5+3+3+K 433)336T 3*(3*6-T)434)336J 3*(3+J-6)435)336Q 3+3+6+Q 436)336K 3+3*(K-6)437)337J J+3+3+7 438)337Q(3*3-7)*Q 439)337K 3*(3*7-K)440)338T T+3+3+8 441)338Q(Q-8)*(3+3)442)338K 3*(3+K-8)443)339T 3+3*T-9 444)339J 3*(J-9/3)445)339Q 3*(3+9)-Q 446)339K(K-9)*(3+3)447)33TK 3/3+T+K 448)33JQ 3+3*J-Q 449)33JK 3-3+J+K 450)33QQ 3-3+Q+Q 451)33QK 3*K-(3+Q)452)344T 4*(T-3)-4 453)344J J+4*4-3 454)344Q(3-4/4)*Q 455)344K 4+3+4+K 456)345T T*3*4/5 457)345J 5*(3+4)-J 458)345Q 5+3+4+Q 459)345K 3*5-4+K 460)346T 3*(4+T-6)461)346J J+6+3+4 462)346Q 3*4/6*Q 463)346K(3+K)/4*6 464)347T T+3+4+7 465)347J 3*(4+J-7)466)347Q 3+7*Q/4 467)348T(T-8)*3*4 468)348J 3+4*8-J 469)348Q 3*(4+8)-Q 470)348K(K-4)/3*8 471)349J(J-9)*3*4 472)349Q 3*9-Q/4 473)349K 3*(4+K-9)474)34TT 4+3*T-T 475)34TQ(3*4-T)*Q 476)34TK 4*(3+K-T)477)34JQ 3*(J-Q/4)478)34JK(K-J)*3*4 479)34QQ(4-3)*Q+Q 480)34QK 3+Q-4+K 481)355J J+5+3+5 482)355Q(3-5/5)*Q 483)356T T+6+3+5 484)356J(3*5-J)*6 485)356Q(3+5-6)*Q 486)356K(6-3)*(K-5)487)357T(T-7)*(3+5)488)357J(7-3)*(J-5)489)357Q 3*(5+7)-Q 490)357K(7+5*K)/3 491)358J(J-8)*(3+5)492)358Q(3*5-Q)*8 493)358K 5*8-(3+K)494)359T T*(3+9)/5 495)359Q(Q-9)*(3+5)496)359K(3+9*K)/5 497)35TT 3*(T-T/5)498)35TJ 5+3*T-J 499)35TQ 5-3+T+Q 500)35TK(K-T)*(3+5)501)35JJ J+5-3+J 502)35JQ(J-5)/3*Q 503)35QQ 5*Q-3*Q 504)35QK(3*5-K)*Q 505)35KK 3+K-5+K 506)366T(6-3)*T-6 507)366J(6+6*J)/3 508)366Q(3-6/6)*Q 509)366K(K-(3+6))*6 510)367T T+6/3*7 511)367Q(3+6-7)*Q 512)367K 3*6-7+K 513)368T 3*(6+T-8)514)368Q(8-Q/3)*6 515)368K 6-3+8+K 516)369T(3+T-9)*6 517)369J 3*(6+J-9)518)369Q 3*6/9*Q 519)369K 3*K-(6+9)520)36TT(T/T+3)*6 521)36TJ(3+J-T)*6 522)36TQ 3*(6+Q-T)523)36JJ(J/J+3)*6 524)36JQ(3+Q-J)*6 525)36JK 3*(6+K-J)
526)36QQ(Q/Q+3)*6 527)36QK(3+K-Q)*6 528)36KK(K/K+3)*6 529)377T T+3*7-7 530)377Q(3-7/7)*Q 531)377K 7-3+7+K 532)378J J+3*7-8 533)378Q(3+7-8)*Q 534)378K 3*K-(7+8)535)379T 3*(7+T-9)536)379J J+7-3+9 537)379Q 3*7-9+Q 538)379K 7*9-3*K 539)37TT 3*(T/T+7)540)37TJ 3*(7+J-T)541)37TK 3*7-T+K 542)37JJ 3*(J/J+7)543)37JQ 3*(7+Q-J)
544)37QQ 3*(Q/Q+7)545)37QK 3*(7+K-Q)546)37KK 3*(K/K+7)547)388T(8*T-8)/3 548)388J J+8-3+8 549)388Q(3-8/8)*Q 550)389T(T-9)*3*8 551)389J 8+3*9-J 552)389Q(3+8-9)*Q 553)389K 9+3*(K-8)554)38TT T+3*8-T 555)38TJ(J-T)*3*8 556)38TQ T/(8-3)*Q 557)38JJ J+3*8-J 558)38JQ(Q-J)*3*8
559)38QQ Q+3*8-Q 560)38QK(K-Q)*3*8 561)38KK K+3*8-K 562)399T 3*(9+9-T)563)399J(J-9)*(3+9)564)399Q(3-9/9)*Q 565)399K(K-9)*(9-3)566)39TT 3*(9-T/T)567)39TJ 3*(9+T-J)568)39TQ(3+9-T)*Q 569)39TK T+3*9-K 570)39JJ 3*(9-J/J)571)39JQ 3*(9+J-Q)572)39JK(K-J)*(3+9)573)39QQ 3*(9-Q/Q)574)39QK 3*(9+Q-K)575)39KK 3*(9-K/K)576)3TTQ(3-T/T)*Q 577)3TJQ(3+T-J)*Q 578)3TJK 3*(T+J-K)579)3JJQ(3-J/J)*Q 580)3JQQ(3+J-Q)*Q 581)3QQQ(3-Q/Q)*Q 582)3QQK(3+Q-K)*Q
第二篇:語言訓(xùn)練點(diǎn)
著名語文教育家呂叔湘先生早在1963年發(fā)表的《關(guān)于語文教學(xué)的兩點(diǎn)基本認(rèn)識》一文中談到:“撇開語言文字訓(xùn)練進(jìn)行語文教學(xué),這是一種半身不遂的語文教學(xué)?!边@就是說在語文教學(xué)中必須進(jìn)行語言文字訓(xùn)練。語言文字訓(xùn)練的目標(biāo)應(yīng)包括兩個(gè)方面:一是通過語言文字理解內(nèi)容,懂得課文“寫了什么”“為什么寫”;二是在理解內(nèi)容的基礎(chǔ)上,再認(rèn)識作者運(yùn)用語言文字表情達(dá)意的規(guī)律和方法,懂得課文是“怎樣寫”“為什么這樣寫”。教學(xué)中,教師整體把握教材內(nèi)容,確立訓(xùn)練點(diǎn),進(jìn)行語言文字訓(xùn)練是提高學(xué)生語文能力的關(guān)鍵。語言文字訓(xùn)練的的形式多種多樣,在確立訓(xùn)練點(diǎn)時(shí),要考慮到學(xué)段的要求,考慮到學(xué)生的實(shí)際語文水平,還要考慮到課文的重點(diǎn)、難點(diǎn)、特點(diǎn)。教師要有訓(xùn)練的意識,現(xiàn)在的課文文質(zhì)兼美,課課都有訓(xùn)練的素材。我們在教學(xué)中可以從以下方面進(jìn)行訓(xùn)練:
一、積累詞語。如《槐鄉(xiāng)五月》一課中,“白生生”等ABB形式的詞較多,教學(xué)中,讓學(xué)生找出來,讀一讀,說一說,這些詞好在什么地方,你覺得還有哪些地方可以用上這些詞語,現(xiàn)舉出幾個(gè)這樣的詞語。通過體會課文語言積累詞語,加深了學(xué)生對課文的理解。再如
二、課外閱讀課上,在學(xué)生自讀了文章之后,通過填空練習(xí)來引導(dǎo)學(xué)生積累課文中描寫月亮的優(yōu)美詞
句。培養(yǎng)學(xué)生積累語言的習(xí)慣。“故鄉(xiāng)的明月是那樣的(),那樣的(),那樣的()??她(),像()?!边@個(gè)練習(xí)讓學(xué)生又積累了許多描寫月亮美麗的詞句:晶瑩剔透、純潔無瑕、明亮、如銀如水、迷人??
玩味重點(diǎn)詞語。對課文有了整體感悟之后,進(jìn)行深層次理解,這時(shí)要善于指導(dǎo)學(xué)生抓住和玩味重點(diǎn)詞語,進(jìn)行語言文字訓(xùn)練。教學(xué)《軍神》一課時(shí),我是這樣訓(xùn)練的:(1)邊讀課文邊劃出描寫劉伯承動作、神態(tài)的詞語,并講講這些詞語的意思。學(xué)生抓住這幾個(gè)詞語,初步體會到劉伯承的堅(jiān)強(qiáng)。(2)思考課文中哪些詞語用得好,好在哪里?如有的學(xué)生認(rèn)為“一聲不吭”、“淚如雨下”兩個(gè)詞語用得好,因?yàn)樗鼈儗懗隽藙⒉械膱?jiān)強(qiáng)。(3)引導(dǎo)學(xué)生把課文中這兩個(gè)詞去掉,讓他們揣摩表達(dá)效果的不同。這樣,不僅進(jìn)行對語言文字的理解、體會和推敲,還在其中潛移默化地滲透了思想教育。
三、積累并運(yùn)用課文語言。教師要幫助學(xué)生形成語言積累的意識。課文里的語言是經(jīng)過加工、提煉的,合乎規(guī)范的,背誦若干這樣的文章,對于提高運(yùn)用語言的能力,會有不少幫助的。我們要適當(dāng)?shù)匕才啪哂袆?chuàng)造性積累的訓(xùn)練,如復(fù)述課文、改寫等。復(fù)述課文時(shí),不必要求學(xué)生非要用自己的語言,如果能將范文語言放在口頭上來練,使其意皆若出于我之心,使其言皆若出于我之口,那實(shí)際上已是學(xué)生在初步內(nèi)化范文的語言了。如教學(xué)《新型玻璃》一課,學(xué)生學(xué)完課文,了解了各種新型玻璃的特點(diǎn)和用途之后,教師安排了一個(gè)改寫練習(xí):選擇一種玻璃,用第一人稱的形式作自我介紹。這種訓(xùn)練,不僅鞏固了課文內(nèi)容,又有力地促進(jìn)了語言表達(dá)能力的提高,同時(shí)也培養(yǎng)了學(xué)生的創(chuàng)造思維和創(chuàng)新精神。
四、結(jié)合課文內(nèi)容,訓(xùn)練思維表達(dá)。如教學(xué)《小露珠》一課,寫小動物對小露珠的贊美――這幾個(gè)自然段寫什么?它們是怎樣贊美小露珠的?課文又是怎么寫這些小動物的?在理解了內(nèi)容,領(lǐng)會了課文的寫作形式后,啟發(fā)學(xué)生想象:清晨,還會有哪些小動物會贊美小露珠?它們會怎樣贊美小露珠?能像課文這樣說一段話嗎?這種訓(xùn)練,不僅加深了課文內(nèi)容的理解,又訓(xùn)練了學(xué)生的思維能力。
教學(xué)中,語言文字訓(xùn)練的方式不勝枚舉,關(guān)鍵是老師要能把握教材內(nèi)容,結(jié)合學(xué)生實(shí)際,找準(zhǔn)訓(xùn)練點(diǎn),扎扎實(shí)實(shí)地進(jìn)行語言訓(xùn)練,這樣才能有效提高語文能力。
語文教學(xué)由“把語文課上成政治課”、“把語文課上成分析課”到“把語文課上成訓(xùn)練課”,由“滿堂灌”到“滿堂問”到“滿堂練”。使人不免發(fā)生懷疑:命運(yùn)多舛的語文教學(xué)是否又是從一個(gè)誤區(qū)走向另一個(gè)誤區(qū)?任何事情都有一個(gè)度,正如語文教學(xué)上的講解法本身是切實(shí)可行的,但偏激地理解和運(yùn)用講解法使教學(xué)掉進(jìn)了“滿堂灌”的泥潭;同樣如此,不顧及提問設(shè)計(jì)法的教學(xué)特點(diǎn)就會使教學(xué)誤入“滿堂問”的深淵。如今,如果我們對語言文字訓(xùn)練的加強(qiáng)偏激地理解,練之過極,就很可能使語文教學(xué)顧此失彼,走向一個(gè)新的誤區(qū)。所以,準(zhǔn)確把握語言文字訓(xùn)練的特點(diǎn),是搞好語言訓(xùn)練的有力保證。
特點(diǎn)之一:語言文字訓(xùn)練是指對語言的訓(xùn)練。語言是表情達(dá)意的工具。正因如此,人們賦予了語言豐富的感情,因而就有新鮮活潑的豐富的語言。而教學(xué)中指導(dǎo)學(xué)生學(xué)習(xí)這些語言,訓(xùn)練這些語言就不是機(jī)械的了,而應(yīng)是充滿感情的訓(xùn)導(dǎo)和練習(xí)。因此,要進(jìn)行語言文字的訓(xùn)練首先要掌握語言的特點(diǎn),訓(xùn)練要講究一種情境,一種氛圍,這有別于其它專業(yè)(如體育)單純的技能練習(xí)。
特點(diǎn)之二:語言文字訓(xùn)練是情中訓(xùn),趣中練。語言文字訓(xùn)練究竟是什么樣的訓(xùn)練?語文課是集思想性、情感性于一體的工具學(xué)科,語言是外殼,表情達(dá)意才是語言的內(nèi)涵。如果說數(shù)學(xué)課中通過知識的講解,再通過練習(xí)解題達(dá)到知識的遷移以求熟練,這一過程是曉之以理的認(rèn)知過程,那么語文課則是一種動之以情、授之以趣的潛移默化的過程。所以,語文教學(xué)離不開情,離不開趣,情中訓(xùn),趣中練應(yīng)是語言文字訓(xùn)練的一大特點(diǎn)。
特點(diǎn)之三:語言文字訓(xùn)練是練中有訓(xùn),訓(xùn)中有練。語文教學(xué)中滿堂灌,不對!滿堂問,不對!滿堂練,也不對!因?yàn)檎Z言文字的訓(xùn)練絕不是練習(xí)。但是如果這樣說,滿堂地灌、問、練,對不對?不難理解,將講解式灌輸、啟發(fā)式誘問、指導(dǎo)性練習(xí)有機(jī)地應(yīng)用于一堂語文課中是切實(shí)可行的,問題是要“有機(jī)”。而這里對“灌”、“問”的理解不就與“訓(xùn)”的意義相關(guān)嗎?所以說,語文訓(xùn)練是練中有訓(xùn),訓(xùn)中有練。指導(dǎo)與練習(xí)是相輔相承的。
一、語文課姓“語”。
葉圣陶對“語文”二字的解釋是“彼時(shí)同人之意,以為口頭為語,書面為文,文本于語,不可偏指,故合言之?!币虼耍覀冊诮虒W(xué)中要把口語表達(dá)與書面語的表達(dá)重視起來。通過學(xué)習(xí),積累語言,并且能運(yùn)用和表達(dá)。但這種表達(dá)不應(yīng)該是機(jī)械地重復(fù),而應(yīng)該有自身的情感。有人說情感是不能訓(xùn)練的,但我認(rèn)為表達(dá)情感的方式是可以通過訓(xùn)練形成的。比如朗讀,如果沒有長時(shí)間的訓(xùn)練,學(xué)生是不可能從會讀達(dá)到表達(dá)情感的。這又印證了“書讀百遍,其義自見”的古訓(xùn)?!皶x百變”就是訓(xùn)練的過程,而結(jié)果就是“其義自見”的感悟和理解。
二、語言文字訓(xùn)練和人文素質(zhì)的提高是相輔相成的。
語文是人文性和工具性的結(jié)合。語文教學(xué)的主要任務(wù)是讓學(xué)生理解和運(yùn)用祖國語言文字,也就是通過字詞句段篇,聽說讀寫等方面的訓(xùn)練,使學(xué)生具有一定的語言基本功。
并在學(xué)習(xí)祖國語言文字的過程中對中華民族的優(yōu)良傳統(tǒng)以及民族精神進(jìn)行薪火傳承,在學(xué)習(xí)中激發(fā)求知欲和培養(yǎng)興趣。
在教學(xué)中要重視學(xué)生的領(lǐng)悟、意會、揣摩、體驗(yàn)?zāi)酥劣陬D悟、靈感等非邏輯的認(rèn)知活動,并要注意形象的再現(xiàn),意境的體驗(yàn),韻味的品評,情緒的感染等思維和情感活動。但這些人文素養(yǎng)的培養(yǎng),要通過一篇篇文學(xué)作品的熏陶,一次次語言文字的訓(xùn)練來實(shí)現(xiàn)并鞏固。反過來,具有良好的人文素養(yǎng)的人必然對語文學(xué)科會產(chǎn)生濃厚的興趣,通過大量的閱讀在潛移默化或者有意識的品讀中進(jìn)語言文字功底的提升和鞏固。
三、進(jìn)行語言文字訓(xùn)練是課程標(biāo)準(zhǔn)的要求。
課程標(biāo)準(zhǔn)強(qiáng)調(diào):“注重基本技能的訓(xùn)練,給學(xué)生打下扎實(shí)的基礎(chǔ)。”以寫字為例,如果不訓(xùn)練,就不可能把字寫得美觀、漂亮,如果訓(xùn)練程度不夠,還可能連字都不會寫;再以作文為例,如果沒有一定量的訓(xùn)練,就不能很好地表達(dá),“熟能生巧”說的就是這個(gè)理。因此,該讓學(xué)生讀的就要讀,該背的就要背,該練的就要練,問題的關(guān)鍵是我們處理“訓(xùn)練”的方式與藝術(shù)。
四、語言文字訓(xùn)練一定要落實(shí)到位。
訓(xùn)練是否落實(shí)到位,直接關(guān)系到語言文字訓(xùn)練的成功與否。所以要真正做到落實(shí)到位,要注意以下幾點(diǎn):
1.精心的預(yù)設(shè)可以促成靈動的生成。一篇課文的語言文字訓(xùn)練有哪些內(nèi)容?要達(dá)到怎樣的要求?通過怎樣的形式訓(xùn)練?教師怎樣進(jìn)行指導(dǎo)?這些都是需要課前精心預(yù)設(shè)的?,F(xiàn)代課堂教學(xué)雖說是生成的教學(xué),但對一堂好課來說,成功的因素不僅僅是生成,還有教學(xué)的提前設(shè)計(jì)。教師多一份藝術(shù)性的預(yù)設(shè),學(xué)生就多一份生動的生成。因此我們要注意對訓(xùn)練進(jìn)行精心的預(yù)設(shè)。
2.訓(xùn)練應(yīng)該是有重點(diǎn)突出。
語文可需要達(dá)到的目標(biāo)有很多,我們不能通過一堂課就把這些目標(biāo)全部涉及。在教學(xué)中語言文字的訓(xùn)練應(yīng)該有步驟,分階段,有重點(diǎn)的進(jìn)行。我一直反對那種所謂的“堂堂清”的課堂,這種課堂是虛無縹緲的。課文各有特色,各有長處,只要在教學(xué)中將這些重點(diǎn)的東西給學(xué)生進(jìn)行訓(xùn)練,我覺得就是成功的課堂。突出重點(diǎn)在能達(dá)成有效的語言文字訓(xùn)練。否則都只是浮在表皮的訓(xùn)練,達(dá)不到效果。
3.積累也是一種訓(xùn)練。
古人說“讀書破萬卷,下筆如有神”、“熟讀唐詩三百首,不會作詩也會吟”可見積累在語言文字能力的形成中是多么重要啊。
記得蘇教版教材的主編張慶老師曾經(jīng)把積累比作“布云”,把表達(dá)比作“下雨”,我覺得這個(gè)比喻十分的恰當(dāng),沒有大量的原料輸入,哪里會有運(yùn)用和輸出呢?
綜上所述,我們在語文教學(xué)中要重視語言文字的訓(xùn)練并將其落到實(shí)處。在語言文字訓(xùn)練中,融入集思想性、情感性、意趣性,做到練中有思想,練中有情感,練中有意趣。使少年兒童在有著純正的思想、高尚的情操和濃厚的志趣的基礎(chǔ)上更深刻、更進(jìn)一步地去理解、學(xué)習(xí)、運(yùn)用祖國的語言。
葉圣陶先生說得好:“閱讀是吸收,寫作是傾吐?!边@就明確地告訴我們:閱讀是作文的基礎(chǔ),閱讀好像蜜蜂采花,作文好像蜜蜂釀蜜。讀和寫是相輔相成的,智慧地把握兩者結(jié)合的策略,學(xué)生的作文能力才會逐漸提高。那么如何利用教材、挖掘教材,在教學(xué)中找準(zhǔn)讀寫訓(xùn)練點(diǎn),提高學(xué)生的作文能力呢?在實(shí)踐中我們總結(jié)出了一個(gè)關(guān)鍵,八個(gè)策略,與大家分享。
一、一個(gè)關(guān)鍵
實(shí)現(xiàn)讀寫結(jié)合,關(guān)鍵在于深入研究、挖掘教材,創(chuàng)造性地使用教材,找準(zhǔn)讀寫訓(xùn)練點(diǎn),抓住學(xué)生的興奮點(diǎn),捕捉學(xué)生的真切感受,拓展寫的空間,讓學(xué)生樂于動筆。何謂興奮點(diǎn)?即文本中的描寫動情處、詞句優(yōu)美處、生動有趣處、思維創(chuàng)新處。這些興奮處可以成為讀寫訓(xùn)練點(diǎn)。簡而言之,即:情動筆動——品美寫美——妙趣橫生——別出“新”裁。
二、八個(gè)策略
我在實(shí)踐中注意深度挖掘教材,找準(zhǔn)訓(xùn)練點(diǎn),在廣泛的生活中進(jìn)行有效的讀寫結(jié)合訓(xùn)練,形成了一些貫穿于課前——課中——課后——課外的有效讀寫結(jié)合策略,現(xiàn)與大家共享。
(一)、策略1:讀前先寫,賞文作比。
在學(xué)習(xí)課文之前,教師先把習(xí)作內(nèi)容布置下去,讓學(xué)生根據(jù)已有的水平先試作。教師根據(jù)學(xué)生練筆完成情況,結(jié)合讀寫訓(xùn)練點(diǎn),在閱讀教學(xué)中有針對性地引導(dǎo)學(xué)生深入研讀語言文字,在切身的對比中感受作者語言的表現(xiàn)力。這樣做既合理地使用了教材,又聯(lián)系了學(xué)生的實(shí)際需要,能夠科學(xué)有效地提高課堂教學(xué)效率。這是一種任務(wù)驅(qū)動下的讀寫結(jié)合。如在學(xué)習(xí)《理想的翅膀》之前,我給學(xué)生布置了一個(gè)預(yù)習(xí)作業(yè):請用自己的語言去描述教材插圖中的各式風(fēng)箏。因?yàn)橛辛苏n前的寫,學(xué)生們帶著審視、對比、欣賞、迫切學(xué)習(xí)的心態(tài)深入語言文字,感悟更深刻。
(二)、策略2:課前讀后感
讀后感是讀寫結(jié)合的一種重要形式,但在平時(shí)教學(xué)中,運(yùn)用得較保守。老師們總是把讀后感變成課后感,老師進(jìn)行全批詳改。如此一來,對學(xué)生而言是個(gè)負(fù)擔(dān),他們不愿寫;對老師批改而言也是—種負(fù)擔(dān)。我們完全可以把寫讀后感更靈活地布置成課前預(yù)習(xí)作業(yè),隨意地讓學(xué)生自由寫感受和想法。老師用劃覽的方式閱讀,重在留意文中的“思”。寫課前讀后感,對于學(xué)生而言是以寫促讀,以讀促寫,真正把預(yù)習(xí)落到實(shí)處;對于教師亦有摸清學(xué)情,以學(xué)定教的幫助。這種策略適用于易使學(xué)生產(chǎn)生不同觀點(diǎn)的文章,教師可以從多元觀點(diǎn)的交織中導(dǎo)入新課,也可以讓生成的矛盾思想貫穿教學(xué)過程,順學(xué)而導(dǎo),最后達(dá)成對文字本真的認(rèn)識。
如:在了解了學(xué)生對《美麗的小興安嶺》的初讀感受后,以學(xué)生初讀所感受到的小興安嶺是個(gè)“美麗的大花園”“巨大的寶庫”作為話題,深入文本展開討論:你是從哪些描寫感受到的?還有不同的理解嗎等等。
再由句子深入重點(diǎn)詞,聯(lián)系前后內(nèi)容進(jìn)行對比,在步步深入的理解中有感情地讀,最終感悟到文本的真正內(nèi)涵。
(三)、策略3:課中仿寫
所謂仿寫,就是作文者模仿某些范文的句式、立意、構(gòu)思、結(jié)構(gòu)或?qū)懛ǖ冗M(jìn)行作文的一種寫作訓(xùn)練方法。仿寫有兩個(gè)層次:
1、從仿起步——模仿階段
學(xué)習(xí)了《松鼠》后,馬上讓學(xué)生練習(xí)用總分式寫一段話,并學(xué)習(xí)按一定的觀察順序,描寫小動物的外形
特點(diǎn)。學(xué)習(xí)了《大自然的語言》這首詩,馬上讓學(xué)生仿寫兩個(gè)小節(jié),用詩歌的形式來表達(dá)自己的發(fā)現(xiàn)。
2、從仿到創(chuàng)——創(chuàng)新階段
如果說低年級的模仿是讀寫結(jié)合的基點(diǎn)的話,那么,中年級就應(yīng)該把“創(chuàng)新”作為讀寫結(jié)合的支點(diǎn)。培養(yǎng)學(xué)生寫作上的創(chuàng)造意識,是使讀寫結(jié)合從根本上得以實(shí)現(xiàn)和超越的一個(gè)轉(zhuǎn)折點(diǎn)。
讀寫結(jié)合的創(chuàng)造,主要是指內(nèi)容的創(chuàng)造,就是鼓勵(lì)學(xué)生在學(xué)習(xí)課文形式的基礎(chǔ)上選擇新穎的、獨(dú)具特色的內(nèi)容寫,鼓勵(lì)學(xué)生在寫作內(nèi)容上的求異思維,從而力求在寫作訓(xùn)練中反映出學(xué)生的個(gè)性色彩和創(chuàng)造精神,也指形式上的創(chuàng)新。教材為學(xué)生提供了豐富的文學(xué)創(chuàng)作形式,有推理故事、新聞寫作、課本劇、童話、探險(xiǎn)故事,給學(xué)生建構(gòu)了一個(gè)廣泛的想象、練筆空間。如學(xué)習(xí)了《田忌賽馬》后,學(xué)生們設(shè)想了第二次賽馬后,田忌與孫臏又見面的情景,續(xù)寫了故事。
(四)、策略4:續(xù)寫
課文中,有些句子后面留有空白,可以發(fā)揮學(xué)生的想象力填補(bǔ),在后面續(xù)寫,同時(shí)對學(xué)生的理解也是一個(gè)考察。有的文章結(jié)尾余意未盡,留有想象續(xù)寫空間,如《炮手》,可續(xù)寫德軍被趕走后,士兵的生活(回到家鄉(xiāng)后得到的待遇、如何重建家園等)。
(五)、策略5:改寫
就是在原文的基礎(chǔ)上,改變文章的體裁、結(jié)構(gòu)或敘述方法等,充分發(fā)揮想象,對原文進(jìn)行重組、加工的一種訓(xùn)練形式。可改寫文體,如把《村居》改寫成一篇記事的文章,將放學(xué)的孩童開心放風(fēng)箏的場面描寫出來。學(xué)習(xí)了《信》后,將2、3、4小節(jié)改寫成書信的形式,換種格式,換種語氣來寫,進(jìn)一步鞏固了書信的格式,還可練習(xí)變換人稱。另外可改情節(jié),如《和式獻(xiàn)璧》,可改寫假設(shè)卞和不再那么執(zhí)著會怎么樣。改寫往往要對教材進(jìn)行假設(shè)變動,啟發(fā)學(xué)生思維,使讀寫訓(xùn)練深刻化。
(六)、策略6:用心靈去觀察
我們提倡寫得真實(shí),孩子們筆下的應(yīng)該是“個(gè)性化的、自然的,是充滿特點(diǎn)的真情和情趣,沉浸著美語和淚珠”的東西。真實(shí)的美從哪里來?引導(dǎo)學(xué)生觀察生活。如何觀察生活呢?這就要求我們教學(xué)生從閱讀課文中去學(xué)習(xí)、借鑒。在閱讀教學(xué)中,我們不僅要學(xué)習(xí)、掌握句式和文章結(jié)構(gòu),更應(yīng)明白文章來源于生活體驗(yàn)。作文和生活是不分家的,沒有平時(shí)的悉心觀察、體驗(yàn),就寫不出有真情實(shí)感和鮮活的、有靈性的文章。否則,作文過程只會成為呆板的、模式化的拼裝過程。
如:為孩子們設(shè)計(jì)了一次“呵護(hù)小生命誕生”的體驗(yàn)活動,每個(gè)孩子領(lǐng)養(yǎng)數(shù)只蠶寶寶,在多天的照料和期盼后,也許會目睹蠶寶寶吃食,活動,蛻皮長大、吐絲結(jié)繭、成蛾破破繭而出的動人時(shí)刻,感受生命的偉大;也許付出與希望會成為泡影,見證的是生命的消失......不管怎樣,孩子們用眼睛、更是用心靈在關(guān)注、在觀察。最后將自己的體驗(yàn)過程和感受寫下來。從孩子們的作品里,你能感受到一種真實(shí)、一顆真心、一份真情......
從這里我們看到,閱讀過程是—個(gè)還原生活情境的過程,仿寫過程是個(gè)先體驗(yàn)生活情境,再表達(dá)的過程。只有寫作形式和所寫內(nèi)容有效結(jié)合,才能真正實(shí)現(xiàn)閱讀向?qū)懽鞯倪w移內(nèi)化。
(七)、策略7:課外讀寫天天練
讀寫結(jié)合應(yīng)以自能為目標(biāo)。因此,必須把課文教學(xué)引伸到課外,與相關(guān)的生活和課外閱讀有機(jī)地聯(lián)系起來,讓學(xué)生用自己的課外閱讀、生活經(jīng)歷來充實(shí)課文教學(xué),使我們的閱讀教學(xué)更加靈動而豐滿。我們設(shè)計(jì)了“天天做”的家庭作業(yè),內(nèi)容固定為“閱讀摘抄”和“每日感想”。讓學(xué)生每天都能主動去閱讀去積累,同時(shí)把每天生活中的點(diǎn)滴感受和點(diǎn)滴發(fā)現(xiàn)及時(shí)記下了,隨時(shí)練筆,將寫作變成一種習(xí)慣。
期末大家合作制成一本班級作品集——《閱讀與習(xí)作》,那是學(xué)生的“作品”集、“讀書記”,激發(fā)了學(xué)生的閱讀興趣、積累興趣、寫作興趣。實(shí)踐證明,這種亦讀亦寫的結(jié)合,能養(yǎng)成學(xué)生良好的“閱讀”和“寫作”習(xí)慣。
(八)、策略8:假期讀寫
寒暑假的作業(yè),我們總要布置學(xué)生看幾本書,并有針對性地進(jìn)行創(chuàng)作。讀寫結(jié)合,提高了閱讀、習(xí)作訓(xùn)練的有效性,也讓師生享受著成功的喜悅。
因此,我們主張以“讀寫結(jié)合”為突破口,以學(xué)生的課外閱讀為主徑,以課外實(shí)踐為載體,拓展“讀寫結(jié)合”的形式,豐富“讀寫結(jié)合”的內(nèi)容,創(chuàng)造性地開展語文實(shí)踐活動,增加學(xué)生的情感體驗(yàn),拓寬學(xué)生的習(xí)作思路。
實(shí)現(xiàn)讀寫結(jié)合,關(guān)鍵在于深度挖掘教材,找準(zhǔn)讀寫訓(xùn)練點(diǎn),抓住學(xué)生的興奮點(diǎn),捕捉學(xué)生的真切感受,拓展寫的空間,讓學(xué)生樂于動筆。何謂興奮點(diǎn)?即文本中的描寫動情處、詞句優(yōu)美處、生動有趣處、思維創(chuàng)新處。這些興奮處可以成為讀寫訓(xùn)練點(diǎn)。簡而言之,即:情動筆動——品美寫美——妙趣橫生——別出“新”裁。
魯教版小學(xué)語文三年級下冊板塊構(gòu)建
第一板塊: 景物描寫
(一)教學(xué)內(nèi)容:
3.《觀潮》《火燒云》(自讀課文)《雨》(網(wǎng)上文章)《廬山的云霧》《美麗的南沙群島》(蘇教版)
寫景的古詩:《詠柳》《春日》《城東早春》《山亭夏日》,宋詞兩首
板塊訓(xùn)練主題:按照從遠(yuǎn)到近的順序,介紹一處景物,重點(diǎn)片段描寫,學(xué)習(xí)課文中擬人、比喻的寫法。
第二板塊:事物的靜和動
教學(xué)內(nèi)容:
1.《燕子》4.《鳥的天堂》《荷花》《珍珠泉》(學(xué)習(xí)樂園)
板塊訓(xùn)練主題:抓住動詞體會事物的動態(tài)特點(diǎn)
展開想象表現(xiàn)事物靜態(tài)特點(diǎn)
第三板塊:觀察和發(fā)現(xiàn)
教學(xué)內(nèi)容:
5.《爬山虎的腳》6.《蜜蜂》7.《玩出了名堂》8.《找駱駝》
背誦《中庸》
3、4段,古詩4首。
板塊訓(xùn)練主題:學(xué)習(xí)細(xì)致觀察,具體描寫的方法。觀察動物或者植物,寫觀察日記。
第四板塊:人物的語言
教學(xué)內(nèi)容:
《花瓣飄香》(蘇教版)《炮手》(北師版)《放飛蜻蜓》《菩薩兵》(蘇教版)
板塊訓(xùn)練主題:抓住人物語言及提示語,體會人物的想法及表達(dá)的情感。
第五板塊:人物的神態(tài)動作
教學(xué)內(nèi)容:10.《一面五星紅旗》27.《跨越海峽的生命橋》11.《賣木雕的少年》28.《卡羅納》12.《中國國際救援
隊(duì),真棒!》《搭石》
板塊訓(xùn)練主題:繼續(xù)學(xué)習(xí)通過人物的動作、語言、神態(tài)描寫展現(xiàn)人物品質(zhì)
經(jīng)典背誦:《太陽是大家的》《黃鶴樓送孟浩然之廣陵》《送元二使安西》等送別詩,宋詞兩首 推薦閱讀《愛的教育》
第六板塊:動物描寫
教學(xué)內(nèi)容:13.《貓》(老舍)《貓》(豐子愷散文集)14.《白鵝》16.《白公鵝》14.《松鼠》 推薦閱讀 《促織》周而復(fù)的貓的片段 夏丏尊的貓
板塊訓(xùn)練主題:觀察一種小動物,在描寫中重點(diǎn)寫出外形、性格、活動。
經(jīng)典背誦:《中庸》
1、2段,宋詞兩首
第六板塊:說明文
《太陽》《飛向藍(lán)天的恐龍》《恐龍》(蘇教版)《月球之謎》《我家跨上了信息高速路》 推薦閱讀:《鯨》、《黃河象》
板塊訓(xùn)練主題:了解說明文的語言特點(diǎn),學(xué)習(xí)說明方法
經(jīng)典背誦:《中庸》5、6段
第八板塊:景物描寫
(二)《長城》、《頤和園》、《梅雨潭》(同步閱讀)《九寨溝》、《秦兵馬俑》。
推薦閱讀:《春日游湖上》《襄邑道中》《初見嵩山》《宿甘露僧舍》
板塊訓(xùn)練主題:按照移步換景的方法,游覽一處景物。
經(jīng)典背誦:宋詞四首
第九板塊:神話故事和寓言故事
《女媧補(bǔ)天》《普羅米修斯》《夸父追日》《女媧造人》(人教版)《扁鵲治病》《螳螂捕蟬》《黔驢技窮》《杯弓蛇影》
板塊訓(xùn)練主題:概括主要內(nèi)容 學(xué)習(xí)寫批注
推薦閱讀:中外神話故事
經(jīng)典背誦:背誦《夸父追日》的古文,《中庸》
7、8段
第三篇:delphi24點(diǎn)游戲
第3章 “速算24”撲克游戲--單元、異常、邏輯
3.1 “速算24”撲克游戲效果說明
“速算24”是一個(gè)考察心算能力、有助于開發(fā)智力的撲克游戲。在給出4張撲克牌之后,要求應(yīng)用這些撲克牌數(shù)字做數(shù)學(xué)運(yùn)算,迅速構(gòu)造出一個(gè)數(shù)學(xué)表達(dá)式,得出結(jié)果24。這個(gè)游戲的關(guān)鍵在于迅速判斷用戶輸入的表達(dá)式是否正確,并做出相應(yīng)的反饋,告訴用戶是算對了還是算錯(cuò)了。游戲的初始界面如圖3.1所示。
圖3.1 游戲的初始界面
當(dāng)用戶單擊“開始”按鈕時(shí),系統(tǒng)開始發(fā)牌,隨機(jī)發(fā)出4張牌,如圖3.2所示為隨機(jī)開始的一局游戲,給出的4張紙牌分別為“9”,“8”,“9”,“2”。在文本框中輸入運(yùn)算表達(dá)式,比如,輸入“8*(2+(9-9))”,單擊“計(jì)算”按鈕,系統(tǒng)會出現(xiàn)提示框,顯示“您輸入的表達(dá)式的計(jì)算結(jié)果為16!”,告訴你該表達(dá)式的結(jié)果不是“24”,如圖3.3所示。單擊“確定”按鈕,再次在文本框中輸入表達(dá)式,比如“8*(2+(9/9))”,單擊“計(jì)算”按鈕,系統(tǒng)會出現(xiàn)提示框,顯示“您真行,我服了您!”,表明運(yùn)算正確,如圖3.4所示。
圖3.2 系統(tǒng)隨機(jī)發(fā)4張紙牌
圖3.3 運(yùn)算式不正確
圖3.4 運(yùn)算式正確
這個(gè)游戲具體的規(guī)則如下:
(1)單擊“開始”按鈕,游戲開始,系統(tǒng)將隨機(jī)發(fā)牌。
(2)請迅速在文本框中輸入運(yùn)算表達(dá)式,然后單擊“計(jì)算”按鈕。
(3)這時(shí)系統(tǒng)會提示您的運(yùn)算是對了還是錯(cuò)了,在彈出的對話框中單擊“OK”按鈕,再次輸入新的運(yùn)算表達(dá)式,重復(fù)上一步,直到您的運(yùn)算表達(dá)式結(jié)果正確,這時(shí)系統(tǒng)會恭喜您!
(4)如果結(jié)果錯(cuò)了還想繼續(xù)或者中途想計(jì)算另一局撲克牌,就單擊“重新開始”按鈕,得到新一局撲克牌進(jìn)行游戲。
下面,我們開始循序漸進(jìn)地創(chuàng)建這個(gè)小游戲。在最開始,游戲的界面和效果都會非常簡單,在后面我們會逐漸地完善它。
第3章 “速算24”撲克游戲--單元、異常、邏輯
3.2 生成和建立程序(1)在程序中用到了Image組件,用于放置圖片。還用到了Timer組件,用于計(jì)算用戶操作時(shí)間。下面我們來生成游戲的基本框架。
3.2.1 Image組件
Image組件在Additional頁上,用來在窗口中顯示一幅圖片。它擁有如下幾個(gè)主要屬性: 1.Picture屬性
可以在picture屬性中調(diào)入圖像文件。Delphi支持多種圖像格式,如位圖(.BMP)、圖標(biāo)(.ICO)、圖元(.WFM)、動畫光標(biāo)(.ANI)、JPEG圖片(.JPG、.JPEG)等。
2.AutoSize屬性
當(dāng)AutoSize為True時(shí),Image組件將根據(jù)它所包含的圖像的大小來調(diào)整自身的大??;當(dāng)AutoSize為False時(shí),不論圖像有多大,組件將保持設(shè)計(jì)時(shí)的大小。如果組件比圖像小,那么只有一部分圖像是可見的。
3.Stretch屬性
當(dāng)Stretch為True時(shí),位圖圖像將根據(jù)組件的大小調(diào)整自身的大小,當(dāng)組件大小改變時(shí),上述三種文件也做相應(yīng)變化。Stretch屬性對圖標(biāo)沒有作用。
上述的AutoSize和Stretch屬性決定了圖像在窗口中的顯示尺寸。
圖3.5演示的3個(gè)Image分別為:AutoSize為True,AutoSize為False,Stretch為True的情形??梢钥吹?,Image的原始尺寸比圖片寬,矮,在上面的屬性設(shè)置下,就會有不同的顯示效果。
圖3.5 AutoSize和Stretch的設(shè)置 3.2.2 Timer組件
在Delphi中,組件分可視組件和非可視組件。可視組件是指那些在運(yùn)行期間仍然能顯示的組件,例如Label,Button,Image組件等。非可視組件是指那些在程序界面設(shè)計(jì)期間可見,而在程序運(yùn)行時(shí)不可見的組件,例如在System頁上的Timer組件。
Timer組件能夠有規(guī)律地觸發(fā)OnTimer事件,發(fā)送信息給應(yīng)用程序,它是編制應(yīng)用程序時(shí)最為重要的組件之一。
1.Timer組件的屬性
Enabled屬性表示Timer是打開還是關(guān)閉。用Interval屬性設(shè)置兩個(gè)OnTimer事件間的間隔,單位是毫秒。將間隔設(shè)置為0相當(dāng)于關(guān)閉計(jì)時(shí)器,Interval是Cardinal類型的,最大值可到4294967295,當(dāng)然程序中一般不會把Interval設(shè)成很大的值。2.Timer組件的使用
Timer是獨(dú)立的對象,在啟動與Windows無關(guān)的邏輯和應(yīng)用事件時(shí)極其有用??梢阅M時(shí)鐘或計(jì)時(shí)器,可視地顯示經(jīng)過的時(shí)間;可以用作系統(tǒng)延時(shí),Delphi提示信息出現(xiàn)只需在該區(qū)域停頓幾秒,就是Timer組件應(yīng)用的一個(gè)例子;可以檢查系統(tǒng)環(huán)境、事件,根據(jù)結(jié)果進(jìn)行響應(yīng);也可以在窗口中閃爍一段正文或圖像,提示某種操作或處理正在進(jìn)行等等。
盡管Delphi的計(jì)時(shí)器每秒可以產(chǎn)生1000次激發(fā),在編程中還必須注意程序?qū)imer觸發(fā)的響應(yīng)。如果程序處理OnTimer事件的時(shí)間超過Interval的設(shè)定值,就可能錯(cuò)過事件,因?yàn)楫?dāng)下一次觸發(fā)到來時(shí),系統(tǒng)正忙于處理上一事件,則這次觸發(fā)就會被忽略。同時(shí)要注意其他的Windows應(yīng)用程序是否會影響Timer的觸發(fā)。如果后臺正運(yùn)行著一個(gè)占用處理器的程序,就可能會導(dǎo)致Timer的觸發(fā)不準(zhǔn)確,從而使前臺程序運(yùn)行出現(xiàn)錯(cuò)誤。
這里要強(qiáng)調(diào)的是Timer組件是一個(gè)非可視組件,可以把它放置到窗體或者其他容器組件上的任何位置。3.實(shí)現(xiàn)游戲計(jì)時(shí)功能
在本章的游戲中,我們加入一個(gè)Timer組件,實(shí)現(xiàn)游戲的計(jì)時(shí)功能。
在窗體中加入一個(gè)Label組件,將此組件的Caption屬性設(shè)置為“使用時(shí)間”,然后從組件面板上選擇System頁中的Timer組件。
在Unit1中加入Form1的一個(gè)私有成員SpendTime,記錄用戶計(jì)算所用的時(shí)間。代碼如下所示:
private { Private declarations } SpendTime:Integer;在Form1的onCreate事件中加入如下代碼。將SpendTime設(shè)置為0,并將Timer1的Enabled屬性設(shè)置為False,使Timer1組件不能響應(yīng)OnTimer事件;并將Timer1的Interval屬性設(shè)置為1000,表示當(dāng)Timer1有效時(shí),每間隔1000ms(即1秒)發(fā)生一次OnTimer事件:
procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin //初始化,設(shè)置數(shù)組RandomData的長度為4 //并將每個(gè)數(shù)組元素初始化為零
setLength(RandomData,4);for i := 0 to 3 do RandomData[i]:=0;SpendTime:=0;Timer1.Enabled:=False;Timer1.Interval:=1000;end;然后在標(biāo)題為“開始”的“開始”按鈕的OnClick事件中,加入如下所示的代碼,將Timer1的Enabled屬性設(shè)置為True,使Timer1組件有效,即現(xiàn)在Timer1能響應(yīng)OnTimer事件,計(jì)時(shí)開始。并將SpendTime重新設(shè)置為0:
Timer1.Enabled:=True;Timer1.Interval:=1000;SpendTime:=0;//將SpendTime重新設(shè)為0 再在“計(jì)算”按鈕的OnClick事件句柄中,增加下面的語句,使Timer1無效:
Timer1.Enabled:=False;最后雙擊Timer1組件,創(chuàng)建Timer1的OnTimer事件句柄,在其中加入如下所示的代碼,將SpendTime加1,并設(shè)置Label5的Caption屬性:
procedure TForm1.Timer1Timer(Sender: TObject);begin SpendTime:=SpendTime+1;Label5.Caption:='使用時(shí)間:'+IntToStr(SpendTime)+'秒';end;這樣,每隔1秒鐘,程序就刷新一次使用時(shí)間。
3.2.3 設(shè)計(jì)初始界面
按住Shift鍵,然后單擊組件面板中Additional頁中的Image組件,這時(shí)該組件邊緣出現(xiàn)藍(lán)色的邊框,并且凹陷下去,表示可以在窗體上連續(xù)加入幾個(gè)Image組件。選擇好Image組件后,在窗體的左上角單擊,加入1個(gè)Image組件,然后依次向右單擊鼠標(biāo)3次,再加入3個(gè)Image組件。最后再單擊組件面板中最左邊的箭頭。
為了排列這4個(gè)Image組件,先利用Shift鍵將它們同時(shí)選上,然后右擊,選擇Align命令,在隨后出現(xiàn)的Alignment對話框中的Horizontal選項(xiàng)組中選擇Space equally,在Vertical選項(xiàng)組中選擇Tops,表示這4個(gè)組件頂端對齊,水平方向上間距相等。
按照同樣的方法加入4個(gè)Label組件、3個(gè)Button組件和1個(gè)Edit組件。按照表3.1所示設(shè)置各個(gè)組件的屬性。
表3.1 各個(gè)組件的屬性
組件名 Form1 Label1 屬性名 Caption Caption AutoSize WordWrap Caption
屬性值 速算24
1.單擊“開始”按鈕,游戲開始,系統(tǒng)將發(fā)出4張撲克牌
False False
2.要求用戶利用撲克牌顯示的數(shù)字,通過加減乘除運(yùn)算,以最快的速度得出24(可以使用括號),JQKA和“王”算做1。然后在文本框中寫好表達(dá)式,接
著單擊“計(jì)算”按鈕
Label2
Label3 AutoSize WordWrap Caption
False True
3.這時(shí)系統(tǒng)會計(jì)算輸入表達(dá)式的結(jié)果,告訴用戶是對還是錯(cuò)了。在彈出的對話框中單擊“OK”按鈕,如果錯(cuò)了可以再次輸入新的表達(dá)式,重復(fù)上一步。直
到您的表達(dá)式正確,這時(shí)系統(tǒng)會恭喜算對了!
Label4 AutoSize WordWrap Caption AutoSize Caption Caption Caption Text
False True 在下面輸入數(shù)學(xué)表達(dá)式
False 開始 計(jì)算 退出游戲 空
Button1 Button2 Button3 Edit1
現(xiàn)在同時(shí)選擇Label1,Label2和Label3,將它們左對齊,垂直方向等距離排列。將Button1,Button2和Button3左對齊,垂直方向等距離排列。
下面放置4個(gè)Image組件,用于放置4張紙牌的圖片。
先選擇Image1,然后切換到對象查看器中的屬性編輯器,選擇屬性選項(xiàng)頁中的Picture屬性,然后在Picture屬性值欄中雙擊,或單擊此屬性值旁邊的帶有省略號的按鈕,打開Picture Editor對話框,如圖3.6所示。然后單擊Load按鈕,彈出Load Picture對話框,在此對話框中選擇background.bmp文件。最后單擊OK按鈕,退出Picture Editor對話框。
圖3.6 指定圖片
使用同樣的方法,設(shè)定其他3個(gè)Image組件的Picture屬性。
保存我們的新項(xiàng)目,運(yùn)行之后界面如圖3.7所示,與運(yùn)行時(shí)的界面圖3.1稍有不同。這里是設(shè)計(jì)時(shí)界面,只有界面沒有事件響應(yīng)。是程序創(chuàng)建過程中的一個(gè)步驟的檢驗(yàn)。但是,這個(gè)程序還沒有什么具體的功能,為了讓游戲運(yùn)行起來,必須添加代碼,創(chuàng)建相應(yīng)的事件處理程序。
第3章 “速算24”撲克游戲--單元、異常、邏輯
????生成和建立程序????
???????
3.2.4 事件處理
需要添加?個(gè)事件:第一個(gè)用于響應(yīng)單擊?開始?按鈕,在此事件中完成發(fā)牌,即隨機(jī)顯示圖片;第二個(gè)用于響應(yīng)單擊?計(jì)算?按鈕,解析用戶在文本框中輸入的表達(dá)式,計(jì)算表達(dá)式的結(jié)果,并判斷表達(dá)式的結(jié)果是否等于??;第三個(gè)用于響應(yīng)單擊?退出游戲?按鈕,退出游戲(程
序)。?
1.數(shù)據(jù)初始化
創(chuàng)建窗體的????????事件處理程序,在這里進(jìn)行必要的初始化。?第一步先在Unit1中添加Form1的私有成員數(shù)組:
private
{ Private declarations }
RandomData:array of Integer;然后,在對象查看器中選中Form1,選中Event選項(xiàng)卡,在OnCreate一欄對應(yīng)的右邊的空白欄中雙擊,創(chuàng)建OnCreate函數(shù)。添加如下代碼。
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin //初始化,設(shè)置數(shù)組RandomData的長度為4
//并將每個(gè)數(shù)組元素初始化為零
setLength(RandomData,4);
for i := 0 to 3 do
RandomData[i]:=0;
end;這里使用一個(gè)for循環(huán)語句,i是循環(huán)變量,格式是:for循環(huán)變量:=初值to末值do循環(huán)體。你也可以借助Delphi的自動完成功能,在輸入for之后按下Ctrl+J鍵,生成如下代碼:
procedure TForm1.FormCreate(Sender: TObject);
begin
for := to do
begin end;
end;在上述代碼中,程序首先利用setLength函數(shù)設(shè)定可變數(shù)組RandomData的數(shù)組長度為4,然后,將數(shù)組的每一個(gè)單元都設(shè)置為0。這樣,就完成了數(shù)組的數(shù)據(jù)初始化工作。
2.“開始”按鈕的Click事件處理
(?)功能?單擊?開始?按鈕時(shí),系統(tǒng)就隨機(jī)地發(fā)出?張紙牌,顯示在?個(gè)?????組件中。?
(?)代碼?首先,我們需要一個(gè)循環(huán)變量?,一個(gè)字符串變量存放隨機(jī)選取的圖片的文件名。?創(chuàng)建“開始”按鈕的OnClick事件處理程序,在begin前頭添加需要的變量,然后在此事件
中加入如下所示的代碼。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
filename:String;
begin
Randomize;//初始化隨機(jī)數(shù)
for i := 0 to 3 do
begin RandomData[i]:=Random(13)+1;//產(chǎn)生一個(gè)1到13的隨機(jī)數(shù)
filename:=IntToStr(RandomData[i])+'.bmp';//根據(jù)隨機(jī)數(shù),得到文件名
//根據(jù)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內(nèi)部,隨機(jī)數(shù)的產(chǎn)生實(shí)際上也是在一套算法的控制之下,Randomize函數(shù)用于初始化產(chǎn)生隨機(jī)數(shù)的種子,保證兩次產(chǎn)生的隨機(jī)數(shù)不同,而Random(i:integer)則利用初始化過后的隨機(jī)數(shù)種子產(chǎn)生一個(gè)1~i之間的隨機(jī)數(shù)。這里i設(shè)定為13,以配合撲克牌的張數(shù)13。
???????????????????用來將一個(gè)整數(shù)轉(zhuǎn)換成一個(gè)字符串,和上一章中的??????????????????的功能恰好相反。?我們已經(jīng)預(yù)先準(zhǔn)備了位圖文件,它們都是???形式,文件名則是利用數(shù)字????命名。??????中特殊的字符串運(yùn)算符???將兩個(gè)字符串串聯(lián)起來,產(chǎn)生一個(gè)新的字符串,我們需要的位圖文件后綴是???,因此,在產(chǎn)生文件名的時(shí)候,在數(shù)字后面加上??????這個(gè)字符串。?????語句在上一章中已經(jīng)講過,單擊?開始?按鈕后,準(zhǔn)備接受用戶的輸入,然后利用????????方法,把焦點(diǎn)設(shè)置到?????上。????????是??????提供的方法之一,用于設(shè)置輸入
焦點(diǎn)到某個(gè)指定的組件。?
3.“計(jì)算”按鈕的OnClick事件
雙擊“計(jì)算”按鈕,創(chuàng)建此組件的OnClick事件響應(yīng)句柄,然后在代碼編輯器中加入如下所
示的代碼,用于計(jì)算用戶輸入的表達(dá)式。
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:='您輸入的表達(dá)式的計(jì)算結(jié)果為'+IntToStr(Result)+'!';Application.MessageBox(PChar(answer),'錯(cuò)了',MB_OK);
end;
end;這段程序根據(jù)自定義函數(shù)的計(jì)算結(jié)果判斷用戶的輸入正確與否,并且輸出相應(yīng)的結(jié)果以提示
用戶。
在語句“result:=TotalCompute(Edit1.Text)”中用到了一個(gè)自定義的函數(shù)TotalComp-ute,我們用它來計(jì)算用戶輸入的表達(dá)式。現(xiàn)在我們還沒編寫這個(gè)函數(shù)的代碼,所以,目前這段代碼是無法運(yùn)行的。沒關(guān)系,可以先把它用“//”注釋掉,然后隨便給 result賦一個(gè)值,測試這個(gè)事件處理程序的其他部分是否運(yùn)行正常,例如:
//result:=TotalCompute(Edit1.Text);
result:=24;這樣,運(yùn)行后,單擊“計(jì)算”按鈕后的顯示如圖3.8所示。
圖3.8 成功的提示信息
我們用一個(gè)??????類型的??????變量存放出錯(cuò)信息,但是???????函數(shù)的第一個(gè)參數(shù)要求是?????(????????????????字符指針)類型,因此,我們用一個(gè)強(qiáng)制類型轉(zhuǎn)換將??????轉(zhuǎn)換
成?????。?4.“退出游戲”按鈕的OnClick事件
雙擊“退出游戲”按鈕,創(chuàng)建此組件的OnClick事件處理程序,然后在代碼編輯器中加入如
下所示的代碼,用于退出程序。
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;在上一章中我們提到可以用?????????????????????代替?????,但這里使用?????來結(jié)束程序的運(yùn)行。這樣,可以通過????????????事件來指定在什么條件下窗體可以關(guān)閉。
第3章 “速算24”撲克游戲--單元、異常、邏輯
????生成和建立程序???????????5.OnCloseQuery事件
當(dāng)調(diào)用?????方法來關(guān)閉窗體時(shí),????????????事件發(fā)生。利用????????????事件來指定在什么條件下窗體可以關(guān)閉。????????????事件包含一布爾型的????????參量,可以用它來決定窗體是否關(guān)閉。????????的默認(rèn)值為????。?可以利用????????????事件來詢問用戶是否真的希望馬上關(guān)閉窗體。?我們在這里彈出一個(gè)對話框,代碼如下所示:
procedure TForm1.FormCloseQuery(Sender: TObject;var CanClose: Boolean);begin if(MessageDlg('現(xiàn)在要退出游戲嗎?', mtConfirmation, [mbOk, mbCancel], 0)= mrOk)then canClose:=True else canClose:=False;end;MessageDlg是一種提示對話框,第一個(gè)參數(shù)是對話框詢問的訊息,是一個(gè)字符串;第二個(gè)參數(shù)則代表對話框的類型,mtConfirmation是一個(gè)TMsgDlgType的枚舉類型,表示這個(gè)對話框是個(gè)確認(rèn)對話框。TMsgDlgType類型如下所示:
type TMsgDlgType =(mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);以上定義的對話框類型分別表示:警告、錯(cuò)誤、提示、確認(rèn)和自定義類型。
第三個(gè)參數(shù)是TMsgDlgBtn類型的集合,這個(gè)集合包含了類型為TMsgDlgBtn的按鈕,TMsgDlgBtn的定義如下:
type TMsgDlgBtn =(mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mnNoToAll, mbYesToAll, mbHelp);在我們的程序中,利用了一個(gè)集合[mbOK, mbCancle],表示在對話框中顯示兩個(gè)按鈕:OK和Cancel的組合。
最后一個(gè)參數(shù)是用來描述幫助索引的長整型變量,用來獲取提示用戶的幫助信息,這里我們沒有任何幫助信息,先不管它。??????????函數(shù)和用戶交互,返回一個(gè)????類型的數(shù)字,??????預(yù)先定義了一套數(shù)字,用來直觀地表示對話框返回信息。如果用戶單擊了??按鈕,這個(gè)對話框返回????,效果如圖???所示。?
圖3.9 關(guān)閉窗口時(shí)詢問用戶
現(xiàn)在,我們已經(jīng)完成了程序的主體部分。??第3章 “速算24”撲克游戲--單元、異常、邏輯
????單元間的互相引用????????3.3.1 單元引用的概念
在第?章關(guān)于單元的知識里,我們已經(jīng)知道??????可以定義不包含窗體的單元,它集中定義了程序中使用的函數(shù),這一節(jié)里,我們就要實(shí)現(xiàn)這樣的一個(gè)單元,用來實(shí)現(xiàn)上面提到的????????????函數(shù)。?我們可以在任何單元中編寫自己的函數(shù),當(dāng)然包括與窗體相連的單元。可是我們常常需要用到一些常用的函數(shù),這時(shí)最好是創(chuàng)建一個(gè)不與窗體相連的獨(dú)立單元,用它來容納自己的函數(shù),這稱為獨(dú)立的單元文件。當(dāng)創(chuàng)建了不與窗體相連的獨(dú)立單元文件后,項(xiàng)目中的其他單元就能很容易地共享這些函數(shù),其他項(xiàng)目也可以很容易地調(diào)用這些函數(shù)了。?對于單元間的引用,要用到????語句。?3.3.2 uses語句
????語句告訴程序在最終的執(zhí)行代碼中需要用到哪些函數(shù)和過程。??????會自動把一些必須的單元包括進(jìn)來,例如???????,????????,????????等。對于我們自己編寫的單元,如果程序中使用了該單元的函數(shù)或代碼,也需要包括在????部分中。?????語句具有兩種類型:公有引用和私有引用。?在?????????部分包含的????語句代表的是本單元的公有引用,就是說,這部分的引用可以被其他引用本單元的單元繼承性地引用。在?????????部分的????語句應(yīng)包含在?????????部分中的代碼所需要的單元,去掉那些??????可以自動加入到程序中的單元。?在?????????部分包含的????語句代表的是本單元的私有引用,就是說,這部分的引用只能被本單元內(nèi)部使用。在??????????????部分的????語句應(yīng)只包含在??????????????部分中的代碼所需的單元的名字。?對于單元間的引用,要避免交叉引用。假設(shè)有兩個(gè)單元?和?,如果?出現(xiàn)在?的?????????部分的????語句中,那么單元?便不能出現(xiàn)在單元?的?????????的????語句中。因?yàn)檫@樣會產(chǎn)生對單元的循環(huán)訪問,編譯時(shí)會出現(xiàn)錯(cuò)誤信息。?3.3.3 創(chuàng)建另一個(gè)單元
創(chuàng)建一個(gè)不與窗體相連的單元文件的方法是,首先選擇主菜單的????命令,然后選擇???命令,此時(shí)??????彈出一個(gè)?????????對話框,如圖????所示。在此圖中選擇???選項(xiàng)卡中的????,然后單擊??按鈕。此時(shí)??????自動為我們創(chuàng)建一個(gè)名為?????的獨(dú)立單元文件,并顯示在代碼編輯器中,我們只需在此加入函數(shù)即可。?
圖3.10 New Items對話框
單元創(chuàng)建之后,就需要實(shí)現(xiàn)單元之間的互相引用。這里有兩種方法:?(1)直接在Unit1中寫入uses Unit2,代碼如下所示:
var Form1: TForm1;implementation uses Unit2;(2)選擇主菜單的File | Use Unit命令,此時(shí)Delphi彈出Use Unit對話框,如圖3.11所示,在此窗口中列出當(dāng)前文件沒有連接的所有文件,只需選擇需要連接的文件即可。當(dāng)選擇了某一文件并單擊OK按鈕后,當(dāng)前文件就包含了對所選文件的引用。
圖3.11 Use Unit對話框
如果當(dāng)前文件已經(jīng)連接了當(dāng)前項(xiàng)目中所有其他文件,選擇????????命令后,就會彈出如圖????所示的信息窗口,告訴程序員當(dāng)前文件已經(jīng)連接了當(dāng)前項(xiàng)目中所有其他文件。?
圖3.12 Information對話框
此時(shí)再編譯,程序就沒有任何錯(cuò)誤了。?現(xiàn)在我們已經(jīng)創(chuàng)建了?????,它將用作我們的數(shù)學(xué)函數(shù)定義單元。在開始定義這個(gè)單元之前,需要先了解一下關(guān)于??????的異常處理機(jī)制。?第3章 “速算24”撲克游戲--單元、異常、邏輯
3.4 異 常 處 理
3.4.1 異常處理的概念 在應(yīng)用程序開發(fā)中如何檢測、處理程序的運(yùn)行錯(cuò)誤是一個(gè)很重要的問題。在 Delphi 的IDE(集成開發(fā)環(huán)境)中提供了一個(gè)完善的內(nèi)置調(diào)試器,可以發(fā)現(xiàn)大部分程序錯(cuò)誤。但并不是所有的錯(cuò)誤都可以被發(fā)現(xiàn),而且當(dāng)程序涉及到與外設(shè)的數(shù)據(jù)交換或操作外設(shè),如要求用戶輸入、讀寫磁盤等時(shí),錯(cuò)誤的發(fā)生是程序無法控制的,如輸入非法字符、磁盤不能讀寫等。這些情況不僅會導(dǎo)致應(yīng)用程序異常中止,而且可能引起系統(tǒng)的崩潰。針對這些問題,Delphi提供了一套強(qiáng)大的異常處理機(jī)制。巧妙地利用它,可以使程序更為強(qiáng)健,使用更為友好。
Delphi異常處理機(jī)制建立在Protected Blocks(保護(hù)塊)的概念上。所謂保護(hù)塊是指用保留字try和end封裝的一段代碼。保護(hù)塊的作用是當(dāng)應(yīng)用程序發(fā)生錯(cuò)誤時(shí)自動創(chuàng)建一個(gè)相應(yīng)的Exception(“異?!鳖悾3绦蚩梢圆东@并處理這個(gè)“異?!鳖?,以確保程序的正常結(jié)束以及資源的釋放和數(shù)據(jù)不受破壞。如果程序不進(jìn)行處理,則系統(tǒng)會自動提供一個(gè)消息框?!爱惓!鳖愂荄elphi異常處理機(jī)制的核心,也是Delphi異常處理的主要特色。Delphi提供的所有“異常”類都是類Exception的子類。用戶也可以從類Exception派生一個(gè)自定義的“異?!鳖?。
3.4.2 資源保護(hù)方式
回收分配的資源是確保程序健壯性的一個(gè)關(guān)鍵。但默認(rèn)情況下異常發(fā)生時(shí)程序會在出錯(cuò)點(diǎn)自動退出當(dāng)前模塊,因此需要一種特殊的機(jī)制來確保即使在異常發(fā)生的情況下,釋放資源的語句仍能被執(zhí)行,而Delphi的異常處理正提供了這種機(jī)制。
Delphi提供了一個(gè)保留字finally,用于實(shí)現(xiàn)資源的保護(hù)。
{分配資源}
try {資源使用情況} finally {釋放資源}
end;try?finally?end就形成了一個(gè)資源保護(hù)塊。finally后面的語句在任何情況下(不論程序是否發(fā)生異常)都會執(zhí)行。
在異常保護(hù)的情況下,當(dāng)異常發(fā)生時(shí),系統(tǒng)會自動彈出一個(gè)消息框,在框中顯示異常的消息。退出當(dāng)前模塊后異常類自動清除。
3.4.3 異常響應(yīng)方式
異常響應(yīng)為開發(fā)者提供了一個(gè)按需進(jìn)行異常處理的機(jī)制。try?except?end形成了一個(gè)異常響應(yīng)保護(hù)塊。與finally不同的是:正常情況下except 后面的語句并不被執(zhí)行,而當(dāng)異常發(fā)生時(shí)程序自動跳到except處,進(jìn)入異常響應(yīng)處理模塊。當(dāng)異常被響應(yīng)后異常類自動清除。
下面是異常響應(yīng)方式的一般代碼:
try {程序正常功能} except on ESomething do {響應(yīng)特定異常} else {提供默認(rèn)響應(yīng)} end;保留字on?do用于判斷異常類型。必須注意的是:except后面的語句必須包含在某一個(gè)on?do模塊中,而不能單獨(dú)存在。這是又一個(gè)與finally不同的地方。
3.4.4 提供默認(rèn)響應(yīng)
在異常響應(yīng)模塊中,一般我們只對希望響應(yīng)的特定異常進(jìn)行處理。如果一個(gè)異常發(fā)生而響應(yīng)模塊并沒有包含對它的處理代碼,則退出當(dāng)前響應(yīng)模塊,異常類仍被保留。
為了保證任何異常發(fā)生后都能在當(dāng)前響應(yīng)模塊中被清除,可以定義默認(rèn)響應(yīng):
try {程序正常功能} except on ESomething do {響應(yīng)特定異常} else {提供默認(rèn)響應(yīng)} end;由于else可以響應(yīng)任何異常,包括我們一無所知的異常,因此在默認(rèn)響應(yīng)中最好只包括諸如顯示一個(gè)消息框之類的處理,而不要改變程序的運(yùn)行狀態(tài)或數(shù)據(jù)。
第3章 “速算24”撲克游戲--單元、異常、邏輯
3.5 數(shù)學(xué)邏輯單元(1)
此游戲程序最關(guān)鍵的地方是如何將用戶輸入的字符串表達(dá)式解析成數(shù)學(xué)表達(dá)式。為了使程序結(jié)構(gòu)清晰明了,我們將此解析代碼和程序的主代碼分開,單獨(dú)編寫成一個(gè)單元。
3.5.1 算法設(shè)計(jì)
游戲的難點(diǎn)是如何將一字符串形式的表達(dá)式解析成計(jì)算機(jī)能計(jì)算的算術(shù)表達(dá)式。例如對于字符串“3^(4*(9+4))”,如何讓計(jì)算機(jī)解析、計(jì)算。
我們的想法是按照數(shù)學(xué)四則運(yùn)算規(guī)則,先逐層進(jìn)入最里層的括號,然后在括號內(nèi)部計(jì)算乘方,接著進(jìn)行乘(除)法運(yùn)算,最后按順序進(jìn)行加(減)運(yùn)算,當(dāng)本層括號內(nèi)部計(jì)算完成后,返回結(jié)果,去掉括號內(nèi)部數(shù)據(jù),退出到下一級括號(如果有)內(nèi)進(jìn)行計(jì)算。
這里面涉及的技術(shù)細(xì)節(jié)主要有下面幾點(diǎn):
(1)層層剝離括號,然后從最里層的括號開始計(jì)算。(2)對于每一個(gè)運(yùn)算符號,找到符號兩側(cè)的數(shù)字,形成一個(gè)計(jì)算式。
(3)每一個(gè)子計(jì)算式完成后,運(yùn)算結(jié)果返回到原始數(shù)列中,作為子串的一部分,繼續(xù)進(jìn)行上述計(jì)算。
3.5.2 字符串的相關(guān)函數(shù)
在游戲中,用戶輸入的都是字符數(shù)據(jù),我們需要從這些字符中分析得到數(shù)字和運(yùn)算符號,因此要用到與字符串操作有關(guān)的函數(shù)。
function Pos(sub , all:string):integer;這個(gè)函數(shù)含有兩個(gè)參數(shù):sub表示要查找的字符,all表示原字符串。函數(shù)在字符串a(chǎn)ll中尋找指定的字符sub的位置,如果字符串中不存在sub字符,則函數(shù)結(jié)果為0。
function LastDelimiter(sub,all :string):integer 這個(gè)函數(shù)含有兩個(gè)參數(shù):sub表示要查找的字符,all表示原字符串。函數(shù)返回在字符串a(chǎn)ll中所有查找到的指定字符sub的最后一個(gè)的位置,如果字符串中不存在sub字符,則函數(shù)結(jié)果為0。
function Copy(allstring:string;first,length:integer):string 這個(gè)函數(shù)的3個(gè)參數(shù)的含義分別是:allstring代表原來的字符串,first表示拷貝開始的位置,length表示要拷貝的子串長度。函數(shù)返回拷貝成功的子串。
procedure Delete(str:string;ppos,length:integer)這個(gè)過程用于刪除字符串中的一段字符。參數(shù)str代表將要操作的字符串,ppos代表開始刪除的位置,length表示將要刪除多少個(gè)字符。function Length(S): Integer;Length函數(shù)返回字符串S的長度。
function Trim(const S: string): string;overload;function Trim(const S: WideString): WideString;overload;Trim函數(shù)返回字符串S去掉前面和后面的空格后的字符串。
下面的例子給出一個(gè)綜合利用字符串處理函數(shù)編寫的一個(gè)處理特定字符串的函數(shù),它的功能是:輸入一個(gè)字符串后,可以返回字符串中兩個(gè)單括號之間的子字符串,并去掉前面和后面帶著的空格:
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 算法的代碼編寫
基于上述的考慮和知識基礎(chǔ),我們在聲明部分定義下列幾個(gè)主要函數(shù):
(1)AnyLastPos函數(shù)定位最后一個(gè)算術(shù)運(yùn)算符的位置。
function AnyLastPos(Str:String):integer;(2)AnyFirstPos函數(shù)定位最先一個(gè)算術(shù)運(yùn)算符的位置。
function AnyFirstPos(Str:String):integer;(3)AnyFirstF函數(shù)判斷最先出現(xiàn)的符號是+號、-號、*號還是/號。
function AnyFirstF(Str:String):Char;(4)SubCompute函數(shù)用于計(jì)算不帶()號的加、減、乘、除運(yùn)算。
function SubCompute(Str:String):integer;(5)TotalCompute函數(shù)用于計(jì)算表達(dá)式的結(jié)果。
function TotalCompute(Str:String):integer;1.尋找最后一個(gè)算術(shù)運(yùn)算符
定義4個(gè)整數(shù)變量SubPos,PluPos,MulPos,DivPos,在給定的字符串中尋找+,-,*,/的最后位置,將這些位置存儲在上述的4個(gè)變量中,然后比較4個(gè)符號出現(xiàn)的位置,得到數(shù)值最大的運(yùn)算符;在返回的結(jié)果中,返回這個(gè)運(yùn)算符的位置。
程序代碼如下所示:
function AnyLastPos(Str:String):integer;var SubPos:integer;PluPos:integer;MulPos:integer;DivPos:integer;Pos:Integer;begin //定位字符串中最后一個(gè)運(yùn)算符的位置
SubPos:=LastDelimiter('-',Str);PluPos:=LastDelimiter('+',Str);MulPos:=LastDelimiter('*',Str);DivPos:=LastDelimiter('/',Str);Pos:=SubPos;if(Pos
分別在給定的字符串中尋找+,-,*,/第一次出現(xiàn)的位置,然后比較4個(gè)符號出現(xiàn)的位置,得到數(shù)值最小的運(yùn)算符。在返回的結(jié)果中,傳遞的是這個(gè)運(yùn)算符的位置。
程序代碼如下所示:
function AnyFirstPos(Str:String):integer;var SubPos:integer;PluPos:integer;MulPos:integer;DivPos:integer;ForPos:integer;FirstPos:integer;begin //定位字符串中最先一個(gè)運(yùn)算符的位置
SubPos:=Pos('-',Str);PluPos:=Pos('+',Str);MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);ForPos:=Pos('^',Str);FirstPos:=200;if(SubPos=0)then //如果沒有-號
SubPos:=200;//將SubPos設(shè)置成一個(gè)不可能的值
if(PluPos=0)then //如果沒有+號
PluPos:=200;//將PluPos設(shè)置成一個(gè)不可能的值
if(MulPos=0)then //如果沒有*號
MulPos:=200;//將MulPos設(shè)置成一個(gè)不可能的值
if(DivPos=0)then //如果沒有/號
DivPos:=200;//將DivPos設(shè)置成一個(gè)不可能的值
if(ForPos=0)then //如果沒有^號
ForPos:=200;//將ForPos設(shè)置成一個(gè)不可能的值
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;//結(jié)束函數(shù),返回位置
end;第3章 “速算24”撲克游戲--單元、異常、邏輯
3.5 數(shù)學(xué)邏輯單元(2)
3.得到最先出現(xiàn)的運(yùn)算符類型
這個(gè)函數(shù)的返回結(jié)果是Char類型,代表這是一個(gè)字符變量。實(shí)際上,它返回的是+、-、*、/ 這4個(gè)符號中最早出現(xiàn)的一個(gè)。
程序分別尋找4個(gè)符號最早出現(xiàn)的位置,然后判斷最先出現(xiàn)的是哪一種符號,再根據(jù)符號類型返回代表運(yùn)算符的字符。
在具體的實(shí)現(xiàn)過程中,因?yàn)槲覀円玫阶钕瘸霈F(xiàn)的運(yùn)算符,所以判斷的是每次尋找后各個(gè)運(yùn)算符的位置的最小值。如果不存在這個(gè)運(yùn)算符,則將代表這個(gè)運(yùn)算符位置的相應(yīng)變量設(shè)置為200。對于本程序來說,這是一個(gè)搜索過程中不可能達(dá)到的值,這樣就排除了這個(gè)位置的繼續(xù)比較的可能。
程序代碼如下所示:
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設(shè)置成一個(gè)不可能的值
if(PluPos=0)then //如果沒有+號
PluPos:=200;//將PluPos設(shè)置成一個(gè)不可能的值
if(MulPos=0)then //如果沒有*號
MulPos:=200;//將MulPos設(shè)置成一個(gè)不可能的值
if(DivPos=0)then //如果沒有/號
DivPos:=200;//將DivPos設(shè)置成一個(gè)不可能的值
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;//結(jié)束函數(shù),返回位置 end;4.計(jì)算不帶括號的運(yùn)算表達(dá)式
做完上述工作后,我們可以開始進(jìn)行一些實(shí)際的運(yùn)算了。
包括加、減、乘、除、乘方運(yùn)算的表達(dá)式的程序算法如下所示:
(1)尋找乘方符號“^”,如果存在,則計(jì)算一次乘方,去掉計(jì)算過的部分,接著循環(huán)查找和計(jì)算子串的乘方。
(2)尋找乘號“*”或者除號“/”,如果存在,則計(jì)算一次乘(除)法,去掉計(jì)算過的部分,接著循環(huán)計(jì)算子串的乘除法。
(3)尋找加號“+”或者減號“-”,如果存在,則計(jì)算一次加(減)法,去掉計(jì)算過的部分,接著循環(huán)計(jì)算子串的加減法。
上述算法是嚴(yán)格按照順序進(jìn)行的,它體現(xiàn)了數(shù)學(xué)運(yùn)算中的優(yōu)先關(guān)系,經(jīng)過上述的計(jì)算,子字符串被分解,計(jì)算完畢。
無論是乘方、乘除法還是加減法,內(nèi)部實(shí)現(xiàn)的邏輯是基本一致的。下面,我們設(shè)定有一個(gè)運(yùn)算表達(dá)式: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:='';
//定位第一個(gè)^號位置,計(jì)算乘方
First:=Pos('^',Str);While(First<>0)do //循環(huán)計(jì)算乘方
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;
//定位第一個(gè)*號或/號的位置
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;// 將除號所在位置設(shè)置成一個(gè)大于MulPos但又不可能的值
end;if((DivPos<>0)and(MulPos=0))then begin First:=DivPos;MulPos:=2000;// 將乘號所在位置設(shè)置成一個(gè)大于DivPos但不可能的值
end;while(First<>0)do //循環(huán)計(jì)算乘、除
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;// 將除號所在位置設(shè)置成一個(gè)大于MulPos但又不可能的值
end;if((DivPos<>0)and(MulPos=0))then begin First:=DivPos;MulPos:=2000;// 將乘號所在位置設(shè)置成一個(gè)大于DivPos但不可能的值
end;end;//定位+、-號首先出現(xiàn)的位置
First:=AnyFirstPos(Str);if(First=200)then //如果沒有+、-號,則可以直接返回結(jié)果
begin SubCompute:=StrToInt(Str);exit;end;Fuhao:=AnyFirstF(Str);//確定首先出現(xiàn)的符號是+號還是-號
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;程序執(zhí)行過程如下所示:
(1)定位字符串中第一個(gè)乘方符號“^”的位置First。這個(gè)式子中的First為4。
(2)如果存在乘方符號,即First不等于0,則繼續(xù)進(jìn)行計(jì)算,否則退出循環(huán)。
(3)進(jìn)入循環(huán)體內(nèi)部,得到“^”前面的子串tempStr(“3+2”),尋找tempStr中的最后一個(gè)運(yùn)算符temp(這里是“+”),則Temp和First之間的字符就是乘方符號的第一個(gè)參數(shù)(“2”)。
(4)同樣的邏輯,得到“^”后面的子串tempStr(“5/4”),尋找tempStr中的第一個(gè)運(yùn)算符位置temp(“/”),則Temp和First之間的字符就是乘方符號的第二個(gè)參數(shù)(“5”)。
(5)去掉乘方符號和兩個(gè)參數(shù),得到左側(cè)子串left(“3+”)和右側(cè)子串right(“/4”)。
(6)利用這兩個(gè)參數(shù)和乘方符號,計(jì)算乘方,將結(jié)果返回,并插入在left和right之間,得到一次計(jì)算后的新字符串(“3+32/4”)。
(7)判斷新串內(nèi)部是否包含“^”,如果包含,則返回到步驟(3),不包含則進(jìn)入下一種運(yùn)算。
第3章 “速算24”撲克游戲--單元、異常、邏輯
3.5 數(shù)學(xué)邏輯單元(3)5.計(jì)算整個(gè)表達(dá)式的值
TotalCompute函數(shù)利用循環(huán),找到最內(nèi)層的一對括號,然后調(diào)用SubCompute函數(shù)處理這一對括號中的表達(dá)式。SubCompute函數(shù)處理的表達(dá)式中已經(jīng)沒有括號了,因此SubCompute只需處理乘方、加、減、乘、除,返回結(jié)果,形成新的字符串。
當(dāng)整個(gè)字符串縮減至空值時(shí),整個(gè)表達(dá)式計(jì)算完成。
程序代碼如下所示:
function TotalCompute(Str:String):integer;var First:integer;Last:integer;SubStr:String;LeftStr:String;Middle:String;Right:String;temp:integer;begin First:=LastDelimiter('(',Str);//定位最后一個(gè)(號位置 while(First<>0)do begin SubStr:=Copy(Str,First+1,Length(Str)-First);Last:= Pos(')',Str);//Last:=Last+First;//定位最后一個(gè)(號以后的最開始的)號位置
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);//進(jìn)入下面的計(jì)算
Middle:=IntToStr(temp);
Str:=LeftStr+Middle+Right;First:=LastDelimiter('(',Str);end;
Result:=SubCompute(Str);end;end.在程序中,“計(jì)算”按鈕的OnClick事件處理程序中調(diào)用TotalCompute函數(shù)。函數(shù)中使用了一些數(shù)學(xué)函數(shù)和定位字符串的函數(shù),這些函數(shù)Delphi已經(jīng)在相應(yīng)的系統(tǒng)單元中進(jìn)行了定義,我們需要把這些系統(tǒng)單元包括到文件里面:
uses Sysutils,Math;將前面調(diào)用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點(diǎn)游戲
c++24點(diǎn)游戲
#include “iostream” #include “string” using namespace std;
//定義Stack類
const maxsize=20;
enum Error_code { success, overflow, underflow };
template
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
template
bool Stack
template
bool Stack
template
template
template
Error_code Stack
template
Error_code Stack
template
Error_code Stack
Stack
int set;
// 判斷程序中的異常,以便適時(shí)退出?//
void process(char c)
//計(jì)算兩個(gè)數(shù)的 +-* / 運(yùn)算// { 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請輸入要進(jìn)行運(yùn)算的表達(dá)式,包括” +,-,*,/,=,(,)“和數(shù)字,”< <<“注意: 以數(shù)字開頭,等號結(jié)尾,中間括號要匹配.”< double do_command(const string &str){ string s=“"; double outcome=-1;char c; for(int i=0;str[i]!='