- 主题:娃学编程
你说到这个:“更极端的是部分信息学竞赛选手还会养成分配数组总是多分配5个10个甚至100个的奇怪习惯”,
这也是我疑惑的地方:我感觉按她们这么学,主要还是从逻辑上着手,而没有更多的去理解计算机相关的知识。
对于闭开区间或者双闭区间的这种区别我以前倒是没怎么想过:一般碰到边界的地方都是心里默念一会,笑。
如果她以后对计算机还是有兴趣的话,我还是让她了解一下吧,看看能不能纠正过来。
【 在 milksea 的大作中提到: 】
: 这是一种错误的教学倾向。更极端的是部分信息学竞赛选手还会养成分配数组总是多分配5个10个甚至100个的奇怪习惯,目的是为了防止越界,而不是自己想清楚程序下标的边界——越界访问经常伴随着算法也有问题。
: 如果确实非常想用从1开始的下标,还有一种办法是分配arr[n],使用时则用ptr=arr-1来做下标访问,这样ptr的下标范围就是1到n。这个技巧来自numeric recipe,我揣测目的是为了方便匹配数学文献的公式(下标一般从1开始)。但必须指出这种技巧也是不妥的,在C/C++中是undefined bahavior,因为不能保证数组前一个元素的地址是存在的或者可访问的,尽管绝大多数情况这办法能用。
: 无论如何,习惯了闭开区间记法后,其实是利大于弊的。比如把n个元素的数组均分,那就是 [0,n/2) 和 [n/2,n) 两块。用双闭区间下标 1 开始就变成了 [1, n/2] 和 [n/2+1, n]。这种 +1 运算太频繁了,其实很容易出问题。数学文献中就因为用闭区间下标导致频繁出现 +1,其实是很烦的。
--
FROM 14.16.209.*
我不确定她们以后会不会改过来。
不过我觉得从1开始能够让她们容易理解,避免刚开始的时候在数组边界经常出错,从而能掌握一些编程的基本方法理念的话,也未尝不可。
【 在 IOIII 的大作中提到: 】
: 首先,语言怎么定义就怎么教,自作聪明要不得;
: 其次,连下标从0开始都理解不了,为啥要学编程呢?
:
--
FROM 183.8.129.*
笑,能够维持她们的兴趣就不错了...
不过话说回来,我觉得我这个行业 90%以上的码农其实没创造什么价值
【 在 shearyli 的大作中提到: 】
: ...离散数学学好了么?
: 数学是编程的基础,基础不够强练编程,就好比梅超风强练九阴真经!
--
FROM 183.8.129.*
现在学到字符串了。然后发现在做一个叫“大数加减法”的题目的时候,切换到从0 开始了...
不过不知道是娃自己做的 还是我老婆帮忙的。
【 在 il15 的大作中提到: 】
: 发现她们老师对数组的处理都是从下标1开始了,可能便于理解和不容易出错。
: 想想看也是个不错的方法...
--
FROM 14.150.164.*