do~loop構文(do区) ☆☆☆
DO ~ LOOP 構文では,DO行とLOOP行に挟まれた各文が繰り返し実行される。
例1
10 ! 無限に繰り返す
20 LET a=0
30 DO
40 PRINT a
50 LET a=a+1
60 LOOP
70 END
○ DO WHILE
DO文にWHILE句を書くと,WHILE句に書かれた条件(論理式
)が真である間,DO行とLOOP行に挟まれた各文が繰り返し実行される。
条件が偽になると,LOOP行の次の行に進む。最初から条件が偽であれば,DO行とLOOP行の間の各文は1回も実行されない。
例2
10 INPUT n
20 LET i=1
30 DO WHILE i<=n
40 PRINT i
50 LET i=i+1
60 LOOP
70 END
○ DO UNTIL
DO文にUNTIL句を書くと,UNTIL句に書かれた条件が偽である間,DO行とLOOP行に挟まれた各文が繰り返し実行される。
条件が真になると,LOOP行の次の行に進む。最初から条件が真であれば,DO行とLOOP行の間の各文は1回も実行されない。
例3 (例2と等価)
10 INPUT n
20 LET i=1
30 DO UNTIL i>n
40 PRINT i
50 LET i=i+1
60 LOOP
70 END
○ LOOP WHILE
LOOP文にWHILE句を書くと,DO行とLOOP行に挟まれた各文を実行した後,WHILE句に書かれた条件をテストする。
その結果が真であれば,DO行から再び実行を開始する。結果が偽であれば,LOOP行の次の行に進む。
例4
10 INPUT n
20 LET i=1
30 DO
40 PRINT i
50 LET i=i+1
60 LOOP WHILE i<=n
70 END
nに1以上の数を入力する場合には,例2と例4とで動作に違いは生じない。
しかし,nに0を入力すると例2では40行と50行は1回も実行されないのに対し,例4では40行と50行は実行される。
○ LOOP UNTIL
LOOP文にUNTIL句を書くと,DO行とLOOP行に挟まれた各文を実行した後,UNTIL句に書かれた条件をテストする。
その結果が偽であれば,DO行から再び実行を開始する。結果が真であれば,LOOP行の次の行に進む。
例5 (例4と等価)
10 INPUT n
20 LET i=1
30 DO
40 PRINT i
50 LET i=i+1
60 LOOP UNTIL i>n
70 END
○ EXIT DO文
EXIT DO文を実行すると,LOOP文の次の行に分岐する。通常,IF文と組み合わせて用いる。
例6
10 INPUT n
20 LET i=1
30 DO
40 PRINT i
50 IF i>=n THEN EXIT DO
60 LET i=i+1
70 LOOP
80 END
IF … THEN EXIT DO をDO文の直後,あるいは,LOOP文の直前に書けば,それぞれ,DO UNTIL …,LOOP UNTIL … と等価になる。
例7 (例3と等価)
10 INPUT n
20 LET i=1
30 DO
40 IF i>n THEN EXIT DO
50 PRINT i
60 LET i=i+1
70 LOOP
80 END
例8 (例5と等価)
10 INPUT n
20 LET i=1
30 DO
40 PRINT i
50 LET i=i+1
60 IF i>n THEN EXIT DO
70 LOOP
80 END
DO~LOOPが2重,3重の入れ子になっている場合には,EXIT DO文の実行は最も内側の DO~LOOPからの脱出を意味する。
たとえば,
10 DO
20 ……
30 DO
40 ……
50 EXIT DO
60 ……
70 LOOP
80 ……
90 LOOP
100 ……
で50行のEXIT DOを実行すると,80行に分岐する。50行の位置から100行に分岐したい場合は,GOTO文
を利用する。