Next: 条件分岐を描く Up: PADELの文法について Previous: ブロック |
反復処理を描く反復には、先に判定し、真ならば内部を実行するということを繰り返す前判定反 復と、先に内部を実行し、その後で判定して、真ならばまた繰り返すという後判 定反復の2種類がある。 また、前判定の中には、回数を指定し、その回数だけ反復する、というものもあ る。 PADELでは、前判定反復を表すのに while を、後判定を表 すのに do while を、そして回数指定の 反復には for を使う。 これらの書式については、次の例を見れば分かるだろう。
do{ input N }while(N < 1) for(i = 1, N){ input A[i] } for(i = 2, N){ j = i while(j >= 2 && A[j-1] > A[j]){ A[j-1] <-> A[j] j = j - 1 } } for(i = 1, N){ print A[i] }
少々長くなってしまったが、これはN個のデータをソートして出力するアルゴ リズムである。 まずデータ数Nを入力する。この時、入力した値が1より小さければ不正なの で、再入力を促す。 このように、まず何かを行ってから判定するのが後判定である。 次に、N個のデータを入力する。 このような、回数指定の反復は、for を使って書く。 その後で、ソーティングの際に、1つ前の値と大小を比較し、前の値の方が大き ければ交換して、また繰り返す、という操作をしている。 このような場合は前判定なので、while を使っている。 ところで、for 文と while 文は共に前判定で、出力されるPAD 図の形が同じであるが、一応回数指定の反復が for、その他の前判定反復 が while、というように使い分けておくことを勧める。 さて、最後にいくつか注意すべき点、というか、可能な書式について述べておこう。 まず、反復部が1命令のみの場合、{ } で囲む必要はない。 つまり、 for(i = 1, N) input A[i] といった書き方が可能である。 もちろん { } で囲んだとしても何も問題はない。 さらに、 for(i = 1, N){ } のように、反復部がなくても構わない。 但し、その場合は必ず { } で囲まなければいけない。 ところが、C言語の真似をして、 for(i = 1, N) input A[i] と書くとエラーになってしまうので注意してほしい。 これは、for(i = 1, N) という反復命令と、input A[i] という命令と、2命令を1行に書いたことになり、1行1命令の原則に反して いるのである。 もちろん、 for(i = 1, N){ input A[i] } と書いても駄目である。 また、{ の前や、do while文の } の後ろに改行コー ドを入れても構わない。 do { input N } while(N < 1) for(i = 1, N) { input A[i] } 但し、他の箇所では改行はしてはいけない。 また、空白は適当に入れて構わない。 for ( i = 1, N ) { input A[i] } 条件式には、任意の文字列を書くことができる。
|
プログラムのPAD図自動描画ソフト pad2ps に戻る。 吉田 誠一のホームページ に戻る。 Copyright(C) Seiichi Yoshida (comet@aerith.net). All rights reserved. Sat Nov 9 21:27:17 JST 1996 |