プログラミングをしていると,ループの中にループが含まれる”多重ループ”と呼ばれる構造にしばしば出くわします.多重ループはFOR~NEXT文やDO~LOOP文を入れ子にして記述することが多いです.例えば,3次元配列Qの値をPに代入する場合,FOR~NEXT文を用いた次のような3重ループが用いられます.
FOR I=1 TO L
FOR J=1 TO M
FOR K=1 TO N
P(I,J,K)=Q(I,J,K)
NEXT K
NEXT J
NEXT I
ところで,上に示した3重ループ構造は1つのDO~LOOP文と2つのIF文を用いて次のように記述することもできます.
I=1
J=1
K=1
DO
P(I,J,K)=Q(I,J,K)
K=K+1
IF K>N THEN
K=1
J=J+1
END IF
IF J>M THEN
J=1
I=I+1
END IF
LOOP UNTIL I>L
また,1つのGOTO文と3つのIF文を用いて次のように記述することもできます.
I=1
J=1
K=1
10
P(I,J,K)=Q(I,J,K)
K=K+1
IF K>N THEN
K=1
J=J+1
END IF
IF J>M THEN
J=1
I=I+1
END IF
IF I<L THEN
GOTO 10
END IF
上に示した3つのプログラムは,いずれもループを脱出するための条件式を3つ含んでいるという点が共通しています(FOR~NEXT文やDO~LOOP文はそれ自体に条件式を含んでいます).ただ,一見すると始めに示したプログラムは3重ループで,後の2つは単一ループに見えます.この見え方の違いは次の図によって説明できます.
この図はL=5,M=4,N=2のときに,上に示したプログラムが取る構造の概念図です.黒線はIを変数とするループ,青線はJを変数とするループ,ピンクの線はKを変数とするループを表し,黄色の点は条件式が適用される場所を表します.左側の図では3重ループが明らかですが,右側の図は1本の紐に見えます.しかし,右側の図は左側の図の3重ループを点Oで切ってほどいたもので,両者は同じものからできています.そのため,右側の図の左上の矢印から出発して右下の矢印に抜けることは,左側の図の3重ループを1周することと同じことになります.そこで,右側の図の紐の両端を繋いで単一ループを作ると,これは左側の図の3重ループと等しくなります.これが,上に示したプログラムの見え方が異なる理由になります.
[ララクリスティー] LARA Christie ネックレス ルナ [ WHITE Label ] cp5802-w
- 出版社/メーカー: LARA Christie(ララクリスティー)
- メディア: ジュエリー
- この商品を含むブログを見る