注册 登录
编程论坛 VB6论坛

有数组0-100,A/B*C/D=a<是个常数>,根据常数a在数组0-100中选择满足A/B*C/D,要非常接近常数a,误差在0.0005以内,各位

hulusizyd 发布于 2015-04-23 13:08, 909 次点击
各位大侠,求VB代码,谢谢
12 回复
#2
lianyicq2015-04-23 13:36
作业?
自己多试着做,能够完成。

[ 本帖最后由 lianyicq 于 2015-4-23 13:55 编辑 ]
#3
hulusizyd2015-04-23 14:12
不是作业,我在编个齿轮程序,挂轮值求出来了。根据挂轮值选择挂轮,用到这个程序,求高手指点,谢谢
#4
lianyicq2015-04-23 14:55
回复 3楼 hulusizyd
很基础的
For i = 0 To 100
  If Abs(table(i) - a) < 0.0005 Then
     Debug.Print i
     Exit For
  End If
Next

满足要求,自己考虑找最接近a的。
#5
hulusizyd2015-04-23 15:40
谢谢,是要求A/B*C/D,比如根据常数选择了四个数,然后输出,比如:45/36*75/68
#6
hulusizyd2015-04-23 16:00
谢谢,是要求A/B*C/D,比如根据常数选择了四个数,然后输出,比如:45/36*75/68
#7
lianyicq2015-04-23 16:08
回复 6楼 hulusizyd
根据已知的a,选择四个数A,B,C,D使得A/B*C/D-a在正负0.0005以内?
越看越糊涂,举个例吧。
#8
hulusizyd2015-04-23 16:30
比如A/B*C/D=0.53,ABCD分别从1-100选择实数(整数),然后程序自由组合选择,比如最终结果出择为A为38,B为73,C为86,D为57,然后输出(38/73)*(86/57)
#9
lianyicq2015-04-23 16:45
回复 8楼 hulusizyd
比较10的8次方次
k = 0.53
For a = 1 To 100
For b = 1 To 100
For c = 1 To 100
For d = 1 To 100
  If Abs(a / b * c / d - k) < 0.0005 Then Debug.Print a & "/" & b & "*" & c & "/" & d & "=" & a / b * c / d
Next
Next
Next
Next
注意a/b*c/d取值范围是0.0001至10000。a值最小是0.0001-0.0005,最大是10000.0005。
由(a/b*c/d)<k±e (e是误差)可推得a的取值范围,再考虑a为1至100。可以减小a的取值区间,减少比较次数。

[ 本帖最后由 lianyicq 于 2015-4-23 17:14 编辑 ]
#10
hulusizyd2015-04-23 21:29
非常感谢大侠!谢谢,辛苦了!
#11
hulusizyd2015-04-23 21:42
大侠,我看可以输出两种结果,我如何吧这个结果输出来呢,我用msgbox命令输出来看看,结果输出的不一样!按k=0.53,最终也让a/b*c/d=0.53,程序计算出两个结果:60/75*53/80,63/75*53/84,我用msgbox命令,结果输出:86/76*94/88,不知道是怎么回事!求帮忙,把计算的结果60/75*53/80,63/75*53/84输出!就是保存的时候就是60/75*53/80,63/75*53/84这样的结果,谢谢
#12
lianyicq2015-04-24 08:59
回复 11楼 hulusizyd

k = 0.53
For a = 1 To 100
For b = 1 To 100
For c = 1 To 100
For d = 1 To 100
  If Abs(a / b * c / d - k) < 0.0005 Then text1.text=text1.text &  a & "/" & b & "*" & c & "/" & d & ","
Next
Next
Next
Next
ABCD之间没有相互约束,满足条件的组合很多
#13
hulusizyd2015-04-24 15:01
非常感谢大侠的帮助
1