1、课程基本信息 课题算法与程序综合应用 1 教科书 书名:信息技术必修 1 数据与计算 人民教育出版社;中国地图出版社出版日期:2019 年 6 月 教学目标 教学目标:教学目标: 1. 复习与巩固 Python 语言的语句内涵,强化相关的编程知识; 2. 通过编程实践,体验用计算机解决问题的一般过程,从而理解此过程 中各个环节的实际内涵与意义; 3. 通过对枚举、解析两种算法的实践,理解通过优化算法和综合应用算 法思想来提高解决问题效率的意义。 教学重点教学重点:体验用计算机解决问题的一般过程,从而理解此过程中各个环节的 实际内涵与意义。 教学难点:教学难点:理解综合应用各种算法的思想来提升解
2、决问题有效性的实际意义。 教学过程 时间教学环节主要师生活动 1课前准备 1.打开“自主学习任务单” ; 2.打开 Python 语言编译器 Jupyter Notebook。 8 初步体验 以“韩信点兵”的习题为例,引导学生开始体验计算机解决问题 的一般过程。 【步骤 1】提出问题 韩信是汉初著名军事家,传说他统计士兵数目有个独特的方法。 例如,先令士兵排成 5 列纵队,结果余 1 人;接着,命令士兵排成 6 列纵队,结果余 5 人;再命令士兵排成 7 列纵队,结果余 4 人;最后 命令士兵排成 11 列纵队,结果余 10 人。这样他便知道士兵的总人数 了。这种计数的方法被后人称为“韩信点兵
3、” 。 初步体验 试编写程序计算士兵的数目。 引导学生回顾前面课时中学习过的“计算机解决问题的一般过 程”的几个步骤,带领学生对问题进行条理性的分析。 【步骤 2】分析问题 将问题转化为数学问题,列出不定方程组 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ,需 要求解 X 的数值。 【步骤 3】设计算法 结合计算机计算能力强、运算速度快的特点,引导学生尝试用枚 举法来解决问题,并呈现算法流程图。 【步骤 4】编程调试 在枚举法的基本编程思想的引导下,以 for 循环结构语句、if 条件语句和具体表达式的写法为基本内容, 带领学生一步一步完成程 序代码的输入,
4、并在编译器中运行。 同时满足: X%5=1,X%6=5, X%7=4,X%11=10 输出 X X:相应范围内 依次取值 否 是 for X in range (4000,5000): ifX%5=1 and X%6=5 and X%7=4 and X%11=10: print(X) 【步骤 5】解决问题 运行,得出在“4000 多人”的情况下,满足条件的数值为 4421。 问题似乎解决了?又似乎解决得不是那么完善? 13 深入体验 提出程序的改进方案,从而引导学生认识并体验计算机解决问 题并非纯粹是一个线性的过程,其间可能会反复循环、多次调整。 【任务一】理解改进后的程序,输入到编译器中运行
5、,观察运行的 结果。 y5=int(input(排成 5 列纵队,余下的人数:) y6=int(input(排成 6 列纵队,余下的人数:) y7=int(input(排成 7 列纵队,余下的人数:) y11=int(input(排成 11 列纵队,余下的人数:) A=int(input(部队总人数有几千人左右?) for X in range (A-1000,A+1000): if y5=X%5 and y6=X%6 and y7=X%7 and y11=X%11: print(部队士兵总数应该是:, X , 人) 通过小视频播放,了解更贴近历史真实情况的“韩信点兵” , 并引导学生对新问题
6、进行分析,并尝试使用解析算法来编写程序、 解决问题。 采用解析算法的原因在于:算法也有优劣之分,要尽可能地提 升算法解决问题的效率。 新的“韩信点兵”问题又可以分为“同余”与“非同余”两大 类问题,各自都有不同的解析式可以帮助求解问题的答案。 【任务二】对于用解析算法解决“同余问题”的情况,画出相应的 算法流程图。 根据解析式和新的解析算法,再引导学生编写出新的程序代 码,并运行,以观察运行的结果。 A= int(input(士兵约有几百来人?) 提 出 问 题 分 析 问 题 设 计 问 题 编 程 调 试 解 决 问 题 深入体验 y = int(input(排好 3 列、5 列、7 列纵
7、队后,所余人数为:) n = (A+100) / 105 X = 105*n + y print(这群士兵有:, X , 人。) 然后,带领学生了解史书中对于“非同余问题”的求解歌诀, 得出新的解析式。并根据此解析式,编写新的程序,运行后观察结 果,发现问题。 A= int(input(士兵约有几百人?) y1 = int(input(排 3 列纵队,所余人数为:) y2 = int(input(排 5 列纵队,所余人数为:) y3 = int(input(排 7 列纵队,所余人数为:) for n in range (A-100)/105,(A+100)/105): X = y1 * 70
8、+ y2 * 21 + y3 * 15 - 105 * n if X A-100 and X A+100: print(这群士兵有:,X,人。) 此时,引导学生发现:此程序的运行过程,不是单纯的解析算 法思想的应用,其中也用到枚举法。而且是利用解析式缩小了枚举 的范围,自然也是提升了运行的效率。 从而,提醒学生注意:要辩证地看待算法与编程之间的关系要辩证地看待算法与编程之间的关系, 要学会综合地应用算法思想来解决问题要学会综合地应用算法思想来解决问题。 最后,再次引导学生发现程序中的漏洞,并在进行简单的、提 示性的分析后,布置第三个任务。 【任务三】在已有的程序上做出修改,以完善程序,使得输出准确 的结果。 2课堂小结 1 布置课后 练习 “鸡翁一值钱五, 鸡母一值钱三, 鸡雏三值钱一。 百钱买百鸡, 问鸡翁、鸡母、鸡雏各几何?” 算经 (北魏张丘建) 编写程序,解决此问题。