送给爱雪的孩子“柯西雪花”–还是《写给下一代的电脑工程师》
3月31日,东北(辽宁地区)下了一场雪,小保尔在外公家“度假”刚好赶上这场雪。小保尔的外公打电话回来给我们说:小保尔看到下雪了,高兴得跑出去玩雪;他说雪花很大,“象假的一样大”。
可惜春天的雪花落到地上就融化掉了。小保尔玩不成雪,很失望……
小保尔:爸爸送你“柯西雪花”怎么样?
因为刚好上一次说过要给你讲一讲Basic语言,所以这次爸爸就用Basic语言给你做“柯西雪花”(Koch又译:柯克雪花)。
先上图:
http://dongren.cn/NextProgramers/Koch/koch2snow2.gif
“柯西雪花”漂亮吗?
作图、学习语言、和编写程序的道理其实相通的呢。那就是一笔一笔的画,一句一句的学和一行一行的写呀。以后记得吃东西也要这样子,要一口一口的吃哦。
小保尔,西方人讲事情喜欢直奔主题,而我们中国人喜欢含蓄,还喜欢从源头讲起,最后再“画龙点睛”哦!介绍有关Basic和谭浩强(老师)的故事今天我们话说从头好吗?
BASIC[1](Beginner’s All-purpose Symbolic Instruction Code,初学者指令符号编码),意思就是“初学者”使用的计算机语言。
小保尔,中国人介绍一个人首先会从他的年龄开始,谭浩强老师1934年生人,你算算他今年(2009年)已经有多大年纪了?对了,他比你爷爷还大十多岁呢。所以对于你来讲,你可以叫谭爷爷了(按中国人的习惯)。
谭浩强是我(Baoba)的老师哦,因为我的Basic语言就是从他的书上学来的;虽然我没有面对面上过谭浩强的课,但我们有句古话(孔老师说的)是说:“三人行,则必有我师”哦。
虽然Mr.谭写了很多计算机(尤其是计算机语言)的教材,教过很多学生。但是即便如此,关于谭老师也有负面的说法哦(你知道名人、明星很少人可以做到没有丑闻的,这个也属正常,对吧?)。比如就有人说:他写的BASIC是在毒害青少年。
小保尔,你只听说过黄色小说能毒害青少年,怎么BASIC语言也会毒害青少年呢?原来,他们的观点是:BASIC是非结构化语言,学了以后,养成不好的习惯,学了还不如不学。第2是:BASIC太简单,功能不够强大,学了也没有什么用。
以上是有些人的观点,这两个观点不代表别的电脑工程师和程序员,也不代表我的观点。我告诉你啊小保尔,BASIC语言的非结构化问题早已经解决了,现在大家用的BASIC语言(尤其是你用到的VB.Net)几乎都是第三代结构化的BASIC了。
至于另外一个瞧不起BASIC的理论:BASIC太简单,功能不够强大,学了也没有什么用。让我来讲一讲谭老师说过的比喻来驳斥这种观点吧:小保尔都知道的,在大马路上有各种各样的汽车;它们包括公共汽车、小汽车、大卡车、三轮车、自行车,摩托车……问 哪种车最好?公物人员(尤其是大领导)们会说小汽车最好,因为它既快又舒服;公交部门说,公共汽车最好,因为它载客量大,能减少交通拥挤的程度;搬家公司说,大卡车最好,装东西最多;老百姓(比如进城里打工的“打工仔”)会说,我骑自行车上班最好、最便宜,不用买汽油,大街小巷都能走。如果领导们有了小汽车,就要取消自行车,大家肯定会不高兴,对吗?因为他脱离了实际,脱离了国情,没能符合普通人的习惯。
谭老师的第一本计算机教育的书(处女作)《BASIC语言》一书发行量超过1200万册,创科技书籍发行量世界纪录。这本书直到现在仍在以每年30万册至40万册的速度增加。谭浩强一生(到现在为止将近一生哦)一共写了一百多本计算机的书,总(发行)量超过2200万册。所以说:在中国计算机界谭浩强老师的学生最多,懂计算机的人很少不知道谭浩强这个名字。
现在你也知道了Mr.谭哦,小保尔。你佩服这样的人吗?如果是的话,那就好好学吧。
至少在下一次,在《我的朋友小海龟》这篇文章里你还要继续和这个Basic打交道,让你们领教一下Basic的强大威力吧!
最后不要忘记要自己领略一下“柯西雪花”的Basic程序哦。“人间大炮一级准备……!发射!!”呵呵……让我们留住今年春天的“柯西雪花”,让彩色的雪花在你的小心灵里漫天飞舞吧!
http://dongren.cn/NextProgramers/Koch/ColorSnows1.jpg
[1] BASIC(Beginner’s All-purpose Symbolic Instruction Code,又译培基),意思就是“初学者的全方位符式指令代码”,是一种设计给初学者使用的程序设计语言。BASIC是一种解译式的程式语言,在完成编写后不须经由编译及连结等手续即可执行,但如果需要单独执行时仍然需要将其建立成执行档。还要留些资料你自己阅读哦。http://zh.wikipedia.org/w/index.php?title=BASIC&variant=zh-hans
2009年4月2日于10:47 am
”柯西雪花“Koch’snow的主要迭代算法写一下,希望对学编程的有点个启发吧!代码通常占篇幅,真有兴趣咱们用SVN或邮箱来交流代码吧!
If (bX - aX) * (bX - aX) + (bY - aY) * (bY - aY) < 10 Then
‘Me.Line (aX, aY) - (bX, bY)’这一行是Vb6及以前版本的画线语句
g.DrawLine(mpen, aX, aY, bX, bY) ‘这一行是Vb.net的画线语句
Else
cX = aX + (bX - aX) / 3
cY = aY + (bY - aY) / 3
eX = bX - (bX - aX) / 3
eY = bY - (bY - aY) / 3
Call Fractal(aX, aY, cX, cY)
Call Fractal(eX, eY, bX, bY)
l = System.Math.Sqrt((eX - cX) * (eX - cX) + (eY - cY) * (eY - cY))
alpha = System.Math.Atan((eY - cY) / (eX - cX))
If (alpha >= 0 And (eX - cX) < 0) Or (alpha <= 0 And (eX - cX) < 0) Then
alpha = alpha + PI
End If
dY = cY + System.Math.Sin(alpha + PI / 3) * l
dX = cX + System.Math.Cos(alpha + PI / 3) * l
Call Fractal(cX, cY, dX, dY)
Call Fractal(dX, dY, eX, eY)
End If
做上图时优化了一下程序,PI用355 / 113“密率”代替了(为了迭代快),考虑程序可读性还是帖原来的。
Email: i90-#hotmail.com
#号替换掉。