「すぐわかるPerl」3.3 「かつ(and)」と「または(or)」
■■「かつ」は論理積and
1.4で割り切れない年はうるう年ではない
2.4で割り切れkるとしは売る疎し
3.しかし、100で割り切れる年はうるう年ではない
4.しかし、400で割り切れる年はうるう年
この順番で書いた場合のスクリプトは間違い。なぜなら、1000などの100で割り切れる数もうるう年と判定してしまうため。
#! C:\Perl\bin\perl -w
# uruu -- うるう年判定(間違い)
$n = 1000;
if (($n % 4 ) != 0){
print "uruu doshi denai";
}elsif (($n % 4) ==0){
print "uruu dosi";
}elsif (($n % 100) == 0){
print "uruu dosi denai";
}else (($n % 400) == 0){
print "uruu doshi";
}計算結果
C:\Documents and Settings\sironekotoro\デスクトップ>perl perlsample
uruu dosi
正しく式を構成するためには、下記のように考え直す。
1.4で割り切れない年はうるう年で無い
2.4で割り切れ、かつ100で割り切れない年はうるう年
3.100で割り切れ、かつ400で割り切れない年はうるう年でない
4.1~3いずれにも当てはまらないのはうるう年
「かつ」=二つ以上の条件が両方成立する場合。論理積。
#! C:\Perl\bin\perl -w
# uruu -- うるう年判定
$n = 2004;
if (($n % 4 ) != 0){
print "uruu doshi denai";
}elsif (($n % 4) ==0 and ($n % 100) != 0) {
print "uruu dosi";
}elsif (($n % 100) == 0 and ($n %400) == 0){
print "uruu dosi denai";
}else {
print "uruu doshi";
}C:\Documents and Settings\sironekotoro\デスクトップ>perl perlsample
uruu dosi
「and」は == や != よりもゆるく結合するため、and以外の演算子を評価してから結合する。
■「または」は論理和or
うるう年の条件を更にまとめる。
1.「4で割れない年」または「100で割り切れ、かつ400で割り切れない年」はうるう年ではない。
2.1の条件に当てはまらない年はうるう年
if (($n % 4 ) != 0 or ($n % 100) =0 and ($n % 400) != 0 {
print "uruu de nai";
} else {
print "uruu dosi";
}
andはorよりも強く結合する。上記の式は
if(条件1) or ((条件2)and(条件3))
if ((条件A) and (条件B) or (条件C)){
命令;
}
| 条件A | 条件B | 条件C | 命令 |
|---|---|---|---|
| ○ | ○ | ○ | 実行される |
| ○ | ○ | × | 実行される |
| ○ | × | ○ | 実行される |
| ○ | × | × | 実行されない |
| × | ○ | × | 実行されない |
| × | × | ○ | 実行される |
| × | × | × | 実行されない |
まず、「A かつ B」という複合条件が成り立つかどうか、その後に「A かつ B」と「C」のどちらか一方、または両方が成り立つかどうかを考える。
and回路のor結合
if ((条件A) and ((条件B) or (条件C))){
命令;
}
| 条件A | 条件B | 条件C | 命令 |
|---|---|---|---|
| ○ | ○ | ○ | 実行される |
| ○ | ○ | × | 実行される |
| ○ | × | ○ | 実行される |
| ○ | × | × | 実行されない |
| × | ○ | × | 実行されない |
| × | × | ○ | 実行されない |
| × | × | × | 実行されない |
この場合には、「B または C」が成り立つかどうかを先に考え、その後に「B または C」と「A」が両方成り立つかを考える。
or回路のand結合
コレは後ほど。
| 固定リンク
「Perl」カテゴリの記事
- 「すぐわかるPerl」 8.10 ディレクトリのリカーシブ処理(その2)(2009.02.24)
- 「すぐわかるPerl」 8.10 ディレクトリのリカーシブ処理(その1)(2009.02.23)
- 「すぐわかるPerl」 7.6 マッチした文字列と、その前後の文字列を扱う変数(2008.06.17)
- 「すぐわかるPerl」 8.9 コマンドの入出力に入出力を切り替える(2008.11.12)
- 「すぐわかるPerl」 8.8 標準入出力以外のファイルの制御(2008.10.08)









コメント