到奇狐勝券首頁 奇狐社區論壇 購買奇狐勝券 試用奇狐勝券
 
論壇首頁 你可以在這裡編輯你的資料,查看短訊,訂閱主題和論壇參數等等 免費會員註冊 會員列表 論壇幫助 論壇日曆 論壇搜索 加入我的最愛 登出論壇  
奇狐社區論壇 : Powered by vBulletin version 2.3.0 奇狐社區論壇 > 指標公式 > [進階教學] > 03. 循環語句(迴圈敘述) FOR 《適用4.0版》
  上一主題   下一主題
作者
主題 發表新主題    回覆主題
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17600

03. 循環語句(迴圈敘述) FOR 《適用4.0版》

【語句】FOR

【用途】
用來計算重複性的運算(可使用多重迴圈)
例如將某運算式重複跑五次,一般以跑迴圈(循環)稱呼這種動作
迴圈常應用於數列(序列)的計算
 
【語法】
FOR var = n1 TO n2 DO expr
FOR var = n1 DOWNTO n2 DO expr
BREAK

【參數】
var 為用來計數迴圈的變數
n1 為迴圈的起點(開始計數的數)
n2 為迴圈的終點(終止計數的數)
expr 為要重複計算的運算式

【說明】

迴圈有兩種,一種是正向迴圈,另一種是逆向迴圈。

正向迴圈(遞增)
正向迴圈使用 FOR var = n1 TO n2 DO expr的語法。
計數迴圈的變數var 的值是從小跑到大。例如我們要讓 expr 裡的運算式重複跑20次,
將起點n1設為1和終點n2設為20 。迴圈跑時 var 的值會從 1, 2, 3, ... ... 一直計數到 20
(每次加1),也就是自 n1 跑到 n2。 運算式為: FOR var = 1 TO 20 DO expr
換言之,若要讓 var 的值自 6 計數到 25 只需將起點n1設為6和終點n2設為25,跑時
var 的值會從 6, 7, 8, ... ... 一直計數到 25。 運算式為: FOR var = 6 TO 25 DO expr
註:若 n1>n2 則迴圈裡的運算式不會被執行

逆向迴圈(遞減)
逆向迴圈使用 FOR var = n1 DOWNTO n2 DO expr 的語法。
逆向迴圈就是正向迴圈的相反(反過來跑)。計數迴圈的變數var 的值是從大跑到小。
正向迴圈和逆向迴圈用法的差別在於一個用是 DO 一個用是 DOWNTO 語句
例如要讓一個迴圈自80跑到30 (每次減1),將起點 n1設為80和終點n2設為30。
運算式為: FOR var= 80 DOWNTO 30 DO expr
註:若 n1<n2 則迴圈裡的運算式不會被執行

跳離迴圈
要如何於中途中止迴圈的運作,不再讓它繼續往下跑呢?
無論你是用正向迴圈或逆向迴圈都可以利用 BREAK 指令來隨時跳離迴圈運作
例如: 下面的公式當 i 的值跑到22時即會跳離迴圈,跳離後 i 的值為 22

FOR i= 10 TO 100 DO Begin
  IF i=22 THEN Break;
End;
若將上述 i=22 改為 i=150 則會因條件都沒有符合的,迴圈會從頭跑到尾完。跑完後
i 的值為並非 100 而是 101
。為何會這樣呢? 原因是在於迴圈每跑一輪完,要進行下
一輪迴圈前會將計數變數 i 的值加1 (逆向迴圈為減1)。加完後若 i 仍在10到100之間
就會繼續進行迴圈,若超過範圍則跳離迴圈。所以跑完後 i 的值是 101,我們可以利
用此特性來檢查該迴圈是否跑完。

向版主報告此篇 | 查IP位址
Old Post 2005-03-10 18:19
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17600

【範例1】單行運算式

  計算1+2+3+4+ ... ... +9+10 的總和(用正向迴圈)
Q:=0;
FOR i = 1 TO 10 DO Q:=Q+i;
總和:Q;

計算1+2+3+4+ ... ... +9+10 的總和(用逆向迴圈)
Q:=0;
FOR i = 10 DOWNTO 1 DO Q:=Q+i;
總和:Q;

向版主報告此篇 | 查IP位址
Old Post 2005-03-10 18:26
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17600

【範例2】多行運算式

  計算 1+2+3+4+ ... ... +9+10 和 1x2x3x4x ... ... x9x10 (用正向迴圈)
Q1:=0;
Q2:=1;
FOR i = 1 TO 10 DO Begin
  Q1:=Q1+i;
  Q2:=Q2*i;

End;
結果1:Q1;
結果2:Q2;

計算 1+2+3+4+ ... ... +9+10 和 1x2x3x4x ... ... x9x10 (用逆向迴圈)
Q1:=0;
Q2:=1;
FOR i = 10 DOWNTO 1 DO Begin
  Q1:=Q1+i;
  Q2:=Q2*i;

End;
結果1:Q1;
結果2:Q2;

向版主報告此篇 | 查IP位址
Old Post 2005-03-10 18:27
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17600

【範例3】多重迴圈(巢狀迴圈)

  求九九乘法每一個算式結果的總和
  1x1=1
+
1x2=2
+
1x3=3
+
... ...
+
1x9=9
  2x1=2
+
2x2=4
+
2x3=6
+
... ...
+
2x9=18
   :
+
 :
+
 :
+
... ...
+
 :
  9x1=9
+
9x2=18
+
9x3=27
+
... ...
+
9x9=81

Q:=0;
FOR i = 1 TO 9 DO Begin
  FOR j = 1 TO 9 DO Begin
    Q:=Q+i*j;
  End;
End;

總和:Q;

向版主報告此篇 | 查IP位址
Old Post 2005-03-10 18:28
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17600

【範例4】跳離迴圈

 條件成立時可用 Break 指令來跳離迴圈
  求九九乘法1x1到7x2每一個算式結果的總和
  1x1=1
+
1x2=2
+
1x3=3
+
... ...
+
1x9=9
  2x1=2
+
2x2=4
+
2x3=6
+
... ...
+
2x9=18
   :
+
 :
+
 :
+
... ...
+
 :
  6x1=6
+
6x2=12
+
6x3=18
+
... ...
+
6x9=54
  7x1=7
+
7x2=14  

Q:=0;
FOR i = 1 TO 7 DO Begin
  FOR j = 1 TO 9 DO Begin
    Q:=Q+i*j;
    IF i=7 AND j=2 THEN Break;
  End;  
End;

總和:Q;

向版主報告此篇 | 查IP位址
Old Post 2005-03-10 18:30
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
cgjj
總版主

註冊日期: Oct 2003
來  自:
文章數量: 17600

【範例5】DKX多空線

原 3.5版 的寫法
a:=(3*c+l+o+h)/6;
B:(20*a+19*ref(a,1)+18*ref(a,2)+17*ref(a,3)+16*ref(a,4)+15*ref(a,5)+14*ref(a,6)
+13*ref(a,7)+12*ref(a,8)+11*ref(a,9)+10*ref(a,10)+9*ref(a,11)+8*ref(a,12)
+7*ref(a,13)+6*ref(a,14)+5*ref(a,15)+4*ref(a,16)+3*ref(a,17)+2*ref(a,18)+
ref(a,19))/210;
D:ma(b,n)
 
用 4.0版 語法精簡後

a:=(3*c+l+o+h)/6;
b:0;
for i=0 to 19 do begin
  b:=b+(20-i)*ref(a,i);
end;
b:=b/210;
D:ma(b,n);

註: N 為參數(預設:10, 最小:1, 最大:250)

向版主報告此篇 | 查IP位址
Old Post 2005-03-10 18:33
cgjj 現在離線 點選這裡查看 cgjj 的個人資料 點選這裡給 cgjj 傳送一條短訊 查找更多關於 cgjj 的文章 增加 cgjj 至你的好友列表 編輯/刪除訊息 引用回覆
全部時間均為台灣時間, 現在時間為15:19 發表新主題    回覆主題
  上一主題   下一主題
顯示可列印版本 | 訂閱此主題

論壇跳轉:
主題評分:

論壇規定:
你不可以發表新主題
你不可以回覆文章
你不可以上傳附件
你不可以編輯自己的文章
HTML語法核准
vB 語法核准
表情符號核准
貼圖語法[IMG]核准
 

本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。

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

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.  聯絡我們