易码技术论坛

 找回密码
 加入易码
搜索
查看: 164135|回复: 1

笔算开平方模拟

[复制链接]
发表于 2007-4-30 22:26:25 | 显示全部楼层 |阅读模式
  在BASIC里面毫无用处。LAVA里面好像有用。
但前提是有人能够解决210行的“舍入误差”
0 :
1 REM笔算开根号模拟
2 CLEAR
4 GOTO 500
5 RETURN
9 REM分析所输入数字的性质,并对数字进行重组。输入有理数N,返回数组N(10),小数点位置FP
10 N$=STR$(N)=LEN(N$):FT=L+1
20 FOR I=1 TO L
30 IF ASC(MID$(N$,I,1))=46 THEN FT=I
40 NEXT
45 A=INT(FT/2):FP=A+1
48 IF FT=1 THEN A=1:GOTO 110
50 IF FT/2=INT(FT/2)THEN 60 ELSE 90
60 N(0)=VAL(MID$(N$,1,1))
70 FOR I=2 TO FT-2 STEP 2:N(I/2)=VAL(MID$(N$,I,2))
80 NEXT:GOTO 110
90 FOR I=0 TO FT-3 STEP 2:N(I/2)=VAL(MID$(N$,I+1,2))
100 NEXT
110 B=L-FT:IF B<=0 THEN 180 ELSE IF B=1 THEN 170
120 IF B/2=INT(B/2)THEN 130 ELSE 150
130 FOR I=FT+1 TO L STEP 2
140 N(A)=VAL(MID$(N$,I,2)):A=A+1:NEXT:GOTO 180
150 FOR I=FT+1 TO L-1 STEP 2
160 N(A)=VAL(MID$(N$,I,2)):A=A+1:NEXT
170 N(A)=VAL(MID$(N$,L,1))*10
180 GOTO 5
199 REM笔算开根过程。输入A,B,返回I,A,B
200 B=B*20:I=0
210 IF(I+1)*(B+I+1)<A+.00004 THEN I=I+1:GOTO 210
220 A=(A-(B+I)*I)*100+N(T+1):B=B/2+I
230 GOTO 5
499 REM main
500 PRINT:INPUT "NUM=";N
510 IF LEN(STR$(N))>10 OR N<0.01 THEN PRINT "beyond recognition!":GOTO 500
520 GOSUB 10
530 A=N(0):B=0:FOR T=0 TO 9
540 GOSUB 200
550 PRINT STR$(I);
560 IF T=FP-2 OR(FP=1 AND T=0)THEN PRINT ".";
570 NEXT
580 GOTO 2
发表于 2008-2-12 01:36:46 | 显示全部楼层
呵呵,笨办法总是最可靠的办法
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-24 08:40 , Processed in 0.009412 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表