擬似言語の and・or・not|条件式の読み方と否定の境界【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-10-17

前回は、数を計算する演算子の順番を見ました。今回は真か偽かを扱う論理演算子です。and / or / not の3つしかありませんが、if と while の条件は、ほぼこの3つで組み立てられています。

期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円2,600円中身を見る ›

この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 でつながれているとき、繰返しが終わるのは「どちらか片方が成り立たなくなったとき」になります。両方だめになるまで続くわけではありません。

実際の出題にも、この形の繰返しがあります。i > n1 と j > n2 のどちらか一方でも成り立った時点で抜けます。

出典:令和6年度 基本情報技術者試験 科目B 公開問題 問4(プログラムの一部)

  while ((i ≦ n1) and (j ≦ n2))

次のプログラムを実行して繰返しを抜けたとき、i と j の値はいくつですか。

整数型: i ← 1
整数型: j ← 1
while ((i ≦ 3) and (j ≦ 5))
  i ← i + 1
  j ← j + 3
endwhile

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行目に注目してください。

「少なくともどちらか一方」と読むと間違えません。

and と or を取り違えないための覚え方

  1. 数の少ないほうを覚える。and は真が1通り、or は偽が1通り
  2. 条件式を見たら、まずその1通りに当てはまるかを調べる
  3. 当てはまらなければ、答えは残りのほうで確定する

4通りを全部覚える必要はありません。覚えるのは、演算子ごとに1行だけです。

繰返しが while ((x ≠ 0) or (y ≠ 0)) で始まっています。この繰返しを抜けるのは、どんなときですか。

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 もとでは中、否定すると外

否定しても、境界はどちらかに必ず属する

> の否定は ≦、≧ の否定は <。等号が反対側へ移るだけです。

等号ごと消してしまう(> の否定を < にする)のが、いちばん多い読み違いです。

次のプログラムを、score に 59,60,61 をそれぞれ入れて実行します。hantei に “再試” が入るのは、どの場合ですか。

整数型: score
文字列型: hantei ← "合格"
if (not (score ≧ 60))
  hantei ← "再試"
endif

1行ずつ動かして確かめる

3つとも、動かして見たほうが早く入ります。3行目と4行目は同じ2つの条件から作り、5行目はそのうち1つを否定します。演算子で答えがどう変わるかを見てください。

真偽はどう組み立てられるか ── and / or / not

当サイトオリジナル


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

「片方だけ調べて打ち切る」とは決められていない

プログラミング言語によっては、A and B の A が偽だった時点で B を調べずに打ち切ります。擬似言語の記述形式には、この打ち切りについての定めがありません。

公開されている問題で確かめたかぎり、and の条件はどちらで解釈しても答えが同じです。両方を評価するつもりで読んでください。

かっこが無いとき、どう解釈されるか

実際の出題では、条件のひとつひとつにかっこが付いているのがふつうです。それでも、かっこ無しで書かれた例があります。

出典:令和6年度 基本情報技術者試験 科目B 公開問題 問1(解答群ウ)

x > y and y > z

G8-1 で見た優先順位の表では、関係演算子(> = など)の優先順位が and より高くなっています。だからこの行は (x > y) and (y > z) ── 「x は y より大きく、しかも y は z より大きい」と読みます。

かっこが無い場合の解釈

x > y and y > z→ (x > y) and (y > z)

and はすでに出そろった真偽をつなぐ演算子なので、比較より先に働くことはありません。

表では not(単項演算子)の優先順位がさらに高く、or がいちばん低くなっています。ただ、公開問題でかっこ無しの例が出たのは、この令和6年度 問1 の解答群だけ(イ・ウ・オの3つ)で、or や not をかっこ無しで混ぜた形は出ていません。

かっこの無い条件式は、計算(+ × mod など)→ 比べる(ここで真偽が出そろう)→ and でつなぐ、の順に片づけます。

擬似言語の〔演算子と優先順位〕から、この問いに使う行を抜き出すと、こうなっています。

優先順位(上の行ほど高い)

乗除mod × ÷

加減+ -

関係≠ ≦ ≧ < = >

論理積and

論理和or

条件式に x + 1 > y and z = 0 と書かれていました。どう解釈されますか。

つまずきポイントまとめ

まちがえ方 正しい理解
or を「どちらか片方だけ」と読む 少なくともどちらか一方。両方とも真でも真
and の繰返しが「両方だめになるまで続く」と思う 片方が偽になった瞬間に全体が偽。そこで抜ける
x > 5 の否定を x < 5 とする 正しくは x ≦ 5。等号が反対側へ移るだけ
not が後ろ全体に効くと思う 後ろの1つだけ。広く否定したいときは not (…) とかっこで囲む
片方が偽なら残りは読まれないと決めつける 記述形式に打ち切りの定めは無い。両方を評価するつもりで読む

次に読む

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。

シミュレータと練習問題は当サイトのオリジナルです。

タイトルとURLをコピーしました