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文を利用する。
<参考> 十進BASIC Q&A
多重ループから抜ける方法