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

next up previous contents
Next: 例外処理 Up: 条件分岐を描く Previous: ふつうの条件分岐

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

多重条件分岐

 

多重条件分岐には、ふつう switch 文を使う。 まずは例をみてほしい。これは符号を返す関数である。

    switch{
        case x>0:
            return 1
        case x=0:
            return 0
        case x<0:
            return -1
    }

tex2html_wrap2601

このように、分岐先が3つ以上になるのが多重分岐である。 それぞれの条件式は、case  を使って書く。

もし貴方がC言語を知っていれば、次のような書き方をしたくなるかもしれない。

    switch(n%3){
        case 0:
            print 3の倍数
        case 1:
            print あまり1
        case 2:
            print あまり2
    }

このような書き方も可能である。 これは、

    switch{
        case n%3=0:
            print 3の倍数
        case n%3=1:
            print あまり1
        case n%e=2:
            print あまり2
    }

と書いたのと同じ結果となる。

また、複数の条件式を並べて書くこともできる。 さらに、どの条件式にも当てはまらない場合の処理を、default  を使って書くことができる。 default の時は、PAD図の中には何も文字は書かれない。 では、例を見てみよう。 これは、与えられた数列の中の数を1、1桁の素数、その他に分類してそれぞれ 個数を数えるプログラムである。

    {
        one = 0
        prime = 0
        others = 0
    }
    
    for(i = 1, N){
        switch(A[i]){
            case 1:
                one = one + 1
            case 2:
            case 3:
            case 5:
            case 7:
                prime = prime + 1
            default:
                others = others + 1
        }
    }

tex2html_wrap2603

casedefault の条件式の中身を省略し、その条件に当てはまる 場合には何もしないことを表すこともできる。 その場合には、条件式の後に空行のみを入れる。 例えば、

    switch{
        case x%3=0:
    
        case x%3=1:
            move(+1)
        case x%3=2:
            move(-1)
    }

と書いて、

tex2html_wrap2605

というPAD図を描くことができるgif

switch文でも、{ の前で改行することが可能である。 また、空白も適当に入れて構わない。 この辺りのことについては、反復やふつうの条件分岐と同じである。 また、casedefault などの分岐ラベルは、きちんと1行に書か なければいけない。 よって、

    switch{
        case n > 0  &&
             m > 0:
                    print n*m > 0
        case n < 0: print n < 0
    }

のような書き方は不正である。

ここで、if tex2html_wrap_inline2587 else if tex2html_wrap_inline2589 else  を使っ て多重条件分岐を書く場合について述べておこう。 次の例を見てほしい。

    if(x>0)
        return 1
    else if(x=0)
        return 0
    else
        error
    }

これは switch を使って、

    switch{
        case x>0:
            return 1
        case x=0:
            return 0
        default:
            error
    }

と書いたのと全く同じ結果となる。

tex2html_wrap2607

但し、次のように、else if の間に改行をいれてしまうと、これは if tex2html_wrap_inline2593 else if tex2html_wrap_inline2595 else とは見なされなくなってしまう。

    if(x>0)
        return 1
    else
    if(x=0)
        return 0
    else
        error

この場合の出力結果は次のようになる。 ただの if tex2html_wrap_inline2597 else 文のネストとなっている。

tex2html_wrap2609

このように、if文を使う時には注意が必要である。 思っていたのと違った形のPAD図が描かれた時には、ここに書いてあることを 思い出して、もう一度見直してみてほしい。 逆に、これらをうまく使うと、場合によって出力の形を変えてみることも可能に なる。

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

プログラムのPAD図自動描画ソフト pad2ps に戻る。
吉田 誠一のホームページ に戻る。
Copyright(C) Seiichi Yoshida (comet@aerith.net). All rights reserved.
Sat Nov 9 21:27:17 JST 1996