 |
novaliou0206
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 39 |
[問題]在一數列中尋找符合條件的第一個元素?
總版主您好,
我有一個數列AA,跟K棒數等長,在程式前頭已根據K棒的性質設定其元素值,為0~4,然後我利用for迴圈,由後往前(datacount to 2),依據元素值來決定要執行一些動作,這些動作中有必須往前尋找符合條件的最近的其他元素位置,並取得其為哪一個元素值及其位置數,例如:當為1時,我要往前找最近的2或3,當為2時,我要往前找最近的1或4,當為3時,我要往前找最近的2或3,當為4時,我要往前找最近的1或4,若找不到符合的條件,則跳過不做任何動作,這樣的需求不知要用哪一個或哪幾個指令才能完成?是不是要用引用函數?謝謝總版主的協助。
|
|
向版主報告此篇 |  |
|
2013-02-18 10:59 |
|
|
|  |
 |
novaliou0206
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 39 |
謝謝您,方法一中的barslast引用函數可以用在迴圈中嗎?它會不會從我迴圈當時的位置往前找?如果可以,那參數要如何放?畢竟我數列中有很多的1,2,3,4,之所以用迴圈,是要找每一個往前相關的元素,謝謝。
|
|
向版主報告此篇 |  |
|
2013-02-18 13:11 |
|
|
|  |
 |
novaliou0206
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 39 |
另外方法二中用第二迴圈方式,當我找到最近符合的條件,如何就跳出迴圈不要再找下去了?謝謝。
|
|
向版主報告此篇 |  |
|
2013-02-18 13:15 |
|
|
|  |
 |
novaliou0206
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 39 |
謝謝您,我一直忘了SP23也是數列,另一問題,在迴圈中符合條件直接跳出迴圈,是不是用EXIT指令?要如何用?謝謝。
|
|
向版主報告此篇 |  |
|
2013-02-18 13:26 |
|
|
|  |
 |
novaliou0206
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 39 |
謝謝您,所以在迴圈內的條件判斷上,當符合執行完我要做的動作後,最後加上break,迴圈就會中斷跳出,我這樣說對嗎?謝謝。
|
|
向版主報告此篇 |  |
|
2013-02-18 13:40 |
|
|
|  |
 |
novaliou0206
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 39 |
謝謝總版主最近的指導,我整合幾個問題的回答,寫出以下的測試程式:
SP23:=barslast(AA=2 or AA=3);
for i=datacount downto 2 do begin
if AA[i]=1 then begin
P2:=barpos=i;
P1:=SP23[i];
drawline(P1,L,P2,H,0), pxdn2,linethick2,coloryellow;
end;
end;
我也試著用雙重迴圈方式:
for i=datacount downto 2 do begin
if AA[i]=1 then begin
P2:=barpos=i;
for j=i-1 downto 1 do begin
if AA[j]=2or AA[j]=3 then begin
P1:=barpos=j;
break;
end;
end;
drawline(P1,L,P2,H,0), pxdn2,linethick2,coloryellow;
end;
end;
我確認過AA數列中元素值為1,2,3,4有很多個,因此我期待程式應該畫出很多條線,但不管採用哪一種方式,最後都只畫出最後一條線,不知是我哪裡搞錯了?應該要怎麼修改,才能把所有符合條件的線全部畫出來?謝謝您的協助。
|
|
向版主報告此篇 |  |
|
2013-02-20 16:18 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18095 |
引用: 最初由 novaliou0206 發表
謝謝總版主最近的指導,我整合幾個問題的回答,寫出以下的測試程式:
SP23:=barslast(AA=2 or AA=3);
for i=datacount downto 2 do begin
if AA[i]=1 then begin
P2:=barpos=i;
P1:=SP23[i];
drawline(P1,L,P2,H,0), pxdn2,linethick2,coloryellow;
end;
end;
我也試著用雙重迴圈方式:
for i=datacount downto 2 do begin
if AA[i]=1 then begin
P2:=barpos=i;
for j=i-1 downto 1 do begin
if AA[j]=2or AA[j]=3 then begin
P1:=barpos=j;
break;
end;
end;
drawline(P1,L,P2,H,0), pxdn2,linethick2,coloryellow;
end;
end;
我確認過AA數列中元素值為1,2,3,4有很多個,因此我期待程式應該畫出很多條線,但不管採用哪一種方式,最後都只畫出最後一條線,不知是我哪裡搞錯了?應該要怎麼修改,才能把所有符合條件的線全部畫出來?謝謝您的協助。
drawline 本身即是處理數列的畫線, 故不能直接帶入迴圈中
它會自 P1 條件成立之處畫線到 P2 條件成立之處 (P1和P2都是數列)
看看這樣是否為您要的結果:
P1:=AA=2 or AA=3;
P2:=AA=1;
drawline(P1,L,P2,H,0), pxdn2,linethick2,coloryellow;
|
|
向版主報告此篇 |  |
|
2013-02-20 16:37 |
|
|
|  |
 |
novaliou0206
中級會員
註冊日期: Nov 2011
來 自:
文章數量: 39 |
真厲害,可以了,謝謝總版主,但卻遇到一個小問題,我的部分程式如下:
P1:=AA=1;
P2:=AA=2;
P3:=AA=3;
P4:=AA=4;
P23:=AA=2 or AA=3;
P14:=AA=1 or AA=4;
drawline(P23,L,P1,H,0) pxdn2 linethick1 coloryellow;
drawline(P14,H,P2,L,0) pxdn2 linethick1 coloryellow;
drawline(P23,L,P3,H,0) pxdn2 linethick1 coloryellow;
drawline(P14,H,P4,L,0) pxdn2 linethick1 coloryellow;
stickline(P3,H,L,0.5,0) pxdn2 linethick1 coloryellow;
stickline(P4,L,H,0.5,0) pxdn2 linethick1 coloryellow;
連線幾乎都可以正常畫出,唯獨當AA=3或AA=4連續出現時,線就沒畫出來,在drawline(P23,L,P3,H,0) pxdn2 linethick1 coloryellow;,前面接AA=2就正常,但AA=3不畫,在drawline(P14,H,P4,L,0) pxdn2 linethick1 coloryellow;,前面接AA=1就正常,但AA=4不畫,要麻煩您協助解決了,謝謝。
|
|
向版主報告此篇 |  |
|
2013-02-21 01:37 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18095 |
引用: 最初由 novaliou0206 發表
真厲害,可以了,謝謝總版主,但卻遇到一個小問題,我的部分程式如下:
P1:=AA=1;
P2:=AA=2;
P3:=AA=3;
P4:=AA=4;
P23:=AA=2 or AA=3;
P14:=AA=1 or AA=4;
drawline(P23,L,P1,H,0) pxdn2 linethick1 coloryellow;
drawline(P14,H,P2,L,0) pxdn2 linethick1 coloryellow;
drawline(P23,L,P3,H,0) pxdn2 linethick1 coloryellow;
drawline(P14,H,P4,L,0) pxdn2 linethick1 coloryellow;
stickline(P3,H,L,0.5,0) pxdn2 linethick1 coloryellow;
stickline(P4,L,H,0.5,0) pxdn2 linethick1 coloryellow;
連線幾乎都可以正常畫出,唯獨當AA=3或AA=4連續出現時,線就沒畫出來,在drawline(P23,L,P3,H,0) pxdn2 linethick1 coloryellow;,前面接AA=2就正常,但AA=3不畫,在drawline(P14,H,P4,L,0) pxdn2 linethick1 coloryellow;,前面接AA=1就正常,但AA=4不畫,要麻煩您協助解決了,謝謝。
P3:=AA=3;
P23:=AA=2 or AA=3;
drawline(P23,L,P3,H,0);
其中 P23 成立時, P3 必定成立 (都有AA=3)
drawline 的畫法簡介如下:
drawline(Q,L,Q,H,0);
Q1 是 Q 條件第一個成立之處
Q2 是 Q 條件第二個成立之處
Q3 是 Q 條件第三個成立之處
..............................
它會自 Q1畫線到Q2, 再自Q3畫到Q4, 再自Q5畫到Q6 ....
不會有 Q2畫線到Q3, 或是Q3畫到Q5的線
它是一段一段畫
自Q成立之處畫到下一個Q成立之處, 之後需再等Q再次成立才會再續畫
若要每一個Q成立之處都連線, 就要改用 POLYLINE 函數
要做到您說的 "當為3時,要往前找最近的2或3"
必需改為以下這樣處理:
將
drawline(P23,L,P3,H,0) pxdn2 coloryellow;
改為
rsp:=ref(barslast(P23),1)+1;
se:=(H-ref(L,rsp))/rsp;
DRAWSL(P3,H,se,-rsp,1) pxdn2 coloryellow;
|
|
向版主報告此篇 |  |
|
2013-02-21 09:19 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|