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

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- [進階教學] (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=46)
-- 03. 循環語句(迴圈敘述) FOR 《適用4.0版》 (http://www.chiefox.com.tw/bbs/showthread.php?threadid=2648)


由 cgjj 在 2005-03-10 18:19 發表:

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,我們可以利

用此特性來檢查該迴圈是否跑完。


由 cgjj 在 2005-03-10 18:26 發表:

【範例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;


由 cgjj 在 2005-03-10 18:27 發表:

【範例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;


由 cgjj 在 2005-03-10 18:28 發表:

【範例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;


由 cgjj 在 2005-03-10 18:30 發表:

【範例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;


由 cgjj 在 2005-03-10 18:33 發表:

【範例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)


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


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

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