[返回老 炮 儿首页]·[所有跟帖]·[ 回复本帖 ] ·[热门原创] ·[繁體閱讀]·[坛主管理]

读bci博文章想到的一件趣事

送交者: 万湖小舟[♂★★声望品衔10★★♂] 于 2024-04-28 7:38 已读 2879 次 9赞  

万湖小舟的个人频道

+关注
读bci博文章想到的一件趣事

文/万湖小舟

拜读了bci博的文章:

https://web.6parkbbs.com/index.php?act=view&bbsid=2156&tid=4334517

看到文中有一个她的同事处理计算机代码不很专业的一个镜头,让我回忆起一桩趣事。

一次给学生考试,有一个题目是用数值方法解普通二阶微分方程。要求学生使用4阶的龙格-库塔方法(Runge–Kutta methods),写出计算机的程序代码。

编写程序代码是一个比较费时的事。让学生在有限的时间完成所有的工作不现实。所以我就给学生提供了一个编程的模版(Template)。所有的数据输入输出,以及解曲线的画图等等辅助功能这个模版都具备了。只要求学生在模版指定的位置,开发出计算机程序代码来表达4阶龙格-库塔方法解题的核心步骤。完成后学生可用光标点击一下模版上的一个按钮,学生的解曲线就可以显示出来。

当我改卷时,我看到一个学生的解曲线是空白的。我以为他没有完成这道题目。可是当我打开他的代码时,他的代码是完整的。我按了一下模版按钮,编译器通知我代码有错误,是什么变量没有定义,并为我指向了一条循环语句。

我一看这个循环语句,循环变量学生定义了。循环变量的初值他赋于了一个常数 1,循环变量终值他给了一个常数10。也就是说循环语句中他没有用多余的变量,用常数来规定了循环的次数。不需定义变量。这句循环语句是正确的。所以我想可能是编译器指错了位置。

我就去查找学生的代码哪里用了变量,却没有事先定义它。查了好几遍,他的代码是正确的,可是编译器就是不接受,而且非常顽固地一次一次地指向那个循环语句。我看了又看,学生的循环语句是对的。我也顽固的认为编译器在误导我。

我会不会是老眼昏花,检查学生的代码不仔细,漏掉了他的错误? 所以我调出了我的解代码,一句一句的和学生的代码对照。对照完了,学生的代码和我的解代码一致,没有错。可是编译器还是固执的指向那条循环语句。我来气了。老夫今天就要和编译器较下劲,找出学生代码真正错误的地方。当然职业要求也要我这样做,不能随便给学生的题目判分,总要让学生知道错在哪里,丢了分也口服心服。

我大动作了一下,把学生所有的代码全部变成注释语句,让编译器忽略它们。然后把我的解代码放入其中。结果编译器一下就接受了,也画出了解曲线。这下有些让我懵了。学生的代码和我的代码一模一样,为啥他的代码编译器不接受。编过程序的朋友都有体会,代码看上去正确,可是编译器不接受,或编译通过了,运行的结果不正确,很让人抓瞎。

接下来我让学生的代码一句一句的替换我的代码,看看问题在哪里? 结果编译器仍然在我一旦用学生的循环语句替代我的循环语句时,告诉我出错,错误的原因还是变量没有定义。

好,我再认真一次,一个字母一个字母的用学生循环语句的字母替代我的字母,当替换到常数 1 时,编译器不接受了。我端详了学生的常数 1 和我的常数 1 有什么不同,它们长得一模一样。这次我把学生的常数 1 删除掉,让后重新输入常数 1,编译器接受了。也画出了解的正确曲线。

问题在常数 1?  可是它不是变量啊。为何编辑器指出的错误是变量没有定义? 这时突然我的脑回路放了一次电,我想会不会学生把数字 1 敲成了小写字母 L。我就把我的代码中的常数 1 改成小写字母 L。改了后我看到常数 1 和小写字母 L 在编程的编辑器中一模一样一编译果然问题在这里。编译器当然会认为字母 L 是个变量,学生没有事先定义它。只是 1 和小写字母 L模样相同欺骗了我。编译器是忠守职责的。是俺错怪了它。
 
学生这样一个输入错误导致他的代码不能运行。我当然在这个题目上只给学生扣除了很少量的分。当我在班上告诉这位学生,检查你的代码花了我半个小时,他也好奇的问我,错在哪里? 他认为他的代码是正确的,为啥编译没有通过。当时他看到考试的时间快结束了就放弃了这道题目,赶快去做其它题目了。当我在屏幕上显示他的输入错误,1 和 小写的 L 模样时,全班同学都笑了。

通过那次考试,我知道编程时总会出现这样那样的输入错误,这并不表明学生不懂。考试的目的是测验学生对数值方法理论的理解,并用计算机的语言把理论表达出来。那门课不是学习编程,而是学习数值方法。所以以后当有类似的题目时,如果微分方程有解析解,我就把解析解的解曲线提供给学生。我说你们写完代码后,可用这个解析解的曲线来比较你们数值解的曲线。如果两者相差甚远,一定是你的代码哪里出错了,就去检查修改。当给出的微分方程求不出解析解时,我就提供另一种方法的数值解,比如3阶RK方法的数值解曲线。学生的代码如果正确两者的解曲线几乎完全吻和。都可以帮助他们检查错误。这样就在很大程度上解除了学生的输入错误被误判为不懂,让学生丢失更多的分数。

这种方法也很受学生欢迎。这就是俺工作中有关代码的一件趣事。


贴主:万湖小舟于2024_04_28 7:42:50编辑

贴主:万湖小舟于2024_04_28 7:55:06编辑

贴主:万湖小舟于2024_04_28 9:02:56编辑
贴主:万湖小舟于2024_04_28 9:48:57编辑
喜欢万湖小舟朋友的这个贴子的话, 请点这里投票,“赞”助支持!

已标注为万湖小舟的原创内容,若需转载授权请联系网友本人。若违规侵权,请联系我们

所有跟帖:   ( 主贴楼主有权删除不文明回复,拉黑不受欢迎的用户 )

(^-^) 万湖小舟 给 bci 送上一枚实力勋章! - 万湖小舟 (89 bytes) 04/28/24
(^-^) 万湖小舟 给 bci 颁发一张学霸证书! - 万湖小舟 (89 bytes) 04/28/24
(^-^) 万湖小舟 给 bci 泡上一碗茉莉花茶! - 万湖小舟 (89 bytes) 04/28/24
(^-^) 万湖小舟 给 bci 端来一杯咖啡! - 万湖小舟 (88 bytes) 04/28/24
(^-^) 万湖小舟 给 bci 颁发一张学霸证书! - 万湖小舟 (89 bytes) 04/28/24
编程高人谈不上,但 - gudouchun (39 bytes) 04/28/24
(^-^) 万湖小舟 给 realspiro 端来一杯咖啡! - 万湖小舟 (88 bytes) 04/28/24
你举得例子非常巧妙 - 太湖清奇 (661 bytes) 04/28/24
感谢真君鼓励。 - 太湖清奇 (650 bytes) 04/28/24
非常理解。握手太湖博。 (无内容) - 万湖小舟 (0 bytes) 04/28/24

用户名: 密码: [--注册ID--]

标 题:

粗体 斜体 下划线 居中 插入图片插入图片 插入Flash插入Flash动画


     图片上传  Youtube代码器  预览辅助



[ 留园条例 ] [ 广告服务 ] [ 联系我们 ] [ 个人帐户 ] [ 创建您的定制新论坛频道 ] [ Contact us ]