序號 數字
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
uj5u.com熱心網友回復:
鍋先聯系下我的語文老師,要他來看看……uj5u.com熱心網友回復:
Dim b As Boolean 'True means inc and false means decDim 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
uj5u.com熱心網友回復:
修改下For i = 2 To 19
If (a(i) > a(i - 1)) <> b Then Print i, a(i) : b = Not(b)
Next i
uj5u.com熱心網友回復:
同意
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
樓主是要輸出當前最大和最小值。
uj5u.com熱心網友回復:
把這些資料整進陣列,然后再排個序就OK了uj5u.com熱心網友回復:
不是這個意思。樓主的需求是當資料逐條增加時,求這一時刻的最大和最小值:
資料編號 最大值 最小值
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
當最大最小值改變時,列印改變的數值。
uj5u.com熱心網友回復:
是這樣判斷 以第一個為準 判斷下面的數字是升還是降,是升要找到最高點數字,如1號 531 到 2號 545 是 2號 545是頂點 ,保留期最低點和最高點,中間其舍去。如下降從2號 545 到8號 9 為降,保留最高點和最低點,因2號 545 是最高點了保留了,只保留最低點,8號 9 中間其舍去,以此類推……規律找出升的那段最高最低,降的那段最高和最低uj5u.com熱心網友回復:
都理解錯了,人家是要找反轉點.先設定一個上升或下降的標示 Flag=1(0)上升或下降
按順序讀取資料,當前資料與前一個資料進行比較.
if not(flag Xor number(Now)>number(Now-1)) then
Read Number(Now+1)
else
print Number(Now)
end if
uj5u.com熱心網友回復:
結果是一樣的。
uj5u.com熱心網友回復:
或者說,是將你的實際應用需求轉化成數學邏輯表達。
uj5u.com熱心網友回復:
'這段代碼是主要.
If (Flag Xor CDbl((strItems(1)) > CDbl(BakNumber))) Then
Me.Print BakNumber
Flag = Not Flag
Else
BakNumber = strItems(1)
End If
uj5u.com熱心網友回復:
'將你的代碼改了一下,這樣輸出的結果與你的結果不一致,這個應該是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
uj5u.com熱心網友回復:
佩服理解能力。說實話,1樓的還真沒辦法理解到這一地步……uj5u.com熱心網友回復:
是VB6中嗎?uj5u.com熱心網友回復:
1 5312 545
3 321
4 211
5 121
6 10
8 9
10 1285
16 1
謝謝5樓代碼 但是開始數字逐漸下降 應該把中間部分取消,保留上升程序或者下降的程序 開始和結尾數字
uj5u.com熱心網友回復:
謝謝14樓的代碼 管用 能否注釋一下 我想把它擴展一下uj5u.com熱心網友回復:
'先說一下此方法的理論.
'先設定此時資料是上升的(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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/147701.html
標籤:VB基礎類
上一篇:VB base64編碼問題
