みなためラボ

【C言語】入力した論理回路の真理値表(全6種類)を表示するプログラム

文字サイズ

はじめに

どうも! みなため(@MinatameT)です。

この記事では、C言語でユーザーが入力した論理回路名に対応する「真理値表」を表示させるためのプログラムを紹介しています。

今回は、これまでの論理回路シリーズの総仕上げになっておりますので、不安のある方は以下の記事を見てください。全部で6種類あり、これらの知識を今回はすべて活用します

また、これらに加えて「文字配列」の知識も必要ですが、ここでは詳しく説明しません。

それでは、ソースコード(例)と実行結果(例)を確認していきましょう。

入力した回路の真理値表を表示するプログラムの例

ついに総仕上げですよー!

ソースコード

#include<stdio.h>

int main(void)
{
  int a,b,x;
  char table[5] = {0}; //配列の要素全体を0で初期化。

  printf("真理値表を表示します。回路名を入力してください\n");
  printf("(AND、OR、NAND、NOR、XOR、XNORの6種類です。)。>");
  scanf("%s",&table);

  printf("%s回路の真理値表(入力:A、B 出力:X)\n",table);
  printf("A B X\n");
  printf("------\n");
	
  if(table[0]=='A' && table[1]=='N' && table[2]=='D' && table[3]==0 && table[4]==0) //AND回路
  {
    for(a=0; a<=1; a=a+1)
    {
      for(b=0; b<=1; b=b+1)
      {
        x = a & b; //AND演算
        printf("%d %d %d\n",a,b,x);
      }
    }
  }

  else if(table[0]=='O' && table[1]=='R' && table[2]==0 && table[3]==0 && table[4]==0) //OR回路
  {
    for(a=0; a<=1; a=a+1)
    {
      for(b=0; b<=1; b=b+1)
      {
        x = a | b; //OR演算
        printf("%d %d %d\n",a,b,x);
      }
    }
  }

  else if(table[0]=='N' && table[1]=='A' && table[2]=='N' && table[3]=='D' && table[4]==0) //NAND回路
  {
    for(a=0; a<=1; a=a+1)
    {
      for(b=0; b<=1; b=b+1)
      {
        x = !(a & b); //NAND演算
        printf("%d %d %d\n",a,b,x);
      }
    }
  }

  else if(table[0]=='N' && table[1]=='O' && table[2]=='R' && table[3]==0 && table[4]==0) //NOR回路
  {
    for(a=0; a<=1; a=a+1)
    {
      for(b=0; b<=1; b=b+1)
      {
        x = !(a | b); //NOR演算
        printf("%d %d %d\n",a,b,x);
      }
    }
  }

  else if(table[0]=='X' && table[1]=='O' && table[2]=='R' && table[3]==0 && table[4]==0) //XOR回路
  {
    for(a=0; a<=1; a=a+1)
    {
      for(b=0; b<=1; b=b+1)
      {
        x = a ^ b; //XOR演算
        printf("%d %d %d\n",a,b,x);
      }
    }
  }

  else if(table[0]=='X' && table[1]=='N' && table[2]=='O' && table[3]=='R' && table[4]==0) //XNOR回路
  {
    for(a=0; a<=1; a=a+1)
    {
      for(b=0; b<=1; b=b+1)
      {
        x = !(a ^ b); //XNOR演算
        printf("%d %d %d\n",a,b,x);
      }
    }
  }

  else
  {
    printf("入力した回路の真理値表はありません。別の名称で試してください。\n");
  }

  return(0);
}

ここで、table[0]が(table配列の)1文字め、table[1]が2文字め、table[2]が3文字め、table[3]が4文字め、table[4]が5文字めに該当します。

それでは、実行結果を確認していきます。

実行結果の例

真理値表を表示します。回路名を入力してください
(AND、OR、NAND、NOR、XOR、XNORの6種類です。)。>XOR
XOR回路の真理値表(入力:A、B 出力:X)
A B X
------
0 0 0
0 1 1
1 0 1
1 1 0

今回は「XOR」を入力しました。すると、真理値表が正しく表示されました!

それでは、ifやelse ifの条件に該当しない回路名を入力してみます。

真理値表を表示します。回路名を入力してください
(AND、OR、NAND、NOR、XOR、XNORの6種類です。)。>HOT
HOT回路の真理値表(入力:A、B 出力:X)
A B X
------
入力した回路の真理値表はありません。別の名称で試してください。

このように、HOT回路という名前の論理回路は存在せず、条件に該当しませんので、「入力した回路の真理値表はありません。別の名称で試してください。」と表示されました。

今回で、論理回路の真理値表シリーズはおそらく最後です。ここまでの内容はあまり難しいものではないのですが、まずはお疲れ様でした。

他にも(プログラミングに限らず)さまざまな記事を上げておりますので、よろしければ見ていってください。

これで、C言語での論理演算の基本はバッチリです。なお、シフト演算などの方法は別の機会に説明しようと思います。


 

みなためじゃんけん

このコーナーは、私と擬似的にじゃんけんできるコーナーです。

みなためじゃんけん、じゃんけんぽん!

私が出したのは……





パー

パーでした! チョキの勝利です!



この記事をSNSでシェアする

プログラミングカテゴリーの最新記事(5件)

最新記事(10件)

管理人のTwitter

内部リンク集