---------------------------------------------------------------------

next up previous contents
Next: 条件分岐を描く Up: PADELの文法について Previous: ブロック

---------------------------------------------------------------------

反復処理を描く

反復には、先に判定し、真ならば内部を実行するということを繰り返す前判定反 復と、先に内部を実行し、その後で判定して、真ならばまた繰り返すという後判 定反復の2種類がある。 また、前判定の中には、回数を指定し、その回数だけ反復する、というものもあ る。 PADELでは、前判定反復を表すのに while  を、後判定を表 すのに do tex2html_wrap_inline2519 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]
    }

tex2html_wrap2549

少々長くなってしまったが、これは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 tex2html_wrap_inline2547 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