趣味小程序汇编
一九九0年广东省青少年计算机LOGO程序设计竞赛中有这样一道题:把45拆成A、B、C、D四个数,(即这四个数之和为45),要求:A数加上2、B数减云、C数乘上2、D数除以2的结果都相等。问:A、B、C、D各是多少?编程序解决这个问题。
这个问题按常规的思路应该是用四重循环进行搜索。但是这种方法占用时间太长。有没有较好的方法呢?当然有。笔者用BASIC语言巧妙地解决了这一问题。程序如下:
10 T=2
20 A=T-2:B=T+2:C=T/2:D=T*2
30 IF A+B+C+D=45 THEN PRINT A,B,C,D:END
40 T=T+2:GOTO 20
]RUN
8 12 5 20
以上程序充分体现了逆向思维的优越性,运行速度快。
●54=?
题目:若8×8=54,那么54应该是多少?
注:等式左端是十进制数,右端是X(未知)进制数;问题中的54是十进制数,要求回答54在X进制下是多少。
程序:
10 X=(8*8-4)/5
11 INPUT“N=”;N
12 M=N
14 I=1
15 IF N〈 X THEN GOTO 20
16 R(I)=INT(N/X)
17 N=N-R(I)*X
18 I=I+1
19 GOTO 15
20 PRINT M;“(10)=”;
21 FOR J=1 TO I
22 PRINT R(J);
23 NEXT J
24 PRINT “(”;X;“)”
25 END
RUN
N=54
54(10)=46(12
●犬追线
在一正方形场地四角有四条猎犬,分别为A、B、C、D。鸣枪后它们同时起跑,并以相同的速率A追B;B追C;C追D;D追A。
运行下面程序,就能在屏幕上展现出它们的运动轨迹__优美的犬追线程序。在APPLE机上运行。
10 H=140: I=80: L=79
20 A=H_L: B=I_L
30 C=H+L: D=I_L
40 HGR: HCOLOR=3
50 HPLOT A,B: HPLOT C ,D
70 HFLOT H_A+H,I_B+I
80 HPLOT H_C+H,I_D+I
90 E=C_A:F=D_B
100 K=ABS(F/E)
110 S=SQR(1/(K*K+1))
120 A=A+SGN(E)*S
130 B=B+SGN(F)*S*K
140 C=H+(I_B):D=I_(H_A)
150 IF ABS (E)+ABS (F)>1 THEN 5
●群星闪烁
黑夜晴空,满天星斗闪烁,给人一种静谧神秘的感觉。运行下面程序,可在屏幕上显示出群星闪烁的情景。
5 HGR2:HCOLOR=0:HPLOT 21,21:CALL 62454
10 DIM A(210,B(210),C(210):FOR I=1 TO 210
20 B(I)=INT(RND(1)*7+0.5):HCOLOR=B(I)
25 A(I)=INT (RND(1)*280):C(I)=INT(RND(1)*192)
27 HPLOT A(I),C(I):NEXT I
30 FOR L=1 TO 210:HCOLOR=0
40 HPLOT A(I),C(I)
50 FOR T=1 TO 100:NEXT T
60 HCOLOR=B(I):HPLOT A(I),C(I)
70 NEXT L:GOT 30
本程序在APPLE_Ⅱ计算机上运行。程序中5句为背景设置,20句为星星的色彩,25句为每个星星的坐标,30_70句的作用是使星星闪烁,50句是延时语句
●X=?
题目:求出10000以内,被2除余1、被3除余2、被4除余3、被5除余4、被6除余5、被7除余6、被8除余7、被9除余8的数。
程序:
10 DIM A(5):T=5:FOR I=1 TO 5:A(I)=T:T=T+1:NEXT I
20 FOR T=2 TO 3:FOR I=1 TO 5
30 IF A(I)/T<>INT (A(I)/T) THEN 50
40 A(I)=A(I)/T
50 NEXT I:NEXT T
60 A=2*3*A(1)*A(2)*A(3)*A(4)*A(5)
70 FOR B=A TO 10000 STEP A
80 PRINT B-1: NEXT B
90 END
RUN
2519
5039
755
●电脑万花筒
程序运行可产生丰富多变的图案,犹如一个奇妙的万花筒,而所有语句仅占一个程序行(中华、APPLE机)。
1 HGR 2:FOR N=0 TO 9:C=INT (RND (1)* 5):S=INT(RND (1)* 3+5):FOR A=0 TO 278 STEP 2:HCOLOR=S:HPLOT A,0 TO 279-A,191:HCOLOR=C:HPLOT A+1,0 TO 278-A,191:NEXT:FOR A=0 TO 190 STEP 2:HCOLOR=S: HPLOT 279, A TO 0,191-A:HCOLOR=C:HPLOT 279,A+1 TO 0,190-A:NEXT A,N:IF PEFK(-16384)>127 THEN END:GOTO
●电脑与诗歌
如果你在摆弄电脑的同时,还是一位诗歌爱好者,那么你当然知道,诗歌的写作和欣赏,须要掌握诗词的平仄格式,律诗与绝句各自的平仄格式,是对押韵和声调的严格要求,不知这种要求的人,无法真正欣赏今体诗;不按这种要求写的诗,不能称为律诗和绝句。按照我国著名语言学家王力教授的《诗词格律概要》一书所述,律诗和绝句的平仄和格式可按首句末两字的平仄来分,共有十六种正格句型,你只要在计算机上运行这个程序,计算机立即为你把这十六种平仄格式全部列印出来,你不妨试一试。
10 DIM A(11,7):B$(0)="平":B$(1)="仄":B$(2)="绝":B$(3)="五":B$(4)="律":B$(5)="七"
20 DATA 0,0,1,1,0,0,1:FOR J=1 TO 7:READDA(1,J):NEXT J
30 FOR I=1 TO 5:S=2*I+1:FOR J=1TO 7:A(S-1,J)=1-A(S-2,J):NEXT J
40 FOR J=1 TO 7:A(S,J)=A(S-1,J):NEXT J:T=A(S,5):A(S,5)=A(S,7):A(S,7)=T:NEXT I
50 FOR L=1 TO 4:X=4-SGN(L-2.5):Y=2*(L-2*INT(L/2)+1):A=6-X
60 FOR K=1 TO 4:B=4-2*(INT(ABS(K-2.5))):C=B+2*(Y-1)
70 PRINT B$(X);B$(Y);B$(A(K,6));B$(A(K,7));"脚句型:":PRINT
80 PRINT SPC(4);:FOR J=A TO 7:PRINT B$(A(K,J));:NEXT J:PRINT
90 FOR I=B TO C:PRINT SPC(4);:FOR J=A TO 7:PRINT B$(A(I,J));:NEXT J:PRINT:NEXT I
100 PRINT :NEXT K,L:EN
●巧求π值
用计算机可以进行许多有趣的程序设计,特别是初学者,只需一些极简单的程序语句即可进行笔算相当复杂的计算程序设计。我设计的求园周率π值程序就是这样。原理:多边形的边数越多,则周长越接近于其外接圆周长,由此来计算圆周率。使用该程序很快即可算出古人用毕生精力来计算,尚成就甚微的π值。程序如下:
10 B=1:X=1
20 Y=(X↑2+3)↑.5
30 Z=3↑.5/y
40 A=(8-8*Z)↑.5*3*B
50 B=B*2
60 X=X*3↑.5/(Y+3↑.5)
70 PRINT "A=";A
80 GOTO 20
美国一大学生用计算机将园周率算到了小数点后上万位,这是众所周知的。而该程序若要在微机上如此,则需采取一些特殊措施,如引入大数据程序,防止浮点数太大,而造成误差等等
●数台阶
一段长长的台阶,如果每次跨二阶,则最后剩一阶;如果每次跨三阶,则最后剩二阶;如果每一次跨五阶,则最后剩四阶;如果每次跨六阶,则最后剩五阶;如果每次跨七阶,则最后刚好走完,一阶不剩,问此台阶一共有多少阶?
10 INPOT N
20 FOR I=1 TO N
30 IF(I-1)/2<>INT((I-1)/2) THEN 90
40 IF(I-2)/3<>INT((I-2)/3) THEN 90
50 IF(I-4)/5<>INT((I-4)/5) THEN 90
60 IF(I-5)/6<>INT((I-5)/6) THEN 90
70 IFI/7<>INTI/7) THEN 90
80 PRINT I
90 NEXE I
100 END
●星际历险
自从人类征服月球,踏上月球上松软的土地,于是人类就更大胆地向外空间发展。你必须学会驾驶星际战机,接受挑战。
下面这个程序可以带你领略一下星际历险的滋味。(本程序在苹果Ⅱ机及中华机上运行通过)
10 HOME: X=20:Y=13:S=0
20 FOR I=1 TO 24
30 VTAB I:HTAB 9:PRDINT"'":HTAB 3D:PRINT"'";
40 NEXT I
50 A=X:B=Y
60 P=PEEK(-16384)
70 X=X-(P=136)+(P=149)
80 IF X=9 OR X=30 OR PEEK(1703+X)=239 THEN HOME: PRINT "YOU LOSE!";CHR$(7):END
100 R=INT(RND(1)*20+10)
110 HTAB A:VTAB:PRINT" ";
120 VTAB 24:HTAB 9:PRINT" ";:HTAB 30:PRINT "'";
130 HTAB X:VTAB Y:PRINT"#";:HOME:PRINT"YOU WIN";CHR$(7):END
140 S=S+1:VTAB 23
150 IF S/10=INT(S/10) THEN 130
160 IF S<1000 THEN HTAB R:PRINT"0";
170 GOTO 5
●“乱弹琴”
10 X=INT(7*RND+1):Y=INT(6*RND+2):Z=INT(6*RND+5):L=INT(51*RND+50)
20 MUSIC(X,Y,Z)
30 WAIT(L)
40 GOTO 20
(注:可在COMX-35型机上运行)
我们设计的这则趣味程序,有一令人叫绝的特点。就是语句特别短巧,而表现出来的音响,却悠长而又富有变化。但其它的一些音响程序数据庞大,打印繁杂,而乐曲却只有寥寥几下。此程序的音响变化多端,给我们一种与平常乐曲截然不同的新感受,且能使初学者加深对INT与RND的感性认识,很有帮助。