Next: 例外処理 Up: 条件分岐を描く Previous: ふつうの条件分岐 |
多重条件分岐多重条件分岐には、ふつう switch 文を使う。 まずは例をみてほしい。これは符号を返す関数である。
switch{ case x>0: return 1 case x=0: return 0 case x<0: return -1 }
このように、分岐先が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 } }
case や default の条件式の中身を省略し、その条件に当てはまる 場合には何もしないことを表すこともできる。 その場合には、条件式の後に空行のみを入れる。 例えば、 switch{ case x%3=0: case x%3=1: move(+1) case x%3=2: move(-1) } と書いて、
switch文でも、{ の前で改行することが可能である。 また、空白も適当に入れて構わない。 この辺りのことについては、反復やふつうの条件分岐と同じである。 また、case や default などの分岐ラベルは、きちんと1行に書か なければいけない。 よって、 switch{ case n > 0 && m > 0: print n*m > 0 case n < 0: print n < 0 } のような書き方は不正である。 ここで、if else if 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 } と書いたのと全く同じ結果となる。
但し、次のように、else if の間に改行をいれてしまうと、これは if else if else とは見なされなくなってしまう。
if(x>0) return 1 else if(x=0) return 0 else error この場合の出力結果は次のようになる。 ただの if else 文のネストとなっている。
このように、if文を使う時には注意が必要である。 思っていたのと違った形のPAD図が描かれた時には、ここに書いてあることを 思い出して、もう一度見直してみてほしい。 逆に、これらをうまく使うと、場合によって出力の形を変えてみることも可能に なる。
|
プログラムのPAD図自動描画ソフト pad2ps に戻る。 吉田 誠一のホームページ に戻る。 Copyright(C) Seiichi Yoshida (comet@aerith.net). All rights reserved. Sat Nov 9 21:27:17 JST 1996 |