前回は、数を計算する演算子の順番を見ました。今回は真か偽かを組み立てる演算子です。and / or / not の3つしかありませんが、if と while の条件は、ほぼこの3つで組み立てられています。
第1部 擬似言語の教科書 地図+20回
G1擬似言語の地図(入口)G2-1変数と宣言G2-2データ型G2-3代入「←」G3-1部品を呼ぶ/戻るG3-2引数G3-3戻り値・手続と関数G4-1配列と要素番号G4-2配列の読み書きG5選択処理 ifG6-1繰返し forG6-2配列を for で回すG7繰返し whileG8-1算術演算子と優先順位G8-2and / or / notG9-12次元配列G9-22重ループG10大域変数と局所変数G11未定義G12-1演算子 . の読み方G12-2クラスとはG12-3コンストラクタ
この3つは真か偽かを受け取って、真か偽かを返す演算子です(論理型の値、つまり true,false を扱います)。
and ── 真になるのは1通りだけ
A and B は「A かつ B」と読みます。両方とも真のときだけ、全体が真になります。
材料の組は4通りしかないので、全部あげてしまいます。
A と B の組は4通りしかない
A が真、B が真→ 真
A が真、B が偽→ 偽
A が偽、B が真→ 偽
A が偽、B が偽→ 偽
真になるのはいちばん上の1通りだけ。残りの3通りはすべて偽です。
ここから、実戦で効く読み方が出てきます。
and を偽にするのは簡単、真にするのは大変
片方が偽だと分かった時点で、全体は偽です。もう片方を確かめる必要はありません。
だから while の条件が and でつながれているとき、繰返しが終わるのは「どちらか片方が成り立たなくなったとき」になります。両方だめになるまで続くわけではありません。
実際の出題に、次の1行があります。この繰返しを抜けるのはどんなときですか。
while ((i ≦ n1) and (j ≦ n2))
引用元:令和6年度 基本情報技術者試験 科目B 公開問題 問4(プログラムの一部)
or ── 偽になるのは1通りだけ
A or B は「A または B」。どちらか一方でも真なら、全体が真です。
同じ4通りを、or で見る
A が真、B が真→ 真
A が真、B が偽→ 真
A が偽、B が真→ 真
A が偽、B が偽→ 偽
偽になるのはいちばん下の1通りだけ。残りの3通りはすべて真です。
and とちょうど裏返しになっています。and は真になるのが1通り、or は偽になるのが1通り。
日本語の「AまたはB」はどちらか片方に聞こえますが、or は両方とも真でも真です。1行目に注目してください。
「少なくともどちらか一方」と読むと間違えません。
真になる組み合わせを、数の少ないほうで覚える
真か偽かの組み合わせは、2つの条件なら4通りしかない
A and B 真になるのは1通りだけ
| A | B | A and B |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 偽 |
| 偽 | 真 | 偽 |
| 偽 | 偽 | 偽 |
両方とも真のときだけ真
A or B 偽になるのが1通りだけ
| A | B | A or B |
|---|---|---|
| 真 | 真 | 真 |
| 真 | 偽 | 真 |
| 偽 | 真 | 真 |
| 偽 | 偽 | 偽 |
1行目に注目。両方とも真でも真。日常語の「または」より広い
and は真が1通り、or は偽が1通り。少ないほうを覚えて、当てはまるかだけ調べる
and と or を取り違えないための覚え方
- 数の少ないほうを覚える。
andは真が1通り、orは偽が1通り - 条件式を見たら、まずその1通りに当てはまるかを調べる
- 当てはまらなければ、答えは残りのほうで確定する
4通りを全部覚える必要はありません。覚えるのは、演算子ごとに1行だけです。
(x = 1) or (y = 1) という条件式が偽になるのは、どんなときですか。
not ── 裏返すと、境界がどちらへ入るか
not A は「A でない」。A が偽のときに真になります。受け取るのは後ろの1つだけで、この形を単項演算子といいます。
難しいのは意味ではなく、裏返したときに境界の値がどちらへ入るかです。
not (x > 5)
x > 5 は「5 より大きい」=5 を含みません。これを裏返すと「5 より大きくない」=5 以下になり、5 が入ってきます。x < 5 ではありません。それだと 5 がどちらにも属さなくなってしまいます。
| もとの条件 | 裏返すと | 境界の値(5)は |
|---|---|---|
x > 5 |
x ≦ 5 |
もとでは外、裏返すと中 |
x ≧ 5 |
x < 5 |
もとでは中、裏返すと外 |
x = 5 |
x ≠ 5 |
もとでは中、裏返すと外 |
裏返しても、境界はどちらかに必ず属する
> の否定は ≦、≧ の否定は <。等号が反対側へ移るだけです。
等号ごと消してしまう(> の否定を < にする)のが、いちばん多い読み違いです。
not (x > 5) が真になるのは、x がどんなときですか。
1行ずつ動かして確かめる
3つとも、動かして見たほうが早く入ります。まったく同じ2つの条件から、and と or と not で答えがどう変わるかを見てください。
真偽はどう組み立てられるか ── and / or / not
当サイトオリジナル
ループ開始前
いま計算していること
変数の状態
結果
トレース表(進めると1行ずつ積み上がります)
プログラミング言語によっては、A and B の A が偽だった時点で B を調べずに打ち切ります。擬似言語の記述形式には、この打ち切りについての定めがありません。
実際の出題はどちらで解釈しても答えが同じになるように作られています。両方を評価するつもりで読んでください。
かっこが無いとき、どう解釈されるか
実際の出題では、条件のひとつひとつにかっこが付いているのがふつうです。それでも、まれにかっこ無しで書かれることがあります。
優先順位の表では、下から or・and の順に並び、not は上の単項演算子の段にいます。つまり not がいちばん先、次に and、最後に or です。
かっこが無い場合の解釈
A or B and C→ A or (B and C)
not A and B→ (not A) and B
さらに、比べる演算子(> = など)は and より先です。and はすでに出そろった真偽をつなぐ演算子なので、比較より先に働くことはありません。
かっこの無い条件式を読む手順
- 計算を先に片づける(
+×modなど) - 次に比べる(
>≦=…)。ここで真偽が出そろう notを後ろの1つに効かせるandでつなぎ、最後にorでつなぐ
順位を暗記して勝負するより、この順で1つずつ片づけるほうが速く、間違えません。
擬似言語の〔演算子と優先順位〕では、段がこう決まっています。
優先順位(上の段が先)
乗除・加減× ÷ mod + -
関係= ≠ < > ≦ ≧
論理積・論理和and or
つまり計算が先、くらべるのが次、and・or が最後です。
条件式に x + 1 > y and z = 0 と書かれていました。どう解釈されますか。
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
or を「どちらか片方だけ」と読む |
少なくともどちらか一方。両方とも真でも真 |
and の繰返しが「両方だめになるまで続く」と思う |
片方が偽になった瞬間に全体が偽。そこで抜ける |
x > 5 の否定を x < 5 とする |
正しくは x ≦ 5。等号が反対側へ移るだけ |
not が後ろ全体に効くと思う |
後ろの1つだけ。not A and B は (not A) and B |
| 片方が偽なら残りは読まれないと決めつける | 記述形式に打ち切りの定めは無い。両方を評価するつもりで読む |
次に読む
この記事で引用した資料
- 擬似言語の記述形式 科目Bの公開問題・サンプル問題の各冊子に掲載。冊子上の名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
シミュレータと練習問題は当サイトのオリジナルです。

