之前在雅測看到有人發問 "如何寫岀10根K棒中第二低點數"
恩 雖然說 我不知道 第二高低點要幹什麼
不過要找到他 還蠻簡單的
假設 過去10筆資料的最高價是 8 5 9 3 1 4 5 4 6 2
我們先用 Highest 這函數去找 最高點
所以最高點 是 Highest( high , 10 ) 結果是 9
用一個變數 存起來 Value1 = Highest( high , 10 )
所以 Value1 = 9
現在要找 第二高點 也就是8 這就要 一個一個往回比較了
先宣告一個變數 Value2 這個變數(預設0) 放第二高點
只要 某筆資料 小於 Value1 且 大於 Value2 那他就是第二高點
以上面的假設舉例 value1 = 9,value2 = 0
2 小於 9 -> 2 大於 0(value2預設) -> value2 = 2
6 小於 9 -> 6 大於 2 -> value2 = 6
4 小於 9 -> 4 小於 6 -> value2 = 6 (不變)
5 小於 9 -> 5 小於 6 -> value2 = 6 (不變)
4 小於 9 -> 4 小於 6 -> value2 = 6 (不變)
1 小於 9 -> 1 小於 6 -> value2 = 6 (不變)
3 小於 9 -> 3 小於 6 -> value2 = 6 (不變)
9 不小於 9 -> 跳出
5 小於 9 -> 5 小於 6 -> value2 = 6 (不變)
8 小於 9 -> 8 大於 6 -> value2 = 8
以上 若是有100筆 就要比100次
比較順序是往前比的 也就是先比 High[1] 然後是 High[2] ....
有感覺出來規則嗎?? 程式是這樣寫的
建立一個函數
input : length(NumericSeries);
vars : High1st(0),High2nd(0); { 宣告存放最高和第二高值的變數 }
vars : count(0); { 計數器 }
High1st = highest(high[1],length); { High1st就放高點 }
High2nd = 0; { High2nd歸0 }
for count=1 to length begin { 計數器從1開始到length的時候執行.. }
if high[count] < High1st then begin { 如果High[count] < 最高點時 }
if high[count] > High2nd then begin { 如果High[count] > 次高點時 }
High2nd = high[count]; { High[count] = 次高點 }
end;
end;
end;
就這樣 ~
最後函數回傳的值 就是Length範圍內的 次高點了
沒有在TS測試過 不保證沒問題
有問題在問吧