回 帖 发 新 帖 刷新版面

主题:请教vb编程(循环结构)

程序功能:
有4个变量,每个变量都是在同一给定集合中取,这四个变量的运算a/b*c/d的结果与一固定值的差<=0.0001.变量不能取相同值.
我编的程序,好象进入死循环了,程序到这就动弹不了了.
请高人指点指点!!!

Dim x As Variant
x = Array(20, 23, 24, 25, 26, 30, 32, 33, 34, 35, 37, 40, 41, 43, 45, 46, 47, 48, 50, 52, 53, 55, 57, 58, 59, 60, 61, 62, 65, 67, 70, 71, 73, 75, 79, 80, 83, 85, 89, 90, 92, 95, 97, 98, 100)
For i = 0 To 44
For j = 0 To 44
For k = 0 To 44
For l = 0 To 44
If x(i) / x(j) * x(k) / x(l) - 9 * Sin(Dialog.Text5) / Dialog.Combo6.Text >= -0.0001 And x(i) / x(j) * x(k) / x(l) - 9 * Sin(Dialog.Text5) / Dialog.Combo6.Text <= 0.0001 And x(i) <> Text9 And x(i) <> Text10 And x(i) <> Text11 And x(i) <> Text12 And x(j) <> Text9 And x(j) <> Text10 And x(j) <> Text11 And x(j) <> Text12 And x(k) <> Text9 And x(k) <> Text10 And x(k) <> Text11 And x(k) <> Text12 And x(l) <> Text9 And x(l) <> Text10 And x(l) <> Text11 And x(l) <> Text12 And x(i) <> x(j) And x(i) <> x(k) And x(i) <> x(l) And x(j) <> x(k) And x(j) <> x(l) And x(k) <> x(l) Then
Exit For
Text19 = x(i)
Text20 = x(j)
Text21 = x(k)
Text22 = x(l)
End If
Next l, k, j, i

回复列表 (共17个回复)

沙发

1、你提供的代码不足以运行检查,更没有界面以及文本框输入值等。
2、人工看来,你至少有以下要改进的的地方:
   .文本框很多,并且有规律的时候,请使用控件数组;
   .复合条件实在难以理解
   .Exit For后面的四条给文本框写数字的语句永远不会被执行
   .Dialog.Text5之类的为什么以使用变量,使之更清晰易懂?
   .鉴于a/b*c/d的对称结构,你的完全枚举做了大量的无用功。例如20/23*98/100与98/100*20/23、20/100*98/23、98/23*20/100结果是完全一样的,但你算了四次!
3、是不是这段程序运行看不到19号至22号文本框改变内容,你认为死循环的?
4、建议,在next之后的语句加上断点,看看能不能执行到哪里。

板凳

1.这个功能是我整个程序的一部分,比如dialog.text5等是在前面界面上要输入的
2.复合条件的意思是:除了要a/b*c/d的值在一定范围内外,而且它们之间的值不能相等,还 有不能和现在这个界面上已出现的4个值重复(除了a,b,c,d 还有四个值要在那个集合里取,它们之间不能有一样的)
3.我觉得是死循环,因为不显示有text19--text22这个界面,点多了激活这个界面的按钮,整个程序就没反映了
4.谢谢你指出的错误.
5.能不能请你写一段能实现上述功能的程序,主要是四个变量在集合里循环取值,验证运算在一范围内.希望学习一下.

3 楼

第2个:
要排除那个四个在文本框里的值,可以牺牲一点内存,来换取程序的可读性和执行的效率(这里主要是可读性):
新设一个数组,将原数组每个值分别与这四个特定值核对,不是,就写入新数组。然后以新数组来选数字。

第1个:控件的name完全可以设置成可读的!

第3个,text19--text22所在界面并不会因为给他们赋值而自动load或者show,相反,在其它窗体不加前缀的引用控件,会引起出错!

第5个,我能,但时间上不允许。

4 楼


谢谢了,我再仔细研究研究

5 楼

http://file.pfan.cn/upfile/200805142038402.rar 

这是我做的一个例子,你看看。

唉,花了我两个多小时阿!

6 楼

麻烦你了!!
不过我下载不了,能不能发到我的邮箱
邮箱:zhangxingyy@bit.edu.cn
      

7 楼

从这里下载不了的,估计你从邮箱也下载不了的。

8 楼

花了你两个小时,还是麻烦你试一下,发到我的邮箱,要不太可惜了

9 楼

要是发过去你还下不去,那不是浪费的时间更多?我的可惜更大了?

10 楼

呵呵,发邮件的要时间应该不会太长吧

我来回复

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