主题:[新菜鸟求助]循环计算
苏兰清云
[专家分:0] 发布于 2008-02-20 21:22:00
大家好,请教一个程序:
题目是:有10个数——20、22、23、25、27、27、28、30、40、55
随意输入一个数A,
计算出M=A/5的值,
在上述10个数中选择4个数为B、C、D、E,计算出N =B×C/(D×E),
要求屏幕上打印出M=N(精确到千分位)时的B、C、D、E(B和C,D和E允许互换)。
我编出的程序,同一组数总是出现4次,不知该怎么改下?
比如当输入A=3时,20×30/(40×25)这组出现了四种情况:
20×30/(40×25)
20×30/(25×40)
30×20/(40×25)
30×20/(25×40)
而我只需其中一组就好了,不知程序怎么编,请哪位大虾指导一下,谢谢啦
最后更新于:2008-02-20 21:29:00
回复列表 (共20个回复)
11 楼
moz [专家分:37620] 发布于 2008-02-28 23:33:00
我自作主张把聪明一袋烟的代码改了一下:
[quote]
DATA 20,22,23,25,27,27,28,30,40,55
DIM a%(10)
FOR i% = 1 TO 10
READ a%(i%)
NEXT
INPUT "a=", a#
m# = a# / 5
PRINT "m="; m#
FOR i% = 1 TO 9
FOR j% = i% + 1 TO 10
FOR k% = 1 TO 9
IF k% <> i% AND k% <> j% THEN
FOR l% = k% + 1 TO 10
IF l% <> i% AND l% <> j% THEN
n# = (a%(i%) * a%(j%)) / (a%(k%) * a%(l%))
IF ABS(m#-n#)<.001 THEN PRINT"(";a%(i%);"x";a%(j%);")/(";a%(k%);"x";a%(l%);")=";n#
END IF
NEXT
END IF
NEXT k%, j%, i%
[/quote]
正如楼主所说的,当输入为偶数的时候,结果仍然会出现重复,
因为相同的那两组数里的那两个27其实是不同的(有点矛盾,唉)
如果非要避免这样的结果,最好的办法还是对结果进行筛选:
[/quote]
DATA 20,22,23,25,27,27,28,30,40,55
DIM a%(10)
FOR i% = 1 TO 10
READ a%(i%)
NEXT
INPUT "a=", a#
m# = a# / 5
PRINT "m="; m#
FOR i% = 1 TO 9
FOR j% = i% + 1 TO 10
FOR k% = 1 TO 9
IF k% <> i% AND k% <> j% THEN
FOR l% = k% + 1 TO 10
IF l% <> i% AND l% <> j% THEN
n# = (a%(i%) * a%(j%)) / (a%(k%) * a%(l%))
IF ABS(m# - n#) < .001 THEN
[color=ff00ff] s$="("+STR$(a%(i%))+"x"+STR$(a%(j%))+")/("+STR$(a%(k%))+"x"+STR$(a%(l%))+")="+STR$(n#)[/color]
IF INSTR(ss$, s$) = 0 THEN ss$ = ss$ + s$ + CHR$(13)
END IF
END IF
NEXT
END IF
NEXT k%, j%, i%
PRINT ss$
[/quote]
12 楼
moisev [专家分:110] 发布于 2008-02-29 09:38:00
版主的大作乍一看,还真像天书。看来我以后也要在所有变量后面加些符号,那样看起来好有深度。
13 楼
苏兰清云 [专家分:0] 发布于 2008-02-29 13:00:00
是这样的,A和B可以互换、C和D可以互换。
比如我需要挂E=0.6,计算出有20×30/(40×25)这组满足要求,
另外三种 20×30/(25×40)
30×20/(40×25)
30×20/(25×40)
就不用再输出在屏幕上了(因为当有不同组满足E时,每组都出现四遍会很乱,要看半天才知道有几组不同)。
14 楼
苏兰清云 [专家分:0] 发布于 2008-02-29 13:14:00
谢谢 moz 在11楼的程序,运行了下,完全得出我最初想要的结果,高手啊
粗看了程序,有些语句还不知为什么要这样写,还是俺太菜了啊,程序消化中ing...
15 楼
苏兰清云 [专家分:0] 发布于 2008-02-29 13:16:00
因为是工作上需要的一个程序,就迫不及待的在moz的程序上修改了一下,想用在另一个机床上,遇到了问题,那个机床共有65个挂轮,谁知运行后显示“Out of string space”,看了论坛上yangyifei发的“basic错误信息一览表”帖子,知道是“超出字符串空间”的意思,在努力找原因
16 楼
苏兰清云 [专家分:0] 发布于 2008-03-02 23:03:00
找不出来为什么超出字符串空间?
另外moz的程序中有一句不明白—“ IF INSTR(ss$, s$) = 0 THEN ss$ = ss$ + s$ + CHR$(13)”
CHR$(13)是回车吗?+在后面起什么作用呢?
另外请各位帮我找找下面的程序(moz编的)中为什么改成65个数据就不行了呢?谢谢
DATA 20,20,21,22,23,24,24,25,25,27,30,30,32,32,33,34,35,35,36,37,39,40,40,41,43,45,45,47,48,48,49,50,50,53,54,55,57,58,59,60,60,61,62,64,64,65,57,70,71,72,73,75,79,80,83,85,87,89,90,92,95,97,98,100
DIM a%(65)
FOR i% = 1 TO 65
READ a%(i%)
NEXT
INPUT "A=";b
m#=10*Pi
PRINT "m="; m#
FOR i% = 1 TO 64
FOR j% = i% + 1 TO 65
FOR k% = 1 TO 64
IF k% <> i% AND k% <> j% THEN
FOR l% = k% + 1 TO 65
IF l% <> i% AND l% <> j% THEN
n# = (a%(i%) * a%(j%)) / (a%(k%) * a%(l%))
IF ABS(m# - n#) < .001 THEN
s$="("+STR$(a%(i%))+"x"+STR$(a%(j%))+")/("+STR$(a%(k%))+"x"+STR$(a%(l%))+")="+STR$(n#)
IF INSTR(ss$, s$) = 0 THEN ss$ = ss$ + s$ + CHR$(13)
END IF
END IF
NEXT
END IF
NEXT k%, j%, i%
PRINT ss$
END
希望各位大侠指点,谢谢
17 楼
moz [专家分:37620] 发布于 2008-03-03 18:27:00
你的DATA数据只有64个数,
但你的Read却要读65次,
需要你补上第65个齿轮.
18 楼
苏兰清云 [专家分:0] 发布于 2008-03-04 20:27:00
谢谢 moz ,我太粗心了。想给你评30分,不过同一帖只能累计评50分,只好委屈你了,评个20分了
19 楼
聪明一袋烟 [专家分:330] 发布于 2008-03-04 22:07:00
我那个苍天啊,青云兄台,你那错误该是out of data 吧
20 楼
苏兰清云 [专家分:0] 发布于 2008-03-06 13:27:00
当时确实是Out of string space,
一开始,我看到moz的提示,以为是数据数量错了(因为改成64就通了),后来发现我的数据数量还是65个,只是在帖子上的数据少写了一个。
现在程序通了,我再删一个数据,运行后发现是 out of data ,我也不知问题出在哪,也许当时有地方手误写错了,后来校的时候改过来了吧
谢谢聪明一袋烟和moz
我来回复