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

奇狐社區論壇 (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=5867)


由 kkkkkk 在 2006-08-22 10:39 發表:

公式怪異行為

在編寫一個兩段式的公式,當各自獨立時完全能正確表現,可是在兩者合一時,最後一條畫線發生突變,不知道有何可能原因?
公式的部份如下

N:=sysparam(1);
hh:=H; LL:=L;
H1:=hh[N-1]; H2:=hh[N]; H3:=hh[N+1];
L1:=LL[N-1]; L2:=LL[N]; L3:=LL[N+1];
M:=if(H2>=H1 and H2>H3,1,if(L2<=L1 and L2<L3,-1,0));

if M=1 then begin
vertline(barpos=N),colorwhite,pointdot;
{中間部分不便貼出}
partline(by4>0,LL),linethick1; //這裡留著時此線段發生變化
end;

if M=-1 then begin
vertline(barpos=N),colorwhite,pointdot; //底下的partline disable時,會在上面的vertline發生變異
------------------------------------------------
//partline(bx4>0,HH),linethick1;
end;


由 cgjj 在 2006-08-22 11:13 發表:

我這邊試無此現象

您將這兩段改為這樣看看:
vertline(barpos=N and M=1),colorwhite,pointdot;
partline(by4>0 and M=1,LL),linethick1; //這裡留著時此線段發生變化

if M=-1 then begin
vertline(barpos=N and M=-1),colorwhite,pointdot;
//底下的partline disable時,會partline(bx4>0 and M=-1,HH),linethick1;
end;


由 kkkkkk 在 2006-08-22 11:31 發表:

引用:
最初由 cgjj 發表
我這邊試無此現象

您將這兩段改為這樣看看:
vertline(barpos=N and M=1),colorwhite,pointdot;
partline(by4>0 and M=1,LL),linethick1; //這裡留著時此線段發生變化

if M=-1 then begin
vertline(barpos=N and M=-1),colorwhite,pointdot;
//底下的partline disable時,會partline(bx4>0 and M=-1,HH),linethick1;
end;



謝謝總版主快速回答,這個方案依然無法解決問題,我很冒昧地把程式用3捷短訊送給你看看,是我公式的問題?還是程式的bug?


由 cgjj 在 2006-08-22 12:30 發表:

引用:
最初由 kkkkkk 發表
謝謝總版主快速回答,這個方案依然無法解決問題,我很冒昧地把程式用3捷短訊送給你看看,是我公式的問題?還是程式的bug?


程式中少這區段, 麻煩補一下, 謝謝
if M=1 then begin
........................
end;

另外此段程式
N:sysparam(1);
H1:=hh[N-1]; H2:=hh[N]; H3:=hh[N+1];
L1:=LL[N-1]; L2:=LL[N]; L3:=LL[N+1];
當 sysparam(1)=1 和 sysparam(1)=datacount 時
會存取到 hh[0] 和 hh[datacount+1] 超過正常範圍
應於事先處理, 才不易導致程式錯亂


由 kkkkkk 在 2006-08-22 15:13 發表:

因為短訊可用字數太少,切來切去竟然把頭切掉了,真抱歉,已經補寄過去,謝謝總版主提醒,關於datacount的問題我會注意,因為這個程式大概不會用到最後2根K線,目前應該不會造成困難
另外,我也換過使用舊版奇狐,仍然有同樣問題存在

註:類似同樣寫法的公式,都沒有這個問題發生過


由 cgjj 在 2006-08-22 18:44 發表:

加入下列紅色的程式即可恢復正常

HH:C*0 linethick0; LL:C*0 linethick0;
if M=-1 then begin
  ....................
 HH:=ref(H,bx4),linethick0;
 partline(bx4>0 and M=-1,HH),linethick1;
  tmp:=setlbound(LL,0);
end;
if M=1 then begin
 .....................
 LL:=ref(L,by4),linethick0;
 partline(by4>0,LL),linethick1;
  tmp:=setlbound(HH,0);
end;

此問題與奇狐的 IF ...THEN 特性有關
請參考下列連結的解說:
http://www.chiefox.com.tw/bbs/showt...=&threadid=5000
註:最好不要將繪字繪圖繪線函數用於 IF ...THEN 中


由 kkkkkk 在 2006-08-22 19:09 發表:

謝謝總版主,是可以解決上項問題了!! 真難ㄚ.....


由 kkkkkk 在 2006-08-23 11:31 發表:

謝謝cgjj總版主的提醒,終於把在新版中不能跑的循環公式清理清楚,也終於能把新版奇狐搬回來了,原來4.9版只是龜毛一點,他不再容許一些沒被定義的變數出現,也不再把條件成立視為當然的1,有時不指定x=1就不會得到正確的結果,現在不一板一眼的把公式寫清楚,不能隨便矇混過關了,這是一點愚得,謹在此與大家互相參考


由 peter109 在 2006-08-23 12:21 發表:

多謝 KKKKKK兄心得分享

__________________
至誠能勝天下至偽
至拙能勝天下至巧


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


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

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