今回はXORの説明と今までに作成した関数を切り取り、ヘッダーファイルにするという事をやっていきます。
コードはこちら
XOR|排他的論理和
XOR、入力層1層・中間層1層・出力層1層の多重パーセプトロンとして考えることのできる排他的論理和をとても簡単に作っていきましょう。 プロトタイプ宣言を他の関数の下にして、int XOR(int p, int q);
関数のプログラムは~↓
int XOR(int p, int q){
return AND(OR(p,q)*W+b,NAND(p,q)*W+b);
}
こう! はい、完成。
XORは中間層にORとNANDの2つのニューロンを持ち、ANDという出力層を持つ多重パーセプトロンとして考えることができます。
なので今までに制作した関数を上記コードのように組み合わせることで簡単に作ることができちゃいます!
あとは、
printf("AND \t OR \t NAND \t NOR \t XOR\n");
printf("%d \t %d \t %d \t %d \t %d\n\n",AND(in1,in2), OR(in1,in2), NAND(in1,in2), NOR(in1,in2), XOR(in1,in2));
というように論理式の結果を表示する部分を上記のようなプログラムに書き換えて表示させてみましょう。
今回追加した分は「firstprogX」として新しいアプリを作っています。
XORが実現できました~!
ヘッダーファイルの作成
多重パーセプトロンになってくるとプログラムが大きくなってしまうので複数のプログラムに分けようと思います。 ひとまず、今回制作した論理回路の関数を切り取ってみましょう。関数の切り取り
本来ならば、ヘッダーファイル(logic.h)とその関数を記述したサブプログラムファイル(logic.c)を作って分割コンパイルするのがいいのでしょうが、個人的にはヘッダーファイルにまとめてしまいます。 ここはそれぞれのやり方でファイルを作成してくださいね。切り取り自体は簡単です。
今までのプログラムコードですと下に書いていた関数群を選択し、そのままCtrl+xで切り取って
新しくlogic.hなどというファイルを作成、貼り付けて
それらのコードの上の行に
# ifndef LOGIC_H //二重インクルード防止
# define LOGIC_H
# define W 1
# define b 0
を記述すればヘッダーファイルは完成です。
あとはメインのプログラムから重みとバイアスの定義・プロトタイプ宣言の行を削除して、#include "logic.h"
で作成したヘッダーファイルをインクルードするよと記述して完了です。
今回のプログラムは「secondprog.c」としました。
コンパイルと実行の様子はこのような感じです。