看小说能学计算机原理?!
《从美国1890年人口普查到IBM公司的崛起——浅谈机械式计算机的历史贡献》《“分析计算机”的三种基本设备与通用计算机体系结构的源流》。
The Punched Card Tabulator 下面是穿越小说《临高启明》中的片段[在原文里查找 命题 ]:
第1读卡位排除第5位不是0的卡片,这就区别了临高和琼山,第2读卡位排除第7位不是4的卡片,这就挑出了加来公社。户主姓林,林的区位码是3354。用第3-6读卡位选出户主姓氏3354的卡片。7-10位就过滤一下户主名字的后一个字。区位码是2752。设置好了分类机后,冯诺打开了机器的开关,卡片开始唰唰地分类了。2个小时多一点。对于分类1万张卡片来说,速度还挺快。
最多可以支持10条件分类。虽然每套读卡系统只有1个读卡触辊,每次只能读1个孔。但是这个触辊的位置是可调的,可以分别调整对准不同的列和行。我在每个送卡继电器上游又加了一个控制继电器,上面有个开关,可以选择激活或者不激活。这样,相当于可以给控制送卡机构的继电器取反了。既可以选择送出所有穿孔的卡片,也可以选择送出所有不穿孔的卡片。
从理论上来分析一下,我们的分类机能解决什么样的问题,不能解决什么样的问题。
首先,排序。毫无疑问,这个问题是可以解决的,我们把10个读卡单元上的读卡触辊对准同一列的0-9,则卡片就会按照这一列的数字被推送到10个卡袋中,手工把卡片重新合成一叠时,这些卡片就是按这一列数字的大小排序的了。
其次,单条件分类。‘把所有卡片分为男性和女性两叠’。这个完全可以完成,只需要打开1个读卡单元,对准性别列的0孔,性别为0,也就是女性,会被推入卡袋,男性则不会。
第三,多条件分类。这就需要具体分析了。假设我们现在有整个东亚地区的户籍卡片,我要找出海南临高加来公社的卡片,该如何操作?
让1~4号读卡单元依次筛选出户籍所在地前4位为‘1001’的卡片;然后让5号读卡单元把户籍所在地第5位为‘1’的卡片推入5号卡袋,这些是三亚榆林的卡片;让6号读卡单元把户籍所在地的第5位不是‘2’的卡片推入6号卡袋,此时机器上剩余的是三亚田独的卡片;让7号读卡单元把户籍所在地第6位不为9的卡片推入7号卡袋,这些是三亚田独11~89公社的卡片;让8号读卡单元把户籍所在地第7位不为9的卡片推入8号卡袋,这些是三亚田独90-98公社的卡片…… 合并5号、7号、8号卡袋的卡片即为所要的结果。
找出住在十三村和百仞公社的姓名为‘刘四’的人;二,找出原籍为福建和海南的人。这两个问题都不能解决。为什么?原因不同,第一个问题不能解决是因为读卡单元不够。要确保卡片上的姓名是“刘四”,需要确保卡片上存储姓名的列是“刘四”的8位区位码,这需要8个读卡单元排除不符合条件的卡片,可以说,到达第9个读卡单元的所有卡片,姓名都是“刘四”。但是,此时分类机只剩下两个读卡单元了,百仞公社是‘11’,十三村是‘18’。可以用9号读卡单元把户籍所在地的第6位‘公社’不为‘1’的卡片排除,此时机器上剩余的是11~19公社的‘刘四’。其中,可以用10号读卡单元把第7位为‘1’的卡片推入卡袋,这是‘百仞公社的刘四’,但不足以把‘十三村的刘四’从剩余卡片中分类出来了。所以这个应用不能被完成。
不能做‘或运算’。
我们要找任何卡片,总有一系列的条件对目标卡片进行描述,这一系列条件,我们叫做‘命题’。这些条件反应在筛选手段上,就是穿孔卡片上的某个孔‘是否’穿孔。注意,也就是说,每个命题存在两种可能性,是和否,我们称之为‘真、假’。”
“现在我们有了两个概念,命题、真假。最终,一张卡片,是不是我们所要的卡片,往往有许多条件共同限定,每个条件是一个命题,那么我们的最终目标,就是由许多命题合成的一个新命题,我们可以称之为‘复合命题’,组成复合命题的每项条件,可称为‘简单命题’。自然,‘复合命题’也有‘真假’。” 复合命题由一个或多个简单命题合成,那么其合成的方式,我们称之为‘联结词’。复合命题的表达式为:‘(a∧b∧c)v(a∧d∧e)’。”
“我们的分类机是如何判断真假的呢?是通过检验穿孔卡是否穿孔,也就是说,分类机的每个读卡单元,能够判断复合命题中的一个简单命题的真假。同时,通过一个控制继电器,我们可以让每个读卡单元,判断仅有1个‘非’联结词的复合命题,也就是一个简单命题的非命题的真假。”
而经过k号读卡单元后机器上剩余的卡片,可表示为┐p1∧...∧┐pk,即以┐p1为开头的连续‘与’运算。”
“所以,凡是能变换成上述形式表达式的命题,就是分类机能够查找的,否则,就是分类机不能查找的。”
“而‘(a∧b∧c)v(a∧d∧e)’,无论我们怎样变换,是不能变换成上述表达式的,因而是当前的分类机所不能解决的。”
“好,问题来了,怎样变换表达式?” “根据这些运算律,可以把逻辑命题的表达式变换成各种形式,不过,一般我们会变换成连续‘与’的‘或’,或者连续‘或’的‘与’,称为析取范式和合取范式。”
“这就要求我们的每个读卡单元,不是仅能判断一个简单命题的真假,而是能够判断多个简单命题构成的合取项或者析取项的真假。反映在分类机设计上,就是把读卡单元目前仅包括1个工作继电器和1个控制继电器的简单电路,改造成包含多个继电器的开关电路。”
你这个制表机不能累加,和验钞机有什么区别?
其一,因为穿孔卡上的数据是在1列或连续若干列上分别打孔表示每位的数字,因此计算总和只需分别统计每一列中的各个孔在所有卡片里一共被打了几次,这个靠简单的计数器就能完成。
接下来,再人工把每列各孔的次数乘以该孔的取值后求和,然后各列的总和再根据该列代表的是十位/百位乘以10或100,最后再求和后就可以了。虽然最终结果要用另一个计算器或者人工单独计算,不过反正现阶段制表机的结果也需要人工抄在记录里。
这并不是真正的累加器,但霍勒里思的制表机就是这么做的,机械设计也最为简单,只需要让继电器或者继电器驱动的擒纵叉拨动数盘转动即可。
其二,先不将主动力齿轮与数盘的转动轴直接啮合,而是用继电器控制连接二者的齿轮,只有数字0-9对应的某个继电器通电时,主动力才能驱动相应的机械结构转动数盘。
此时,可以分别使0-9对应的机械结构在拨动数盘时的操作不同,或是多次拨动,或是一次拨动多位,达到各孔数字一同累加的目的。至于进位,与第一方案相同,采用在低位数盘的9和0之间添加继电器驱动高位数盘转动来完成。
这样的机械结构略显复杂,肯定也更占用空间,优点是合并了每列各孔的累加,避免了大量的人工计算乘法以及求和,进而连进位问题也可以解决。最终数盘上的数字就是累加的结果,所见即所得。
最后,就是单纯地用继电器搭建二进制累加器的方案了。在理论设计上难度不大。然而,钟博士在会中散发了他找到的旧时空某继电器狂热者搭建的全继电器版算术逻辑单元ALU图纸,资料图片上像蜂巢一般密密麻麻的继电器令与会者头皮发麻。某个密集恐惧症患者当即要求出去休息一会“透透气”。
区位码
“其实中文编码问题不难解决,问题是占用空间太大。”
“1980年颁布的《信息交换用汉字编码字符集》,通称GB2312编码,不仅仅规定了汉字在计算机上的表示方法,其实也定义了一套使用4位十进制数字表示汉字的方法,就是区位码。区位码收录了一级汉字3755个,二级汉字3008个,符号682个,基本满足当前需求。所以最简单的中文编码方法就是每4列编码一个汉字,大家以前高考的时候都涂过自己的姓名,当时用的就是区位码。”