论文部分内容阅读
如今,当人们用手指在平板电脑上触摸虚拟琴弦弹奏音乐,或是在PC上敲打键盘输入文字的时候,并不会有意识地感觉到,自己正在做一些其实很神奇的事情——回望使用打孔纸带或穿孔卡片输入数据的时代,键盘和触摸屏都是可想而不可及的。
可惜,现在很少有人能真的搬来读带机和读卡机,重温这段并不算太久远的历史了。本文所介绍的几个模拟实验,不仅仅是向前人致敬,更是为了能够借助实验,体验一下在整体环境限制和约束的情况下,努力寻求方法策略以突破技术瓶颈的态度。
● 答题卡中的二进制加法
现在的学生常常会在考试中使用到答题卡,读卡机就是一台计算机——当然是专用计算机,它读取答题卡上的信息并对这些信息进行处理(不用说,所谓的处理其实就是根据各题分值计算总分)。如图1所示,左侧教师的分值设置卡有四个选项,分别是0.5分、1分、2分和4分,若0.5分不用,那么1分、2分和4分的数字恰好对应着二进制数字1、10、100的十进制的值。这么一来,只要预先将选择题答案设成一致,就可以将考试用的读卡评分系统改造成一个二进制加法器了。在答题卡上涂对答案就表示二进制数字1,而涂错答案就代表二进制数字0。略有遗憾的是,由于分值设置卡中最高的分值是4,所以每个加法项的数字不能大于7,即1、2和4加起来的和。结合分值设置卡观察这份答题卡,能猜出其中所进行的数学加法运算到底是什么吗?
如果上网搜索“穿孔卡片”或“Punch card”,会发现那些古老的数据记录介质和答题卡长得颇为相似,为提高穿孔卡片的利用率,一般通过多个孔位的组合来编码信息,而不像本文中所用到的答题卡,一组选项中只能划出一个答案。
● 塑料带数据输入仪
虽然不能真的做一个纸带读带机,但实现塑料带数据输入,还是相当容易的。所谓塑料带,其实就是将透明无花纹塑料袋剪成带状,然后用油性笔在带子上涂上条纹(不要涂得太均匀),以作为将要输入到计算机中的数据,当光敏元件扫过条纹时,就能读入数据。不过,所谓的“光敏元件”在哪里可以找到呢?键盘边上就是,光电鼠标就可以拿来当扫描器用。
如图2所示的塑料带中,有些条纹涂得粗一点,可以当作数字1,有些细一点,当作数字0。光电鼠标每次扫过条纹,就能读进一个数字:0或1(真正的打孔纸带能一次读入一个ASCII码)。这个装置的运行原理就是,当光电鼠标在透明的塑料带上滑过时,鼠标基本不动,而在经过油性笔涂成的条纹时,鼠标就会移动,这时,只要判断鼠标移过的距离,就能判断塑料带上究竟是0还是1了。实现语言和具体编程方法可能各不相同,参考答案中给出了一个用Visual Basic实现的简易方法,用到了一个Command控件和一个Timer控件,代码只有十几行而已(参考答案在本期内找)。
可惜,现在很少有人能真的搬来读带机和读卡机,重温这段并不算太久远的历史了。本文所介绍的几个模拟实验,不仅仅是向前人致敬,更是为了能够借助实验,体验一下在整体环境限制和约束的情况下,努力寻求方法策略以突破技术瓶颈的态度。
● 答题卡中的二进制加法
现在的学生常常会在考试中使用到答题卡,读卡机就是一台计算机——当然是专用计算机,它读取答题卡上的信息并对这些信息进行处理(不用说,所谓的处理其实就是根据各题分值计算总分)。如图1所示,左侧教师的分值设置卡有四个选项,分别是0.5分、1分、2分和4分,若0.5分不用,那么1分、2分和4分的数字恰好对应着二进制数字1、10、100的十进制的值。这么一来,只要预先将选择题答案设成一致,就可以将考试用的读卡评分系统改造成一个二进制加法器了。在答题卡上涂对答案就表示二进制数字1,而涂错答案就代表二进制数字0。略有遗憾的是,由于分值设置卡中最高的分值是4,所以每个加法项的数字不能大于7,即1、2和4加起来的和。结合分值设置卡观察这份答题卡,能猜出其中所进行的数学加法运算到底是什么吗?
如果上网搜索“穿孔卡片”或“Punch card”,会发现那些古老的数据记录介质和答题卡长得颇为相似,为提高穿孔卡片的利用率,一般通过多个孔位的组合来编码信息,而不像本文中所用到的答题卡,一组选项中只能划出一个答案。
● 塑料带数据输入仪
虽然不能真的做一个纸带读带机,但实现塑料带数据输入,还是相当容易的。所谓塑料带,其实就是将透明无花纹塑料袋剪成带状,然后用油性笔在带子上涂上条纹(不要涂得太均匀),以作为将要输入到计算机中的数据,当光敏元件扫过条纹时,就能读入数据。不过,所谓的“光敏元件”在哪里可以找到呢?键盘边上就是,光电鼠标就可以拿来当扫描器用。
如图2所示的塑料带中,有些条纹涂得粗一点,可以当作数字1,有些细一点,当作数字0。光电鼠标每次扫过条纹,就能读进一个数字:0或1(真正的打孔纸带能一次读入一个ASCII码)。这个装置的运行原理就是,当光电鼠标在透明的塑料带上滑过时,鼠标基本不动,而在经过油性笔涂成的条纹时,鼠标就会移动,这时,只要判断鼠标移过的距离,就能判断塑料带上究竟是0还是1了。实现语言和具体编程方法可能各不相同,参考答案中给出了一个用Visual Basic实现的简易方法,用到了一个Command控件和一个Timer控件,代码只有十几行而已(参考答案在本期内找)。