奇狐社區論壇
在這個頁面顯示本主題全部的 10 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- 請教 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=21867)


由 a9681054 在 2019-04-22 13:50 發表:

請教

版主你好,
以下程式為何在5.0版可執行,而5.2版卻會出現指標越界?

NKC[0]:=(NKH[0]+NKL[0]+2*NKC[0])/4;
For i=序列下界(NKC)+1 to 序列上界(NKC) do Begin
NKO[i]:=(NKO[i-1]+NKC[i-1])/2;
條件函數 NKO[i]>NKH[i] then NKH[i]:=NKO[i] else NKH[i]:=NKH[i];
條件函數 NKO[i]<NKL[i] then NKL[i]:=NKO[i] else NKL[i]:=NKL[i];
NKC[i]:=(NKH[i]+NKL[i]+2*NKC[i])/4;
End;

__________________
chiu


由 cgjj 在 2019-04-22 14:03 發表:

回覆: 請教

引用:
最初由 a9681054 發表
版主你好,
以下程式為何在5.0版可執行,而5.2版卻會出現指標越界?

NKC[0]:=(NKH[0]+NKL[0]+2*NKC[0])/4;
For i=序列下界(NKC)+1 to 序列上界(NKC) do Begin
NKO[i]:=(NKO[i-1]+NKC[i-1])/2;
條件函數 NKO[i]>NKH[i] then NKH[i]:=NKO[i] else NKH[i]:=NKH[i];
條件函數 NKO[i]<NKL[i] then NKL[i]:=NKO[i] else NKL[i]:=NKL[i];
NKC[i]:=(NKH[i]+NKL[i]+2*NKC[i])/4;
End;



v5.2 檢查的比較嚴格
這段程式碼是錯誤的!!!!
奇狐的數列是自1數起,不會有 [0] 存在

無論是用 v5.0 或 v5.2,請都修正該程式碼
變數[0] 是越界存取,可能會導致很多莫名其妙的問題


由 a9681054 在 2019-04-22 14:19 發表:

問題解決了,謝謝~

__________________
chiu


由 cgjj 在 2019-04-22 14:26 發表:

引用:
最初由 a9681054 發表
問題解決了,謝謝~


不客氣~

[0] 不要直接改為 [1] 唷
請改為該序列下界,因為有些序列有效起點是大於1


由 a9681054 在 2019-04-22 14:39 發表:

版主你好,
序列上下界不是很瞭解,我剛才的確是將0改1,是否麻煩版主將上述程式改為正確,謝謝∼

__________________
chiu


由 cgjj 在 2019-04-22 14:48 發表:

引用:
最初由 a9681054 發表
版主你好,
序列上下界不是很瞭解,我剛才的確是將0改1,是否麻煩版主將上述程式改為正確,謝謝∼



NKC, NKH, NKL, NKC
這四個數列資料等長嗎?

前面有無其它程式碼用到這四個變數?
若有請一併列出!


由 cgjj 在 2019-04-22 14:53 發表:

看起來您程式與下面這段是算相同的東西,因為與K棒等長,所以可以直接用1開始存取。參考看看:

原碼:
fo:=o;fh:=h;fl:=l;fc:=c; fc[1]:=(2*fc[1]+fh[1]+fl[1])/4; for i=2 to datacount do begin fo[i]:=(fo[i-1]+fc[i-1])/2; if fo[i]>fh[i] then fh[i]:=fo[i]; if fo[i]<fl[i] then fl[i]:=fo[i]; fc[i]:=(2*fc[i]+fh[i]+fl[i])/4; end;


由 a9681054 在 2019-04-22 14:56 發表:

NkO:=開盤價;
NkH:=最高價;
NkL:=最低價;
NkC:=收盤價;
/////////////////////////////////////////////////////////////////////////////
NKC[0]:=(NKH[0]+NKL[0]+2*NKC[0])/4;
For i=序列下界(NKC)+1 to 序列上界(NKC) do Begin
NKO[i]:=(NKO[i-1]+NKC[i-1])/2;
條件函數 NKO[i]>NKH[i] then NKH[i]:=NKO[i] else NKH[i]:=NKH[i];
條件函數 NKO[i]<NKL[i] then NKL[i]:=NKO[i] else NKL[i]:=NKL[i];
NKC[i]:=(NKH[i]+NKL[i]+2*NKC[i])/4;
End;

__________________
chiu


由 cgjj 在 2019-04-22 15:13 發表:

引用:
最初由 a9681054 發表
NkO:=開盤價;
NkH:=最高價;
NkL:=最低價;
NkC:=收盤價;
/////////////////////////////////////////////////////////////////////////////
NKC[0]:=(NKH[0]+NKL[0]+2*NKC[0])/4;
For i=序列下界(NKC)+1 to 序列上界(NKC) do Begin
NKO[i]:=(NKO[i-1]+NKC[i-1])/2;
條件函數 NKO[i]>NKH[i] then NKH[i]:=NKO[i] else NKH[i]:=NKH[i];
條件函數 NKO[i]<NKL[i] then NKL[i]:=NKO[i] else NKL[i]:=NKL[i];
NKC[i]:=(NKH[i]+NKL[i]+2*NKC[i])/4;
End;



確認跟我給的,算的是相同的東西!!!

原碼:
NkO:=o;NkH:=h;NkL:=l;NkC:=c; NkC[1]:=(2*NkC[1]+NkH[1]+NkL[1])/4; for i=2 to datacount do begin NkO[i]:=(NkO[i-1]+NkC[i-1])/2; if NkO[i]>NkH[i] then NkH[i]:=NkO[i]; if NkO[i]<NkL[i] then NkL[i]:=NkO[i]; NkC[i]:=(2*NkC[i]+NkH[i]+NkL[i])/4; end;


由 a9681054 在 2019-04-22 15:14 發表:

版主你好,
剛試了,效果一樣,感謝幫忙~

__________________
chiu


全部時間均為台灣時間, 現在時間為10:20
在這個頁面顯示本主題全部的 10 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.