vb循环和条件判断

现在有一个数组(5个元素),如果这五个数值有相差小于1的,合并为一组并求平均数,如果相差没有小于1的,保留原数,求最后有几组,并求出各组平均数.如果不清楚就看例子!

例1:一个数组数值分别为 1,3,4,7,8
3和4相差1,7和8相差1,合并为一组,所以一共有3组
第一组数值为1,第二组数值为(3+4)/2,第三组数值为(7+8)/2
输出:组数|1 2 3
数值|1 3.5 7.5
例2:一个数组1,3,4,5,6
分为2组,第一组1,第二组(3+4+5+6)/4
输出:组数|1 2
数值|1 4.5
高分求解!!!!
在线等啊!!!急用!!!

Private Sub Command1_Click()
Dim k()
Dim k2()

Label1.Caption = "": Label2.Caption = ""
k = Array(4, 7, 5, 6, 9)
'排序
BubbleSort2 k

For i = 0 To UBound(k)
'Debug.Print k(i) '测试排序结果
Next
'分组
ReDim k2(0)
k2(0) = 0
For i = 0 To UBound(k) - 1
If k(i + 1) - k(i) > 1 Then
ReDim Preserve k2(UBound(k2) + 1)
k2(UBound(k2)) = i + 1
End If
Next
ReDim Preserve k2(UBound(k2) + 1)
k2(UBound(k2)) = UBound(k) + 1

'求每组结果
For i = 0 To UBound(k2) - 1
tmp = 0: tmp1 = 0
For n = k2(i) To k2(i + 1) - 1
tmp = tmp + k(n)
tmp1 = tmp1 + 1
Next
tmp = tmp / tmp1
Label1.Caption = Label1.Caption & (i + 1) & " "
Label2.Caption = Label2.Caption & tmp & " "
Next
End Sub
'冒泡排序法
Private Function BubbleSort2(ArrayToSort()) As Boolean
Dim SortLoop As Long
Dim HoldValue
Dim ChangeMade As Boolean
Dim endLoop As Long

ChangeMade = True
Do While ChangeMade
ChangeMade = False
For SortLoop = LBound(ArrayToSort) To UBound(ArrayToSort) - 1
If ArrayToSort(SortLoop) > ArrayToSort(SortLoop + 1) Then
HoldValue = ArrayToSort(SortLoop)
ArrayToSort(SortLoop) = ArrayToSort(SortLoop + 1)
ArrayToSort(SortLoop + 1) = HoldValue
ChangeMade = True
End If
Next SortLoop
Loop
BubbleSort1 = True

End Function追问

谢谢,运行完美!!!!!只是组数和数据不对称,我自己改吧,太谢谢了!!!!另外也十分感谢橡皮树的博客,非常感激!!!感激涕零,回去研究研究!!!你们的代码对我来说都很有价值!

本来追问橡皮树的,可惜追问一直审核。。。。(带图),2位高手,感激感激X+oo

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-06
Private Sub Command1_Click()
Dim k() As Variant, s As Integer
Dim k2() As Single, t As Single
Dim i As Integer, c As Integer
Dim J As Integer

k = Array(1, 3, 4, 5, 7, 8)
‘如果必要,可以先进行排序
s = k(0): c = 1: t = s
For i = 1 To UBound(k)
If k(i) - s <= 1 Then
t = t + s + k(i)
c = c + 1
Else
ReDim Preserve k2(J)
k2(J) = t / c
t = 0: c = 1: J = J + 1
End If
s = k(i)
Next i
ReDim Preserve k2(J)
k2(J) = t / c

'输出
For i = 0 To UBound(k2)
Debug.Print k2(i)
Next i
End Sub追问

高手你好,我根据我的程序改动了一点发现不对,自己找不出错误,能不能帮忙看下,解决了追加50分!
1.用例题所示输出组数和每组数据,在label1.caption中输出组数,label2中输出各组值
例:
label1.caption 1 2 3
label2.caption 1 3.5 7.5

追答

就是最后用label控件显示结果?

追问

比如:我添加了2个label:label1显示组数(有几组就显示几组,如:有3组就是1 2 3(有空格)5组就是1 2 3 4 5)
label2显示每组平均值(就是你的k2(i))当然,与上面组数对其,如题所示;
比如;
1 2 3
1 3.5 7.5

追答

Private Sub Command1_Click()
Dim k() As Variant, s As Integer
Dim k2() As Single, t As Single
Dim i As Integer, c As Integer
Dim J As Integer

k = Array(1, 3, 4, 7, 8)

s = k(0): c = 1: t = s
For i = 1 To UBound(k)
If k(i) - s <= 1 Then
t = t + s + k(i)
c = c + 1
Else
ReDim Preserve k2(J)
k2(J) = t / c
t = 0
c = 1
J = J + 1
End If
s = k(i)
Next i
ReDim Preserve k2(J)
k2(J) = t / c

Dim mm As String
Dim nn As String
'输出

mm = 1: nn = k2(0)
For i = 1 To UBound(k2)
mm = mm & Space(10 - i) & i + 1
nn = nn & Space(10 - Len(CStr(k2(i - 1)))) & k2(i)
Next i
Label1 = mm
Label2 = nn
End Sub

第2个回答  2011-12-06
先设变量取你给定的值,用个循环的方法,先判断有几组数,然后将判断结果写入一组变量数组中(由组数确定数组大小),完成判断,再根据要求输出这个数组。
第3个回答  2011-12-06
让像屁鼠给你做个代码追问

你帮我联系啊

追答

好的,先采纳再重新问。

第4个回答  2011-12-06
将数据加入列表框内
如数组1:(1,3,4,7,8)
For i = 0 To List1.ListCount - 2
For j = i + 1 To List1.ListCount - 1
If Val(List1.List(j), 1) - Val(List1.List(i), 1) = 1 Then
List2.AddItem i
List2.AddItem j '将两个数送到列表框二
End If
Next j
Next i追问

先谢谢了,能不能不用列表框,而且条件不是等于1,而是小于等于1

追答

'符号改成<就行了
'可以用文本框
'文本框用数组一样的
文本框一为数组(文本框用复制方法)
For i = 0 To 9 ‘文本框如有十个就写9
If Text1(i + 1).Text - Text1(i).Text < 1 Then
Text2.Text = Text1(i).Text ’输出第一个数字到文本二
Text3.Text = Text1(i).Text ’输出第一个数字到文本三
End If
Next i
'然后
Text4.Text = (Text2.Text+Text3.Text)/2 '将平均数输出到文本框四

追问

先谢谢了,但是如果有3个数都小于等于1那就要3个数相加除以3了,你这个好像只能求2个的。。没判断。。。

追答

也可以这样
For a = 0 To 9 '假如有11个号的话
Forb= a+1
For c = b+1 ‘那么c 就是11了
If Text1(b).Text - Text1(a).Text < 1 Then
"将两数传送"
ElseIf Text1(c).Text - Text1(b).Text < 1 Then
"将两数传送"
End If
Next c
Next b
Next a
看懂了吧

追问

你好!你的程序存在各种问题,很抱歉。。。

【VB超简单入门】九、程序执行顺序 1
在VB中,程序执行顺序主要通过三种方法控制:判断、循环、跳转。首先,判断功能用于逻辑判断,如比较数值大小、用户名验证等。条件语句和选择语句是实现判断功能的工具。条件语句如if语句,基于条件执行相应代码块;选择语句如select case,用于根据变量值执行不同操作,简化了多条件判断的编写。示例代码展示了...

VB中if语句\/Do while语句\/For语句一定代表循环语句吗?
if 是条件判断语句,决定执行还是不执行 其它的是循环语句,循环都是要有条件的,决定了什么时候开始循环或者什么时候时候结束循环

vb中的一个循环
在VB编程语言中,一个循环是一种控制结构,用于重复执行一段代码直至满足特定条件为止。这个例子展示了如何使用循环来生成一个随机数序列。程序首先在通用区声明了一个整型变量i。当程序启动时,主窗体加载事件会触发,此时i被初始化为0。接着,用户可以通过点击命令按钮(Command1)激活循环。在点击按钮时...

VB中while与for循环的区别
接着,我们探讨执行条件的判断方式。for循环在执行完循环体后,会再次进行条件判断,如果条件成立则继续循环,直至条件不成立跳出。相反,while循环一旦满足条件进入循环,无论循环体内执行了多少次代码,只要条件不满足,都会执行完当前循环体中的所有语句后跳出循环。从使用目的来看,for循环主要用于在已知循环...

VB中,Do While...Loop什么意思
Do While(条件)(循环体)Loop :先执行循环体再判断Do While后的条件是否为真,为真就再执行循环体,为假就执行Loop退出

在VB中, “IF ELSE"表示什么语句,"for next"表示什么语句???
if else是条件判断语句 for next 是循环语句 具体用法 for 变量=起始值 to 终止值 step 步长 next 变量

vb语句中Loop While是什么意思
Do...LoopWhile:先进入循环执行,然后判断条件是否满足,若满足,则进入下一次的循环。VB语句函数大全 1. Abs(N) 取绝对值;例:Abs(-3.5) 结果:3.5;2. Cos(N) 余弦函数;例:Cos(0) 结果:1;3. Exp(N) e为底的指数函数;例:Exp(3) 结果:20.068;4. Log(N) 以e为底的...

vb循环和条件判断
Label1.Caption = "": Label2.Caption = ""k = Array(4, 7, 5, 6, 9)'排序 BubbleSort2 k For i = 0 To UBound(k)'Debug.Print k(i) '测试排序结果 Next '分组 ReDim k2(0)k2(0) = 0 For i = 0 To UBound(k) - 1 If k(i + 1) - k(i) > 1 Then ReDim ...

VB中for;to;if;and;then代表什么意思?
for 是循环开始,to 是从条件1到条件2 if是判断语句,and是并且的关系,then是执行``理论很简单,在实际应用中就很复杂了``

vbifelse用法,
一、基本结构 VB中的If Else结构是基本的条件判断语句,用于根据不同的条件执行不同的操作。其基本结构如下:vbscript If 条件 Then ' 条件为真时执行的代码 Else ' 条件为假时执行的代码 End If 这种结构是最基础的,只有两种分支情况。如果需要根据更多的条件进行判断,可以使用嵌套的If Else结构。...

相似回答