这是一个防止代码丢的笔记
最近在学习C语言,同时也在读《编码》这本书,读着读着突然有一种想把编码中的电路实现出来的想法,由于现实世界中缺少材料(大量的电线、开关和灯泡等等),所以产生了用C语言模拟计算机的想法。
刚刚用C语言把第10章(逻辑与开关)中的买猫过程的电路用C语言模拟了一下,结果(0, 0, 1)和书中的完全一样,以后打算以这些代码为基础构建出一台冯·诺依曼机,为了防止硬盘损坏等原因导致代码丢失,所以把所有代码都放在CSDN上。
现实问题、表达式与电路
先定义8个集合, M = 公猫,F = 母猫, N = 绝育的猫, U = 未绝育的猫, T = 褐色的猫, B = 黑色的猫, W = 白色的猫, O = 其他颜色的猫。
现实问题
你走进一家宠物店,并且说:“我想要一只公猫,已绝育的,白色的或褐色的都可以;或者一只母猫,已绝育的,除了白色其他任何颜色都可以;或者,只要是一只黑猫就行。
可以用如下布尔表达式描述
(M * N * (W + T)) + (F * N * (1 - W) + B
用电路表示此问题![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ebbec9dd4b3254c4a2dce92a9119c84f.png)
用代码解决问题
这部分代码模拟了店员给你拿三次小猫的过程
第一次,一只未绝育的褐色公猫。结果:0(不是你想要的);
第二次,一只已绝育的白色母猫。结果:0(不是你想要的);
第三次,一只已绝育的灰色母猫。结果:1(是你想要的)。
代码部分
#include <stdio.h>
#include <stdbool.h>
bool cat(bool M, bool F, bool N, bool U, bool T, bool B, bool W, bool O);
int main()
{
//
bool M = 0; // male
bool F = 0; // female
bool N = 0; // sterilisation
bool U = 0; // no sterilisation
bool T = 0; // tan
bool B = 0; // black
bool W = 0; // white
bool O = 0; // other
//
// scanf("%d %d %d %d %d %d %d %d", &M, &F, &N, &U, &T, &B, &W, &O);
{
bool M = 1;
bool T = 1;
bool U = 1;
printf("%d\n", cat(M, F, N, U, T, B, W, O));
}
{
bool F = 1;
bool N = 1;
bool W = 1;
printf("%d\n", cat(M, F, N, U, T, B, W, O));
}
{
bool F = 1;
bool N = 1;
bool O = 1;
printf("%d\n", cat(M, F, N, U, T, B, W, O));
}
return 0;
}
bool cat(bool M, bool F, bool N, bool U, bool T, bool B, bool W, bool O){
bool ret = 0;
ret = (M && N && (W || T)) || (F && N && (1 - W)) || B;
return ret;
}