先日は、

 

にて、プログラムと算数について書きました、処理においては数的な推移によって動いていますが、電子回路は信号のオンとオフだけで動いていますが、信号の状態を論理演算によって処理を行っているので、条件の判定を行う事が出来ます。

 

 今回は、回路とプログラムでの条件と判定について書こうかなと思います。

 

 

値の処理と判定                  

 

 電気工作で動作を制御する場合、信号の有無で判定を行う事になりますが、この時の処理は信号の状態とその組み合わせでどう動くのかで判定を行います。

 

 まず、信号については、

 

 

のような押しボタンで動作する物と、

 

 

のように接点を押している間は通電する物と、

 

 

のようにとフグるスイッチのように接点の位置を固定できるスイッチがあります。マイクラのレッドストーン回路も二値の判定なので、電子回路と同じような条件の判定で処理を行う事が出来るのですが、ジ烏有殿高い回路を組む事が出来ます。

 

 

 理演算回路                    

 

 信号の伝達は単体だけではありませんから、信号が複数ある場合、その組み合わせでどう動くのか?を判定します。この時に、論理演算を使用します。

 

■ OR回路                       

 

 二つの信号の組み合わせですが、

 

 

のような状態だと、

 

 

のようにいずれかの信号がオンの場合だと信号が出ます。当然、片方の信号が出ている状態でもう片方をオンにしてもオフにはなりませんから、両方がオフ以外の条件だと全て信号が出る条件委なります。

 

 これをもう少し解り易い作りにすると、

 

 

のようになります。これは、二つの信号の和が解になるので、論理和とも呼びます。

 

 

■ NOT回路                      

 

 交流信号だと極性があるので、極を反転できない物もありますが、モーターのように信号を反転させると逆回転する物もあります。この場合、回路内で信号の反転が出来る仕組みを作ると、主電源とは関係ない回路内での処理で信号を反転させることができます。この時に使うのが、NOT回路になります。マイクラでは、

 

 

のような感じになりますが、通常の物と対比すると、信号が反転している事が確認できます。この状態は真逆の結果になるので、否定をしている訳ですから、論理演算では論理否定とも言います。

 

 

■ NAND回路                     

 

 集積回路では、NAND回路を使った物が多いのですが、これはNAND回路を組み合わせるとほとんどの回路が作れるのでNAND回路を集積化した物を使います。ブレッドボードに刺して使用できるICにもNANDのICがあるので、それぞれが入出力になっているのですが、これが複数入った構造の物もあります。マイクラだと、

 

 

のような作りになりますが、AND回路の否定なので、

 

 

のように両方の信号がオンになった時にオフになります。その条件以外だとオンになります。NANDはフラッシュメモリーなどに使湧得rていますが、速度が遅く大容量化難しいのですが、フラッシュメモリーにはNOR回路を用いたものもあります。これはOR回路をNOT回路で反転させたものになりますが、両方がオフの時の信号が出る回路になります。

 

 NAND回路の信号を反転させたのがAND回路になりますが、

 

 

のように双方がオンの時に信号が出ます。この回路ですが、構成で状態が変わるのですが、

 

 

のようになっており、NANDを反転させたものがAND回路で、NAND回路の入力を統合した物がNOT回路になります。

 

 

■ XOR回路と加算器                 

 

電子回路でNAND回路を包含したモジュールを使う場合、こう言った使い方ができますが。マイクラの場合だと、小型化したモジュールが使えるので、

 

 

のような感じで小型化した物が使えるので、NANDベースで回路を組むのとは少し様子が違います。また、XORがこのサイズで作れるので、マイクラ内では、HA(半加算器)を作る場合、

 

 

のように作る事が出来ます。また、XORの前にNOTを付けるとXNORになりますが、

 

 

のようにするとその挙動になります。

 

 

■ 回路と組み合わせ                 

 

 論理演算回路は組み合わせることで複雑な処理ができますが、

 

 

のように桁の繰り上がりを使用できるHAも作れます。また、この杭合わせで、判定を行うための条件を構築できるのですが、

 

 

のようにすうると、条件AかBがオンの時に条件Cがオンになった時の実動く物を作れます。AND回路も組み合わせる事が出来ますが、複数のAND回路を組み合わせることもできます。

 

 

のようにすると、4つの条件が一致しないと動かない回路になりますし、条件が増えると、

 

 

のような感じで組み合わせることになります。その為、条件が増えると、回路をAND回路で繋ぐと条件式を組めるのです。この回路ですが、

 

 

のように状態を見やすいようにして動かすと、

 

 

のように片方だけだとANDの条件がクリアできていないので動作していませんが、

 

 

のようにANDの条件がクリアできると、一つ上のANDの条件がクリアされます。ただし、これも片方だけでは動作しないので、最上部は消えていません。ただし、下部のNADの二つから信号が出ると、

 

 

のようの上位のAND回路の片方が消えます。この条件では、右のAND回路から信号が出ていないので最終的な信号が出ていません。

 

 

■ 判定と処理                      

 

 条件の判定は信号で判断しますが、センサーなどで検知した物を参照して動作させることもあります。マイクラでもそう言ったセンサーがありますが、

 

 

の三つだと真ん中の感知版(や感圧版)が接触型のセンサーになります。

 

 これとは別に、

 

 

のような検知方法がありますが、こうした条件をどう使うのか?で挙動が変わってきます。例えば、OR回路を用いた場合、

 

 

のようになりますが、この場合、チェストの中にアイテムがあるか、レバーの信号が来た場合に動作するという条件判定になります。これに対し、AND回路を用いた場合、

 

 

のようになると、チェストにアイテムが入っていて、尚且つレバーから信号が送られている条件でなければ動作しません。

 

 その為、二値の判定を行うとしても、論理演算回路を用いることで条件の判定を行う事が出来ます。

 

 

 ログラミングの場合                

 

 プログラムを組む場合、元から10進数や複雑な処理は関数などで実装されているので、それを用いる事が出来ます。Scratchでも同様で、処理を行うためのブロックが用意されています。

 

 前述のように判定を行う場合、その状態変化を記録する必要がありますから、 【 変数 】 を用意します。これは、算数や数学で登場する 【 英文字を使用した任意の数値の代入可能な物 】 と同じです。

 

 

のように二つの変数を宣言すると、

 

 

のように画面内にも変数が追加され、実行画面にも

 

 

のように変数が表示できます。これは非表示にもできるのですが、変数を行う場合、プログラムが実行された後には変数が残ってしまうので、初期化を行って消す必要があります。

 

 Scratchを実行敷いている場合、挙動だけを指定したブロック構成にしてしまうと、その変数が維持されるので、原点や0からスタートすることはありませんから、足し算のプログラムを作って任意の数を10回足すような処理を行うと、その結果が維持された状態になります。最初の段階だと0からのスタートですが、2回目以降は変数が維持された状態でのスタートになりますから、0からの足し算という訳にはいきません。

 

 その為、プログラミングを行う場合には変数の初期化を行う事になります。

 

 

簡素な電気工作ではこう言った現象が発生しませんが、この理由は至極単純で、電気信号を維持する為には、ラッチやフリップフロップなどの回路を実装するか、集積されたメモリーを回路上に実装すなければデータの維持はされませんから、そう言った記録を行う構造にしていない限り、データの維持はされません。その為、メモリーの開放とか、初期値の設定と言う物はありません。

 

 変数の宣言をすると、その変数に対して処理を言実装するのですが、十進数が使用できるプログラミング言語では、二値以外の処理を最初から行えます。その為、

 

 

のようにループに特定の条件を組み込んで処理を行う事が出来ます。

 

 

今回は算術演算子を使いますが、

 

 

のようにすると、処理を実装できるので、ここに変数を入れていきます。

 

 

そして、

 

 

 

のようにすると加算が行えるのですが、数値については、定数だけではなく、乱数も使用できるので、

 

 

のような感じにすることもできます。この状態で、数値の推移をする挙動はできましたが、これは推移でしかないので、条件判定を入れます。この時に、プログラミング言語を用いると、複雑な判定を行えます。例えば、

 

 

のように条件の判定とその条件から外れた場合の処理を行うブロックもあるので、条件抽出を簡単に行う事が出来ます。

 

 

のように判定については2で割り切れる物を用意していますが、この条件で、偶数を判定できるので、それ以外は奇数なので、この処理を実装するだけで奇数と偶数の判定が行えます。これを、

 

 

のように組み合わせて、

 

 

のような形にして、🏴をクリックすると動くようにすると、

 

 

のように動作します。このプログラムでは、

 

    Aのループ

    Bのループ

    条件判定

 

と言う流れになっていますから、最初にAに10回乱数を発生させながら加算していき、その数値をBに足すような処理になります。その為、数値がこんな感じになっていますが、これを

 

 

 

    Aで乱数の生成をしてAに加算

    BにAを加算

 

      ▲ ここまでの処理を10回ループ

 

    条件判定

 

となるので、処理そのものが異なりますが、実行すると、

 

 

のようになります。このプログラムでは、判定時の結果を処理に適応できないので、この奇数と偶数と言う条件を使う場合には違う作りにする必要があります。

 

 

■ 判定結果を参照する                

 

 今回の条件の判定は、奇数と偶数と言う2つのみですから、これは二値で判定できます。そこで、この判定結果を変数として使用するように組み替えます。その為には、ブール値を格納する変数が必要なので、新規に変数を追加します。

 

 

今回は画像のように変数Cを追加しました。そして、先ほどの判定部分に

 

 

のようなブロックを追加します。これによって、偶数と奇数の判定を行うと、いずれかの条件でブール値が変数Cに格納されるようになります。この条件で、変数Cを別の場所から参照して使用できるようになりました。この場合、

 

    変数Cの値

    別の条件

 

の判定になりますから、レッドストーン回路で紹介した論理演算回路と同じ二つの条件での判定になりますから、これにAND(論理積)の条件を加えて

 

 

のような処理を実装する事が出来ます。変数や論理演算については、

 

 

のように演算のブロックでまとめられていますが、

 

 

のように

 

    AND(論理積)

    OR(論理和)

    NOT(論理否定)

 

のブロックが実装されています。この三つしかありませんが、組み合わせることで別の論理演算を行えます。これは、高校の数学I Aで出てくる 【 ド・モルガンの法則 】 で証明されていますが、この三つがあると、論理演算回路を組む事が出来ます。この三つを見ると、ORとANDの論理否定が出来るので、フラッシュメモリーで使用されているNORとNANDを作る事はできますが、以前、

 

■ Scratchを使う(使用方法と簡単なプログラム)

 

で加算器の振る舞いをする物を紹介しています。つまり、この三つの論理演算だけでXORを作れるので、HAを作る事が出来ますから、ブール値の処理を実装することで、二値で動く加算器を作る事が出来ます。その為、判定を行う時に、様々な論理演算を用いて処理を行う事が出来ます。

 

■ 値の指定                       

 

 判定を行う値ですが、

 

 

のような処理も可能ですが、数学で登場する関数も実装されており、

 

 

のように変数に対して三角関数なども使用する事が出来ます。