目次
前
次
ハードウエアテスト(その10)
デジタル回路では、ゲートICをよく利用しました。
AND、OR、NAND、NOR、排他的論理和等のゲートICを
組み合わせ、所望の回路を構成します。
2入力1出力の論理演算を、コンピュータがクイズ形式で
出題して、人間が答えるシステムを作成してみます。
2変数X、Yにコンピュータが論理値を入力し、演算結果を
人間が答えるという仕様にしましょう。
乱数を利用して、2変数X、Yに論理値を入力し、さらに
論理演算種別も乱数で指定するとします。
論理値は、0か1なので、乱数で2を超えない整数を
発生させればよいでしょう。また、演算種別は5種と
なるので5を超えない整数を発生させて対応します。
演算種別は、次のように決めました。
2変数X、Yの論理値から論理演算結果を求める
サブルーチンを定義します。
200 ' logical computing
210 LET [0],X & Y
220 LET [1],X | Y
230 LET [2],X ^ Y
240 LET [3],[0] ^ 1
250 LET [4],[1] ^ 1
260 RETURN
配列の[0]から[4]に個々の演算結果を代入して
コンピュータ側は、答を求めてしまいます。
2変数X、Yの論理値は、次のように求めます。
LET X,RND(2) : LET Y,RND(2)
演算種別は、0から4のいずれかの整数なので
次のように指定できます。
LET C,RND(5)
2つの論理値を演算種別を求める処理は、次の
ように定義すればよいでしょう。
20 LET X,RND(2) : LET Y,RND(2) : LET C,RND(5)
2つの論理値と演算種別を人間に示すのは
PRINT(?)を使えばよいでしょう。
30 IF C=0 ? X,Y,"? AND "
40 IF C=1 ? X,Y,"? OR "
50 IF C=2 ? X,Y,"? XOR "
60 IF C=3 ? X,Y,"? NAND "
70 IF C=4 ? X,Y,"? NOR "
人間の方はINPUTで入力すればよいはず。
80 INPUT "YOUR ANSER",A
コンピュータは正解を計算して、人間の入力と
比較して正解、不正解を判断すればよいでしょう。
90 GOSUB 200
100 IF [C]=A ? "correct !" ELSE ? "wrong !"
永久に続けることはできないので、終了処理を
入れておきます。
80 INPUT "YOUR ANSER",A
90 IF A=#45 or A=#65 GOTO 140
100 LET A,(A-#30)
110 GOSUB 200
120 IF [C]=A ? "correct !" ELSE ? "wrong !"
130 GOTO 20
140 ? "exit"
150 END
キーボードから入力した値は、'0'か'1'なので
16進数では、#30か#31。これを数値の0か1に
するため、100行目の処理を追加します。
まとめると以下。
10 ' test logical computing
20 LET X,RND(2) : LET Y,RND(2) : LET C,RND(5)
30 IF C=0 ? X,Y,"? AND "
40 IF C=1 ? X,Y,"? OR "
50 IF C=2 ? X,Y,"? XOR "
60 IF C=3 ? X,Y,"? NAND "
70 IF C=4 ? X,Y,"? NOR "
80 INPUT "YOUR ANSER",A
90 IF A=#45 or A=#65 GOTO 140
100 LET A,(A-#30)
110 GOSUB 200
120 IF [C]=A ? "correct !" ELSE ? "wrong !"
130 GOTO 20
140 ? "exit"
150 END
200 ' logical computing
210 LET [0],X & Y
220 LET [1],X | Y
230 LET [2],X ^ Y
240 LET [3],[0] ^ 1
250 LET [4],[1] ^ 1
260 RETURN
このプログラムは、人間の訓練に使います。
実際に、AND、OR、XOR、NAND、NORのゲートICを
ブレッドボード上において使う、トレーナーを
考えてみます。
論理値をゲートICに与え、ゲートICの出力値を
入力しておきます。これと人間の入力値を比較
して判定します。
論理値を乱数で生成して、変数X、Yに代入し
ゲートICに与えます。結果を変数Zに格納する
処理を作成して対応します。
20 LET X,RND(2) : LET Y,RND(2) : GOSUB 100
30 INPUT "YOUR ANSER",A
40 IF A=#45 or A=#65 GOTO 80
50 LET A,(A-#30)
60 IF Z=A ? "correct !" ELSE ? "wrong !"
70 GOTO 20
80 ? "exit"
90 END
サブルーチンは、論理値を出力してゲートICから
値を入力する処理を定義すればよいでしょう。
100 ' gate IC handling
110 ? X,Y,"? result"
120 OUT 1,X
130 OUT 2,Y
140 Z=IN(3)
150 RETURN
合体させて完成させます。
10 ' test gate IC
20 LET X,RND(2) : LET Y,RND(2) : GOSUB 100
30 INPUT "YOUR ANSER",A
40 IF A=#45 or A=#65 GOTO 80
50 LET A,(A-#30)
60 IF Z=A ? "correct !" ELSE ? "wrong !"
70 GOTO 20
80 ? "exit"
90 END
100 ' gate IC handling
110 ? X,Y,"? result"
120 OUT 1,X
130 OUT 2,Y
140 Z=IN(3)
150 RETURN
ラベルを利用すると、次のようにも書けます。
10 ' test gate IC
20 @LOOP
25 LET X,RND(2):LET Y,RND(2):GSB @GHND
30 INPUT "YOUR ANSER",A
40 IF A=#45 or A=#65 GOTO @EXIT
50 LET A,(A-#30)
60 IF Z=A ? "correct !" ELSE ? "wrong !"
70 GOTO @LOOP
80 @EXIT
85 ? "exit"
90 END
100 @GHND
110 ? X,Y,"? result"
120 OUT 1,X
130 OUT 2,Y
140 Z=IN(3)
150 RTN
ゲートICは、ブレッドボードに実装。
目次
前
次