用VB找出一段最大值和最小值
序号 数字1 531
2 545
3 321
4 211
5 121
6 10
7 10
8 9
9 110
10 1285
11 213
12 22
13 19
14 18
15 12
16 1
17 52
18 66
19 73
找出每段最大最小值应如下
序号 序号
1 531
2 545
6 10
8 9
10 1285
16 1
19 73
--------------------编程问答-------------------- 锅先联系下我的语文老师,要他来看看…… --------------------编程问答-------------------- Dim b As Boolean 'True means inc and false means dec
Dim a(1 To 19) As Integer
Dim i As Integer
a(1) = 531
a(2) = 545
...
a(19) = 73
Print 1, a(1)
If a(2) > a(1) b = False Else b = True
For i = 2 To 19
If (a(i) > a(i - 1)) <> b Then Print i, a(i)
Next i
--------------------编程问答-------------------- 修改下
For i = 2 To 19
If (a(i) > a(i - 1)) <> b Then Print i, a(i) : b = Not(b)
Next i --------------------编程问答--------------------
同意 --------------------编程问答--------------------
Option Explicit
Private Sub Command1_Click()
Dim intMax As Integer, intMin As Integer, n As Integer
Dim strLine As String, strItems() As String
intMax = 0
intMin = 32767
Open "c:\3.txt" For Input As #1
Do Until EOF(1)
Line Input #1, strLine
strItems = Split(strLine, " ")
If UBound(strItems) = 1 Then
n = Val(strItems(1))
If n > intMax Then
intMax = n
Debug.Print strLine
Else
If n < intMin Then
intMin = n
Debug.Print strLine
End If
End If
End If
Loop
Close #1
End Sub
结果:
1 531--------------------编程问答--------------------
2 545
3 321
4 211
5 121
6 10
8 9
10 1285
16 1
楼主是要输出当前最大和最小值。 --------------------编程问答-------------------- 把这些数据整进数组,然后再排个序就OK了
--------------------编程问答-------------------- 不是这个意思。楼主的需求是当数据逐条增加时,求这一时刻的最大和最小值:
数据编号 最大值 最小值
1 531 531
2 545 531
3 545 321
4 545 211
5 545 122
6 545 10
7 545 10
8 545 9
9 545 9
10 1285 9
11 1285 1
当最大最小值改变时,打印改变的数值。 --------------------编程问答-------------------- 是这样判断 以第一个为准 判断下面的数字是升还是降,是升要找到最高点数字,如1号 531 到 2号 545 是 2号 545是顶点 ,保留期最低点和最高点,中间其舍去。如下降从2号 545 到8号 9 为降,保留最高点和最低点,因2号 545 是最高点了保留了,只保留最低点,8号 9 中间其舍去,以此类推……规律找出升的那段最高最低,降的那段最高和最低 --------------------编程问答-------------------- 都理解错了,人家是要找反转点.
先设定一个上升或下降的标示 Flag=1(0)上升或下降
按顺序读取数据,当前数据与前一个数据进行比较.
if not(flag Xor number(Now)>number(Now-1)) then
Read Number(Now+1)
else
print Number(Now)
end if --------------------编程问答--------------------
结果是一样的。 --------------------编程问答--------------------
或者说,是将你的实际应用需求转化成数学逻辑表达。 --------------------编程问答--------------------
--------------------编程问答--------------------
'这段代码是主要.
If (Flag Xor CDbl((strItems(1)) > CDbl(BakNumber))) Then
Me.Print BakNumber
Flag = Not Flag
Else
BakNumber = strItems(1)
End If
--------------------编程问答-------------------- 佩服理解能力。说实话,1楼的还真没办法理解到这一地步…… --------------------编程问答-------------------- 是VB6中吗? --------------------编程问答-------------------- 1 531
'将你的代码改了一下,这样输出的结果与你的结果不一致,这个应该是LZ想要的吧.
Option Explicit
Private Sub Command1_Click()
Dim intMax As Integer, intMin As Integer, n As Integer
Dim strLine As String, strItems() As String
intMax = 0
intMin = 32767
Dim Flag As Boolean
Flag = True
Dim BakNumber As Double
BakNumber = -1
Open "c:\3.txt" For Input As #1
Line Input #1, strLine
strItems = Split(strLine, " ")
Me.Print strItems(1)
Do Until EOF(1)
Line Input #1, strLine
strItems = Split(strLine, " ")
If (Flag Xor CDbl((strItems(1)) > CDbl(BakNumber))) Then
Me.Print BakNumber
Flag = Not Flag
Else
BakNumber = strItems(1)
End If
Loop
Me.Print strItems(1)
Close #1
End Sub
2 545
3 321
4 211
5 121
6 10
8 9
10 1285
16 1
谢谢5楼代码 但是开始数字逐渐下降 应该把中间部分取消,保留上升过程或者下降的过程 开始和结尾数字 --------------------编程问答-------------------- 谢谢14楼的代码 管用 能否注释一下 我想把它扩展一下 --------------------编程问答--------------------
'先说一下此方法的理论.
'先设定此时数据是上升的(Flag=True 上升 Flag=False 下降).
'如果前一个数据与当前数相比,如果后一个数据比前一个数据大,那表示还在上升,接着读下一个数据.
'如果前一个数据与当前数相比,如果后一个数据比前一个数据小,那表示现在较入下降. flag=Flse,并且读出转入下降时的数据(即反转点)
Option Explicit
Private Sub Command1_Click()
Dim intMax As Integer, intMin As Integer, n As Integer
Dim strLine As String, strItems() As String
intMax = 0
intMin = 32767
Dim Flag As Boolean
Flag = True
Dim BakNumber As Double'保存已读出的前一个数据.用于与当前读出的数据进行比较
Open "c:\3.txt" For Input As #1
Line Input #1, strLine
strItems = Split(strLine, " ")
Me.Print strItems(1) '先读取第一个数据,将此数据写出.
BakNumber = strItems(1) '当前数据放入Baknumber中用于下一轮比较
Do Until EOF(1) '循环读取文本文件中的数据
Line Input #1, strLine
strItems = Split(strLine, " ")
If (Flag Xor CDbl((strItems(1)) > CDbl(BakNumber))) Then '此处为从第二个数据开始与前一个数据进行比较. 此处采用 xor 运算,表示如果 flag是True 而 当前数据与前一个数据比较是flase 或 flag是Flase而当前数据与前一个数据比较是True(即进行了反转)
Me.Print BakNumber ' 读出反转前的那个点,即反转点
BakNumber = strItems(1) '将当前数据放入 baknumber用于下一轮比较
Flag = Not Flag '上升下降标志进行 not 运算,表示数据进入相反运行通道
Else
BakNumber = strItems(1) '如果在上升或下降通道中,将当前数据放入Baknumber中用于下一轮比较
End If
Loop
Me.Print strItems(1) '读出最后一个数据
Close #1
End Sub
补充:VB , 基础类