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

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- [求救] 請問如何改寫這個FOR迴圈? (http://www.chiefox.com.tw/bbs/showthread.php?threadid=15632)


由 sattvakang 在 2011-05-13 16:07 發表:

[求救] 請問如何改寫這個FOR迴圈?

請問可以不用到FOR迴圈改寫下面這組程式嗎?

ST:=lbound(C);
A:C;
FOR i=ST+1 to datacount DO begin
A[i]:=IF(條件成立[i], C[i], A[i-1] ); //若條件不成立 則沿用前值
end;


由 sattvakang 在 2011-05-13 21:09 發表:

找到一個方法.....

版主 我找到下列的方法改寫上式

CK:=(條件成立=0 AND REF(條件成立,1)=1);
SP:=BARSLAST(CK)+1;
A:=IF(條件成立,C,REF(C,SP+1));

請問這個新程式比原先FOR迴圈的版本 在奇狐上執行會較快嗎?


由 cgjj 在 2011-05-16 09:44 發表:

回覆: [求救] 請問如何改寫這個FOR迴圈?

引用:
最初由 sattvakang 發表
請問可以不用到FOR迴圈改寫下面這組程式嗎?

ST:=lbound(C);
A:C;
FOR i=ST+1 to datacount DO begin
A[i]:=IF(條件成立[i], C[i], A[i-1] ); //若條件不成立 則沿用前值
end;



可以簡化為此行
A:ref(C,barslast(條件成立>0));


由 cgjj 在 2011-05-16 09:45 發表:

回覆: 找到一個方法.....

引用:
最初由 sattvakang 發表
版主 我找到下列的方法改寫上式

CK:=(條件成立=0 AND REF(條件成立,1)=1);
SP:=BARSLAST(CK)+1;
A:=IF(條件成立,C,REF(C,SP+1));

請問這個新程式比原先FOR迴圈的版本 在奇狐上執行會較快嗎?



這段算的結果與前面那段是不同的唷


由 cgjj 在 2011-05-16 09:49 發表:

在FOR 迴圈當中
不要用 IF(cond,A,B) 去存取計算 [單一元素]
改用 IF ..... THEN ..... ELSE .....
速度會提升許多

IF(cond,A,B) 是專為數列對數列計算設置的
若應用它來算 [單一元素] 會比較慢


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


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

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