冬期講習 2026-2027、募集中。総復習は売りません。90分×完全1対1で、穴だけを塞ぎます 詳しく →
電話 0422-27-7828チャットで質問無料相談を予約

武蔵野個別指導塾の特徴

高校情報I 論理回路の合成—途中の信号を表にして条件式と回路を往復する|武蔵野個別指導塾

学習のイメージ写真 武蔵野個別指導塾
X LINE Facebook

3入力の通知条件を中間信号に分け、否定の範囲と等価性を全入力でたどる題材は論理回路の合成です。

よくあるのは、NOTを一つの入力だけに掛けてしまう場面です。例えば「2つのセンサーのどちらも反応していない」を作るとき、先に2つをORでまとめてから否定するのか、一方だけを否定するのかで、通知される状況が変わります。線の途中に名前を付け、その値を表に残すと、どこで意味が変わったかを追えます。

通知条件をどう問われるか

論理回路の合成では、文章から回路を作る、回路から式を読む、2つの回路が同じ働きをするか調べるという問い方があります。どの場合も、まず入力の1と0が何を意味するかを決めます。ここでは1を条件が成り立つ状態、0を成り立たない状態とします。出力も1なら通知、0なら通知しません。センサーの電気的な仕組みや故障の確率は扱わず、与えられた0と1について論理的な関係を考えます。

3入力なら、それぞれに0と1があるので入力の組は8通りです。表の全行で最終出力が一致すると、その3入力について2つの回路は論理的に等価です。一部の行だけ一致しても等価とはいえません。中間信号が違っていても最終出力が一致することはありますから、何を比較するかも明確にします。

線に名前を付ける

ANDは両方が1のとき1、ORは少なくとも一方が1のとき1、NOTは0と1を反転します。回路を合成するときは、ある回路の出力を次の回路の入力へ渡します。入力から出力へ線をたどり、分岐した信号には同じ値が届くものとして考えます。

図1のように、AとBをORに入れた出力をP、そのPをNOTに入れた出力をQと名付けます。Qは「AまたはB」の全体を否定した値です。図1ではNOTの入口がPなので、Aだけを反転しているわけではありません。括弧を使えば P = A or B、Q = not P と表せます。

図1 ORの出力全体を否定する中間信号の流れ

式を回路へ移すとき、括弧の内側を先に回路化します。回路から式へ戻すときは出力側から入口をたどり、その部品へ入る信号を括弧でまとめます。例えば not (A or B) はAとBをORに入れ、その出力をNOTに入れる形です。一方、(not A) or B はAを反転してからBとORに入れる別の形です。

「AまたはBが成り立つ」を否定すると、「AもBも成り立たない」になります。これは not (A or B) と (not A) and (not B) が等価というド・モルガンの法則です。両方の入力を否定した後はORではなくANDに変わります。逆に not (A and B) は (not A) or (not B) と等価です。言葉だけで覚えず、全入力で確かめます。

A B | A or B | not (A or B) | not A | not B | (not A) and (not B)
0 0 |    0   |       1      |   1   |   1   |          1
0 1 |    1   |       0      |   1   |   0   |          0
1 0 |    1   |       0      |   0   |   1   |          0
1 1 |    1   |       0      |   0   |   0   |          0

各行の2つの結果が一致します。もう一方も、入力00、01、10、11の順に not (A and B) が1、1、1、0であり、(not A) or (not B) も1、1、1、0です。2入力の全4行を尽くしたため、この入力の範囲では例をいくつか試す以上の確認になります。

基本例題:無反応かつ受付中なら通知

展示室でAとBをそれぞれ2か所の反応、Cを受付中の印とします。いずれも1が成り立つ状態です。AとBがどちらも反応しておらず、かつ受付中のとき通知する回路を設計し、全8行の中間信号と出力を0か1で答えてください。入力は0か1に限り、同じ値の入力も許します。PをAとBのOR、QをPのNOT、YをQとCのANDとします。

図2のように、OR、NOT、ANDの順につなぎます。AとBがともに0のときだけPは0になり、Qは1です。その上でCが1のときだけYが1になります。先に手で考えると通知するのは入力001の1行で、他の7行は通知しません。ここで001はA、B、Cの順です。

図2 3入力の通知条件を中間信号で分けた回路
A B C | P | Q | Y
0 0 0 | 0 | 1 | 0
0 0 1 | 0 | 1 | 1
0 1 0 | 1 | 0 | 0
0 1 1 | 1 | 0 | 0
1 0 0 | 1 | 0 | 0
1 0 1 | 1 | 0 | 0
1 1 0 | 1 | 0 | 0
1 1 1 | 1 | 0 | 0

例えば011の行では、Bが反応しているためPは1、Qは0です。受付中でもQとCのANDは0です。000の行では無反応ですが受付中ではないため出力は0です。001を場面に戻すと2か所は無反応で受付中なので、出力1は条件を満たします。

次の自作プログラムで全行を照合します。PythonのFalseとTrueをそれぞれ0と1へ変換して表示します。

for a in (0, 1):
    for b in (0, 1):
        for c in (0, 1):
            p = a or b
            q = not p
            y = q and bool(c)
            print(a, b, c, int(p), int(q), int(y))

外側から順にa、b、cへ0と1を代入します。各組でpにOR、qにその否定、yにqとcのANDを保存し、最後の行で入力と中間値と出力を表示します。bool(c)は0か1を真偽値に変えるために使います。各ループは2個の値を順に処理し終えると終了するため、8行で止まります。

実行環境はPython 3.14.8を使いました。入力はコード内の0と1の全組で、期待する出力は上表の6列です。実際の出力も行の区切りを除けば上表と一致しました。式から手で得た通知行と一致することも確認しています。

標準例題:回路を書き換えて同じ通知にする

基本例題のYを、ORの直後にNOTを置かない形へ直してください。答えは式とし、元の回路と全入力で等価か述べます。NOTの対象はAとBのそれぞれです。

答えは Y = (not A) and (not B) and C です。元のQをド・モルガンの法則で置き換えました。AとBを別々に反転し、それらをANDに入れ、さらにCとANDで結びます。元のQと新しい2入力ANDの結果は先ほどの4行で一致し、Cが0なら両方のYは0、Cが1なら両方のYは一致した中間値になります。したがって8行の最終出力も一致します。

AとBがともに1なら個別のNOTは0と0なので新しいANDは0です。ともに0なら1と1で1になり、その後Cの値が出力を決めます。回路の見た目が違っても、線をつなぐ単位で値を比較すれば、同じ条件を実現していることを説明できます。

発展例題:通知しない条件から設計する

別の記録装置でDを点検中、Eを停止中、Fを運転許可とします。いずれも1がその状態を表します。点検中または停止中なら通知せず、どちらでもなく運転許可があるとき通知します。式を2通り作り、D、E、Fの順の全8組の出力を答えてください。

式は not (D or E) and F と (not D) and (not E) and F です。前半は「通知しない理由がある」をORで作ってから反転し、許可とANDで結びます。後半は点検中でないことと停止中でないことを個別に確かめます。出力は000から111の順に0、1、0、0、0、0、0、0です。通知する001を場面へ戻すと、点検も停止もなく、運転許可があります。

入力の意味を取り違えると、同じ式でも別の装置を表します。例えばEの1を「停止していない」と定義するなら、元の文章に対応する式は変わります。まず各入力の1の意味を確定し、否定が表す状態を言葉で書いてから線を引くことが必要です。

誤答を行で見つけて直す

基本例題で、誤って Y = (not A) or B and C としたとします。Pythonではandがorより先に評価され、これは (not A) or (B and C) です。Aだけを否定し、しかも最後の結合をORにしてしまっています。A、B、Cが000なら誤った式は1ですが、受付中でないので期待値は0です。001だけを試すとどちらも1になるため、誤りは隠れます。

図3のように000をたどると、AのNOTが1になり、最後のORを通って1が出ます。原因は否定する範囲と最終結合の両方です。AとBのOR全体を否定し、その結果をCとANDで結ぶよう修正します。修正後の000はPが0、Qが1、Yが0です。001も再実行して1を保つことを確認します。

図3 誤った結合と修正後の信号を比較する図

誤った式で010を試すと1、正しい式は0です。一方100では両方0です。失敗した行と一致した行の両方を残すと、一つの反例で修正した後に別の条件を壊していないか調べられます。NOTをAだけに掛けた式 not A or B と、正しい not (A or B) も、入力01で前者1、後者0となり区別できます。

自分で試す5問

各入力は0か1、1はその条件が成り立つことを表します。式の答えは括弧を含め、表の答えは指定された順に0か1で示してください。

  1. Xを扉が開いている、Yを音が鳴っているとします。どちらも成り立たない条件を、ORとNOTを使う式と、ANDと個別のNOTを使う式で表してください。
  2. Gを準備完了、Hを係が在席とします。両方が同時に成り立つわけではない条件を、NOTとANDを使う式で表し、入力00、01、10、11の順に出力を答えてください。
  3. Jを照明点灯、Kを換気作動、Lを点検許可とします。照明と換気の少なくとも一方が動き、かつ点検許可があるときの出力を、入力000から111の順に答えてください。
  4. Mを資料あり、Nを掲示中とします。正しい条件は「どちらも成り立たない」です。誤式 (not M) or N と正しい式の出力が異なる入力を、全4組から選んでください。
  5. Rを通路使用中、Sを保守中、Tを係の許可とします。使用中でも保守中でもなく、係の許可があるときの通知式を作り、100と001の出力をそれぞれ答えてください。

答えと照合

  1. not (X or Y) と (not X) and (not Y) です。00ならどちらも1、01、10、11ならどちらも0です。00を扉も閉じて音も鳴らない場面へ戻すと、求める条件に合います。
  2. not (G and H) で、出力は1、1、1、0です。00では両方とも成り立たず、01と10では一方だけなので、いずれも「両方が同時」ではありません。11では同時に成り立つので否定後は0です。
  3. (J or K) and L で、出力は0、0、0、1、0、1、0、1です。例えば011は換気が作動し点検許可があるため1です。110は両方動いていても許可がないため0です。
  4. 01と11です。正しい式 not (M or N) の出力は00、01、10、11の順に1、0、0、0です。誤式の出力は1、1、0、1です。異なる2行はいずれも掲示中なので、どちらも成り立たない条件を満たしません。
  5. not (R or S) and T です。100では使用中なので0、001では使用も保守もなく許可があるので1です。入力に戻して通知の条件を確認すると、2つの結果はそれぞれの場面に合います。

これらは入力の全組を列挙する単純な処理でも照合できます。2入力は4組、3入力は8組であり、列挙する順序を変えても各組の結果は変わりません。複数の入力が同じ0や1である場合も、別々の入力線として扱います。

検証の記録と失敗時の扱い

表の実行では0と1以外を入力として受け取らず、空配列や未発見を返す探索も行いません。従って空配列、単一要素、未発見という条件はこの回路の入力仕様には該当しません。3本の入力がすべて0、すべて1、同じ値を含む組は表に含まれます。入力線が欠けた場合や2などが渡された場合は、有効な信号として解釈せず入力を作り直します。Pythonの真偽値変換は2も真とみなすので、入力検査なしで任意の整数に対象を広げてはいけません。

実行中に例外が起きたときは、その時点の出力だけで合格とせず、エラーの行と入力を確認します。表が8行出る前に時間切れになった場合も、出力が途中まで正しくても検証未完了です。例えば実行環境が使えない場合には手計算の表を残し、実行値と照合したと主張せず、環境の回復後に全行を再実行します。壊れた表や途中で途切れた出力も、行数と入力の重複を調べてから作り直します。

外部の変換道具が図を表示できない場合、変換の失敗を回路の正しさの証明には使えません。SVGの線の接続と本文の式を別に照合し、表示できる環境で文字の重なりも確かめます。成功した場合にも、出力の一致だけでなく入力の全組と途中列を照合します。失敗した場合にも、どの条件を確認できていないか記録して再試行します。

要点

入力の1と0の意味を先に決めます。 中間出力を列に分け、NOTの入口を確認します。 2入力は4行、3入力は8行で全組を照合します。 等価な回路でも中間信号と最終出力は区別します。

どこでつまずいたかを見分ける

表のPが違うならORの入力か意味を、Pが合ってQが違うならNOTの範囲を見直します。Qまで合ってYが違うなら最後のANDとCの対応を調べます。個別指導では、本人に各線の1が表す状態を言葉にしてもらい、000と001の違いを処理表のどの列に書いたか確認します。

回路から式を読むときは出力側から入口を指さし、括弧で囲む範囲を説明してみます。式から回路を描くときは先に内側の処理を描き、中間信号の名を付けます。1行の食い違いをたどれば、否定の届く範囲が見えてきます。

読んで終わりにするか、ここから変えるか。

武蔵境駅徒歩30秒、講師1人に生徒1人の完全1対1。授業のあいだ、先生は隣を離れません。いまの詰まりを、無料相談でそのまま話してください。

まず15分だけ電話で話したい方は、無料電話相談(15分)から。塾からお電話を差し上げます。

本気になった日が、入塾の日。

お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。

電話は年中無休。365日、24時間、お電話可能。

チャットで質問チャット
無料相談を予約する 電話 0422-27-7828電話 LINE チャット
で質問