题目:
加热/冷却恒温器控制加热器(冬季)和空调(夏季)。实施一个电路,根据情况打开和关闭加热器、空调和鼓风机。
恒温器可以处于两种模式之一:加热(模式 = 1)和冷却(模式 = 0)。
在制热模式下,当天气太冷(too_cold = 1)时打开加热器,但不要使用空调。
制冷模式下,太热(too_hot = 1)时打开空调,但不要打开暖气。
当暖气或空调打开时,还要打开风扇使空气流通。
此外,即使加热器和空调关闭,用户也可以请求打开风扇(fan_on = 1)。
尝试仅使用赋值语句,看看是否可以将问题描述转换为逻辑门的集合。
思路:
就是根据不同的输入情况去决定输出,风扇的开关可以看作是二级输出,根据输入fan_on以及一级输出heater和aircon的情况共同决定。同样考虑硬件和软件思路。
1.软件思路:使用case,括号内的控制表达式就将所有输入串联起来,但是根据题目描述,例如在加热模式下,too_hot的取值和后面的输出没有任何关系,所以可以考虑使用casez无视无关项。其中不管是空调打开还是加热器启动了都会开启风扇,所以先写这两项,然后剩余的情况,只要fan_on打开了,风扇也打开。
2.硬件思路:写逻辑门时就只要将相关项写进去就行,空调(aircon)打开只与模式(mode)和太热(too_hot)相关,就只写这两项。加热器同理。风扇的打开和一级输出相关,还和输入有关,只要把所有情况想清楚,相或起来就行。
解答:
1软件思路 2.硬件思路:
3参考解答
总结:
硬件写法和答案不同的地方在于fan的情况,我考虑的再进一步,因为空调加热器只要打开,fan—_on是0或1,fan都得打开。空调加热器都是0时,fan和fan_on取值相关,所以应该是三项直接相或,我的写法多余了,不是最简的写法。其实化简逻辑表达式也是可以得到标准答案。