C 程序:cprogs01.zip

FUNCDRAW.EXE —— 一个带函数解释功能的程序,是我寒假的新作。用法如下:
基本按键与下文所述的 DRAW.BAS 相同。增加了一项功能:解释功能。不必修改源代码,只要在程序工作目录下新建一文本文件 FUNCDRAW.INI,其内容如下(以下是一个例子):
-10, 10
x / 2
10,
x ^ 2 / 20
...
说明:一行取值范围,一行表达式,如此重复。如果要表示大于某数,可以写成如“10,”的形式,如果表示实数范围,写成“,”。支持的函数:sin, cos, tan, exp, log, sqrt, floor, fabs, log10。下载:funcdraw.zip

BASIC 程序:

  1. draw.bas 一个画函数图象的程序。按键功能:G——打开/关闭网格,T——放大网格,B——缩小网格,A——左移图象,D——右移图象,W——上移图象,X——下移图象,逗号——缩小图象,句号——放大图象。
  2. 要修改函数图象,请修改Func函数。
  3. ipkeeper.bas 用于加速 DNS,请在Windows目录下新建一个文件 Hosts.txt,并在其中输入经常访问的网站的域名,然后运行。
  4. prime.bas 很传统的算质数的程序。
  5. codegen.bas 方便的口令生成器。
  6. winnt.bas “假冒”Windows 2000/NT 安装程序,很好玩的哦!
  7. hannoi.bas 汉诺塔游戏——根据八年前遗失的程序重写的。
  8. 下载:bas01.zip
鉴于很多网友没有 QBASIC,而 PCHOME 上的那个版本的帮助又是坏的,我在这里放了一个 QBASIC:qbasic.zip

在 Windows Vista 32 位版本中,DOS 程序(包括 C 和 QBASIC)无法全屏;在其 64 位版本中,DOS 程序不受支持。因此请使用 DosBox(www.dosbox.com)来运行 QBASIC 和 DOS 下的 QuickC/TurboC 程序。

Visual Basic 程序:

RealShell.zip——一个 Windows Media Player 6 的外壳程序,提供了与众不同的操作感觉,并且提供了记录播放位置的功能。2004 年 3 月我对其进行了一次代码复查,修正了一些错误。

RPShell.zip——一个真正的 RealPlayer 外壳程序,需要先安装 RealOne Player 以后才能使用,不过 Real Player 对于 VBR MP3 的支持比 Windows Media Player 好多了,所以推荐。2004 年 3 月我将原来的不太合理的结构替换成一个更合理的结构。

Visual C++/Borland C++ 程序:

HTMLTree(htmltree.zip) - HTML Guidance Tree Maker,是我 2002 年寒假时写的程序。主要功能是生成一个 HTML 导航页面。注意其生成的页面与 IE 7 及以上版本不兼容,需要手工把它生成的 base 标签放到 head 标签里面去。

HTTPServer.zip——一个简单的 HTTPServer,本来是为了应付计算机网络课的大作业而做的,不过我也化了相当多的时间来让它变得可用。包含源代码。

WuBiLianXi.zip——五笔练习程序。包含源代码。

GraphicsConclusion.zip——计算机图形学程序。我本早该把这个程序放上网的,只是我一直觉得这个程序不完整,因为透明物体内部反射的算法没有写好。于是这个程序就迟迟没有被放上我的主页。到目前为止它还是没有多少改进,不知哪年哪月哪位仁兄还是我自己可以替我改一改,改得更好些。也许永远没有这样一天,也许这一天很快就会到来。这个程序相对其他类型的图形渲染程序来说有一个特点:它提供接近真实的漫反射运算,所以可以用来渲染凸透镜聚焦的效果。并且它也支持多级反射,但由于这个程序在计算漫反射时速度太慢,所以我只让它计算两级漫反射,由此效果也要打些折扣。以下是这个程序的四张渲染图:

Robbie's Shell and cmdtools——2005年在原单位文广信息中心,花了两个星期写出来个rosh.exe,是一个带有类似于Linux中默认命令行外壳程序bash的Tab键文件名补全功能的外壳程序。用惯了bash或busybox sh的话,在Windows上用cmd.exe会很不习惯,因此我写了这个程序。详细用法请参见它的压缩包里的内容(readme.txt或help.txt)。为了让它变得实用,还写了一套命令行工具cmdtools与之配套,这也是因为Linux有一些好用的命令而Windows上没有的缘故(某些比较复杂的命令,包括grep和diff,需要另行添加,推荐Borland C++ Compiler 5.5中的grep和GnuWin32中的diff)。这套工具略有些复杂,安装前请仔细阅读readme.txt或help.txt。有问题可以发电子邮件给我。

AVL 树程序——计算机系的数据结构课上讲过的一种平衡二叉搜索树,我久仰其名,至今(2007-03)才把程序写出来。说到平衡二叉搜索树,一是它是一种二叉搜索树,二是它有一些应用,比如微软 .NET Framework 的类库里面的 DataRowCollection 就使用一种叫红黑树的平衡二叉搜索树;此外在我看来可以应用在缓存上,大大提高搜索缓存页的效率。

闹钟()——这个闹钟程序的前身是我在 2002 年写的 16 位 QuickC 程序,它只能运行在 16 或 32 位版本的 Windows 之上。但是现在流行 64 位 Windows 了,16 位程序是不受支持的。所以现在提供的这个版本是 2010 年更新了的 32 位版,能运行于 32 位及 64 位 Windows 上。

内存余量指示器——这个指示器是我在2006年编写的。当时我在SMEG信息中心,那里的电脑配置不是很高,经常感觉有点卡,硬盘上的虚拟内存正在狂换页。为了实时了解空闲内存的多少,我编写了这两个工具,freememind用来指示空闲内存,pagesind3用来指示每秒有几次硬盘I/O用于换页。自从Vista系统以来,系统自带了资源监视器。这两个工具我用得就少了。用法:把exe文件拷出来,根据readme.txt里的指示操作。

Visual C#/ASP.NET 程序:

猜数字()——基于我刚进大学没多久的时候的一个 C 语言猜数字程序改编的 VB.NET 版猜数字程序。很简单的小程序。

智能猜数字由我的同学张勇编写,很智能的哦:不仅可以让你猜,只要你愿意,它还会自动帮你猜!^_^

黑客帝国(Matrix)屏保——2010年我乘班车时路经西藏南路的一幢楼,它的墙上装饰着五颜六色的霓虹灯,灯光像流水一样流淌下来,于是引发了我用C#编写这个程序的兴趣。要使用它,把压缩包中的的MatrixSS\bin\Release目录中的scr文件复制到Windows的System32目录即可。这个程序的源代码演示了如何使用C# 2.0的迭代器函数。

简易(or傻瓜式)照片调小程序()——2010年编写,特别为新上网的老年人考虑,不需要太关心数字,只要把图片或图片文件复制一下(包括浏览器中的图片,用鼠标右键就能复制),放到该程序中粘贴。然后再从该程序另存为(或者,直接复制粘贴),就能把图片缩小到屏幕上显示的大小,非常有利于在论坛上发图片。通过调整程序窗口的大小就能调整目标图片的大小,非常易用。

B-树程序——计算机系的数据结构课上曾经讲过的最复杂但也是最强大的数据结构之一:B-树(读作“B 树”,不读作“B 减树”)。B-树和平衡二叉树的功能类似,但是性能方面更适合磁盘访问,因为它的结点较大,随机访问的次数可以因此而减少,所以经常用于数据库管理系统。我当初为之心动不已,但是实力有限,没能把它写成程序。当年(2003 年)韩捷同学倒是和另几位同学写出来一个,最终做成了一个微型的数据库管理系统。而我数年来一直未动,去年尝试了一次但是没写成,今年(2011 年)终于通过两个月的努力把它完工。本程序虽然是 C# 写的,但是要翻译到 C 语言也不会太困难,不过如果要在文件里实现,还是需要一些功夫的。针对 .NET Framework 1.x 和 2.x 各有一个版本。我实现的 B-树,有部分键查找功能,方便用于外键查询;功能上没有下标定位功能(.NET 的红黑树是有此功能的),但是因此而速度较快。

Mandelbrot——你家电脑脑子里想象出来的托伯列南国,一个简单的方程能在数学里演化成如此宏大的场景,不得不让我感到数学是个神奇而又冷酷的东西。如下图所示。本程序由©Quanben版权所有,但欢迎转载。

JavaScript 程序:

稳固的、坚如磐石的(但愿如此!) Solid Javascript Base64 UTF-8——一个客户端JavaScript类库,用于编解码base64和UTF-8编码的字符串。我们知道,JavaScript中的原生字符串是UTF-16编码的。我的这个库可以用来编解码JavaScript字符串,将它编码为UTF-8的16进制数字字符串,乃至进一步编码为base64字符串,也可以反向解码base64字符串为16进制数字,并当内容为UTF-8时,再进一步解码为UTF-16字符串。之所以中间经过了UTF-8,而不是直接将UTF-16编码为base64,有两个原因。一是UTF-8是在磁盘上保存文本时比较常用的编码方式,比如html文件经常用UTF-8编码。二是UTF-8在表示英文字符时,所占的空间比UTF-16要小。例如,字符串"Hello world!"编码后就成了"SGVsbG8gd29ybGQh"。

Continuation-Passing Style(连续体传递风格)的JavaScript实现在读了陈梓瀚的编译原理博客后,了解到了Continuation-Passing Style(CPS,连续体传递风格)这样一种编程方式。把一段普通的结构化编程编写的程序转成CPS风格后,不仅可以实现状态机(或者叫“协程 [coroutine]”),也可以实现把命令式编程语言(imperative programming language)的程序转换为函数式编程语言(functional programming language)的程序这样的目的。这里的JavaScript代码实现的是异步计算素数(又称质数)。页面上亮起的灯表示素数。推荐看一下源代码。

给我家宝宝的数字学习程序——用点数来表示数量,以演示加减法,适合给2岁以下的宝宝学习。虽然我设计该程序的时候是受了杜曼的方案的启发,但我并不想完全用他的方法,而且宝宝的学习本就不该太无聊,所以我设计了这个程序,偶尔给孩子玩玩,由我来给宝宝做演示。该程序不仅利用了HTML5的Canvas(画布)功能来显示动态的点数,而且为画图的核心逻辑设计了单元测试。如果您读一下该程序的源代码,将会发现单元测试既有效,又需要一些设计技巧——特别是,这些点的显示是给人来看的,所以,单元测试时点的期望位置不应与具体程序耦合。而且,为了保证测试的可重复性,我手动实现了一个模仿Borland C++的伪随机数生成器。

Robbie Mosaic 的编程之旅

从历史上说,人类社会的发展与工具的使用密切相关。工具是人类为了生产、生活、娱乐等目的而创造的。计算机也是这样一种工具。计算机的功能在于进行科学计算、业务计算、批量数据处理、批量数据存储与访问、网络服务、多媒体、艺术创作、游戏、图像识别、指纹识别、人工智能、控制机器人等等。驱动计算机工作的,即是人们编写的程序,或者说软件。

当今的个人计算机(PC 机)通用性相当好。仅有特殊的应用需要特殊的计算机。当然这样的特殊计算机也有很多。以前六七十年代有做向量运算的 Cray 向量机,直到现代也有管理海量数据的 IBM 大型机,还有一些做科学计算或人工智能用的超级计算机。为了便于携带,人们也生产了许多微型计算机设备,如手机(包括智能手机)、PDA、电子辞典、导航仪,以及更小的 BP 机、计算器、手表等等。

之所以需要有软件,是因为对一种特定类型的计算机,其功能不可能完全随硬件提供,且其硬件具有执行复杂计算的能力,需要靠软件来发掘这样的能力。越是简单的设备,如计算器,越是不需要复杂软件。反之,越是大型、功能强大的系统,越是需要软件来发挥其计算功能。这也就是为什么微软公司在当前计算机内存容量越来越大,甚至软件用都用不完的情况下不断地增强其软件的原因。

计算机硬件

所有软件都离不开硬件,没有硬件就无法运行程序。硬件是什么东西呢?就是计算机的各个组成部分。大致说来,计算机有 CPU、存储器、输入输出设备三种硬件。详细内容,请认识计算机硬件

以微软的操作系统说来,早在 1992 年的 Windows 3.1,就有了虚拟内存的概念。在此转载百度百科上的词条虚拟内存,其中也有我的贡献哦。

软件的分类

如果说硬件是计算机的“大脑”,那么软件就好比是计算机的“灵魂”。从 1970 年至今,随着硬件和互联网的迅猛发展,市面上的软件早已多如牛毛。但是由于计算机的本质没有太大变化,因此软件也是万变不离其宗,绝大多数都是通过编写程序的方式产生的。因此,可以略微了解一下计算机编程

软件的种类很多,通常可以划分为两大类:系统软件和应用软件。系统软件是用户通常不直接打交道,而为程序和程序员提供服务的软件。常见的系统软件有:操作系统、编译器、数据库管理系统、集成开发环境。应用软件则是用户直接使用的软件。应用软件的种类非常多,以至于无法将其完全概括出来:文字编辑排版软件、电子表格软件、简易数据库、文件管理器、图像处理及绘制工具、面向对象图像处理工具、三维图像制作工具、录音软件、音频编辑器、音频合成软件、浏览器、即时通讯工具、多媒体播放器、图片浏览器、演示文稿、游戏、远程控制、文字输入法等。

编程文章: