回 帖 发 新 帖 刷新版面

主题:[新菜鸟求助]循环计算

大家好,请教一个程序:
题目是:有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)
而我只需其中一组就好了,不知程序怎么编,请哪位大虾指导一下,谢谢啦



回复列表 (共20个回复)

11 楼

我自作主张把聪明一袋烟的代码改了一下:
[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 楼

版主的大作乍一看,还真像天书。看来我以后也要在所有变量后面加些符号,那样看起来好有深度。

13 楼

是这样的,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 楼

 谢谢 moz 在11楼的程序,运行了下,完全得出我最初想要的结果,高手啊

 粗看了程序,有些语句还不知为什么要这样写,还是俺太菜了啊,程序消化中ing...

15 楼

   因为是工作上需要的一个程序,就迫不及待的在moz的程序上修改了一下,想用在另一个机床上,遇到了问题,那个机床共有65个挂轮,谁知运行后显示“Out of string space”,看了论坛上yangyifei发的“basic错误信息一览表”帖子,知道是“超出字符串空间”的意思,在努力找原因

16 楼

找不出来为什么超出字符串空间?

另外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 楼

你的DATA数据只有64个数,
但你的Read却要读65次,
需要你补上第65个齿轮.

18 楼

谢谢 moz ,我太粗心了。想给你评30分,不过同一帖只能累计评50分,只好委屈你了,评个20分了

19 楼

我那个苍天啊,青云兄台,你那错误该是out of data 吧

20 楼

当时确实是Out of string space,

一开始,我看到moz的提示,以为是数据数量错了(因为改成64就通了),后来发现我的数据数量还是65个,只是在帖子上的数据少写了一个。

现在程序通了,我再删一个数据,运行后发现是 out of data ,我也不知问题出在哪,也许当时有地方手误写错了,后来校的时候改过来了吧


谢谢聪明一袋烟和moz 

我来回复

您尚未登录,请登录后再回复。点此登录或注册