使用一副扑克牌设计一台简单的计算机

239 阅读3分钟

构成计算机的三个要素是计算单元,存储单元和指令序列。本文试图通过这三要素,将一副扑克牌变成一台简单的计算机。

功能设计

实现五进制数字加法的计算机系统

存储单元

使用1-13不同面值的每一张扑克牌作为存储单元

具体实现

将13种面值的扑克牌分别作为数字的1-13位,数字为五进制数字(逢五进一)。将小王作为当前位的进位,大王作为下一位的进位。初始时,面板上没有扑克牌,相当于数值为0,两个进位也同样为0。当有一个数字输入时,首先做的是0+当前数字的加法。即当前位的数值是几,在面板上的当前位放多少张扑克牌。当再有一个数字输入时,即做当前数字和输入数字的加法运算。运算时需要用到下方描述的指令序列。

指令序列

一一上一

一二上二

一三上三

一四进一下一

二一上一

二二上二

二三进一下二

二四进一下一

三一上一

三二进一下三

三三进一下二

三四进一下一

四一进一下四

四二进一下三

四三进一下二

四四进一下一

初始大王化小

逢零本位不变

低至高位运算

每位两次运算

进位加一运算

系统解释

在最低位时,当前位的进位为0,下一位的进位为0,由于指令要求初始进位时小王的值变成大王的值,大王拿下面板(即把上一次运算的下一位的进位变为当前位的进位,然后把本次的下一位进位置为0)。本次操作后当前位的进位和下一位的进位依然是0。从最低位开始运算,如果当前有1张扑克牌,输入数字当前位如果是1,2,3,是多少数字则再向面板的当前位放置几张扑克牌。如果是4,则按照指令序列的解释,将大王(下一位的进位)放置到面板(即下一位的进位置为1)。做完数值运算后,再将当前位的数值加上当前位进位的值(如果是0则不变,是1按照指令序列运算)。当做完当前位的运算后,进行下一位的运算。在开始运算时,同样将上一次运算时下一位的进位变成当前位的进位,然后把本次的下一位进位置为0。如果当前位有3张扑克牌,则假如输入数字为1,则再放置1张扑克牌,如果是2,则在面板放置大王,当前位拿下3张扑克牌。重复上述过程,直到运算完输入数字的最高位。

所以本计算机不需要使用者会加法运算的原理,只需要认识数字,背下指令序列,按照指令序列进行运算即可。