资源简介 自主学习任务单学习指南课题名称:算法与程序综合应用1学习目标:复习与巩固Python语言的语句内涵,强化相关的编程知识;体验使用Python语言编程综合解决问题的完整过程;理解通过优化算法和综合应用算法思想,以提高解决问题效率的意义。本节知识点思维导图:学习任务课前测验:回顾本单元《算法与程序实现》前面几个课时学习的内容,回答以下问题:计算机解决问题的一般过程是怎样的?请用图示表现出来。你知道哪些经典的算法?请写出1-2个算法的名字,并举例说明其内涵。任务一:观看微课中“用枚举法求解问题、编写程序”的内容,理解以下案例程序代码的内涵,在Python语言编译器中输入相关代码,体验运行结果。y5=int(input("排成5列纵队,余下的人数:"))y6=int(input("排成6列纵队,余下的人数:"))y7=int(input("排成7列纵队,余下的人数:"))y11=int(input("排成11列纵队,余下的人数:"))A=int(input("部队总人数有几千人左右?"))forXinrange(A-1000,A+1000):ify5==X%5andy6==X%6andy7==X%7andy11==X%11:print("部队士兵总数应该是:",X,"人")任务二:观看微课中“用解析法求解同余问题”的内容,尝试画出解决相关问题的算法流程图。任务三:观看微课中“用‘孙子歌诀’解析求解非同余的、物不知数的问题”的内容,在以下案例程序代码的基础上进行修改,得到新的程序。并将语句输入编译器,运行,观察运行结果。新程序要实现的功能如下:(1)可以输入士兵人数的范围(最小值、最大值);(2)可以输入士兵排成3、5、7列纵队后分别得到的余数;(3)程序运行后,输出士兵准确的人数。A=int(input("士兵约有几百人?"))y1=int(input("排3列纵队,所余人数为:"))y2=int(input("排5列纵队,所余人数为:"))y3=int(input("排7列纵队,所余人数为:"))forninrange((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")拓展阅读资料《孙子算经》及其中关于“物不知数”的简介《孙子算经》作者不可考,约成书于四、五世纪(中国南北朝时期)。此书是算经十书之一,也是中国古代最重要的数学著作之一。在《孙子算经》中,“物不知数”是其最重要的成就之一。书中提到:“今有物,不知其数。三三数之,剩二;五五数之,剩三;七七数之,剩二。问:物几何?答曰:二十三。”书中不仅给出了题目的答案,更重要的是给出了解法。此解法也被西方称之为:中国余数定理。评述算法的优劣性同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。时间复杂度:一个算法执行所耗费的时间。?空间复杂度:运行完一个程序所需内存的大小。评测反思知识小测:结合微课资源,可以与同学进行讨论,共同完成以下作业内容:“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”——《算经》(北魏·张丘建)【译文】公鸡每只五文钱,母鸡每只三文钱,小鸡每只一文钱。用一百文钱买了100只鸡,公鸡、母鸡、小鸡各买了多少只?要求:编写程序,解决此问题。注意:算法执行的效率;交互界面的友好。学习评价:评价指标评价等级及分值得分优秀9-10分良好5-8分一般3-4分自评互评老师评项目实践完成度(50%)项目自主创新与个性化设计(10%)项目学习交流合作(20%)成果展示(20%)学习反思:通过本节课的学习,你最大的收获是什么?在实践操作环节,遇到了哪些困难?你是如何解决的?关于本节课的学习内容,列出你最想进一步研究的内容。课程基本信息课例编号学科信息技术年级高一学期秋季课题算法与程序综合应用1教科书书名:信息技术必修1《数据与计算》人民教育出版社;中国地图出版社出版日期:2019年6月教学目标教学目标:复习与巩固Python语言的语句内涵,强化相关的编程知识;通过编程实践,体验用计算机解决问题的一般过程,从而理解此过程中各个环节的实际内涵与意义;通过对枚举、解析两种算法的实践,理解通过优化算法和综合应用算法思想来提高解决问题效率的意义。教学重点:体验用计算机解决问题的一般过程,从而理解此过程中各个环节的实际内涵与意义。教学难点:理解综合应用各种算法的思想来提升解决问题有效性的实际意义。教学过程时间教学环节主要师生活动1’课前准备打开“自主学习任务单”;打开Python语言编译器JupyterNotebook。8’初步体验初步体验以“韩信点兵”的习题为例,引导学生开始体验计算机解决问题的一般过程。【步骤1】提出问题韩信是汉初著名军事家,传说他统计士兵数目有个独特的方法。例如,先令士兵排成5列纵队,结果余1人;接着,命令士兵排成6列纵队,结果余5人;再命令士兵排成7列纵队,结果余4人;最后命令士兵排成11列纵队,结果余10人。这样他便知道士兵的总人数了。这种计数的方法被后人称为“韩信点兵”。试编写程序计算士兵的数目。引导学生回顾前面课时中学习过的“计算机解决问题的一般过程”的几个步骤,带领学生对问题进行条理性的分析。【步骤2】分析问题将问题转化为数学问题,列出不定方程组,需要求解X的数值。【步骤3】设计算法结合计算机计算能力强、运算速度快的特点,引导学生尝试用枚举法来解决问题,并呈现算法流程图。【步骤4】编程调试在枚举法的基本编程思想的引导下,以for循环结构语句、if条件语句和具体表达式的写法为基本内容,带领学生一步一步完成程序代码的输入,并在编译器中运行。forXinrange(4000,5000):ifX%5==1andX%6==5andX%7==4andX%11==10:print(X)【步骤5】解决问题运行,得出在“4000多人”的情况下,满足条件的数值为4421。问题似乎解决了?又似乎解决得不是那么完善?13’深入体验深入体验提出程序的改进方案,从而引导学生认识并体验计算机解决问题并非纯粹是一个线性的过程,其间可能会反复循环、多次调整。【任务一】理解改进后的程序,输入到编译器中运行,观察运行的结果。y5=int(input("排成5列纵队,余下的人数:"))y6=int(input("排成6列纵队,余下的人数:"))y7=int(input("排成7列纵队,余下的人数:"))y11=int(input("排成11列纵队,余下的人数:"))A=int(input("部队总人数有几千人左右?"))forXinrange(A-1000,A+1000):ify5==X%5andy6==X%6andy7==X%7andy11==X%11:print("部队士兵总数应该是:",X,"人")通过小视频播放,了解更贴近历史真实情况的“韩信点兵”,并引导学生对新问题进行分析,并尝试使用解析算法来编写程序、解决问题。采用解析算法的原因在于:算法也有优劣之分,要尽可能地提升算法解决问题的效率。新的“韩信点兵”问题又可以分为“同余”与“非同余”两大类问题,各自都有不同的解析式可以帮助求解问题的答案。【任务二】对于用解析算法解决“同余问题”的情况,画出相应的算法流程图。根据解析式和新的解析算法,再引导学生编写出新的程序代码,并运行,以观察运行的结果。A=int(input("士兵约有几百来人?"))y=int(input("排好3列、5列、7列纵队后,所余人数为:"))n=(A+100)//105X=105n+yprint("这群士兵有:",X,"人。")然后,带领学生了解史书中对于“非同余问题”的求解歌诀,得出新的解析式。并根据此解析式,编写新的程序,运行后观察结果,发现问题。A=int(input("士兵约有几百人?"))y1=int(input("排3列纵队,所余人数为:"))y2=int(input("排5列纵队,所余人数为:"))y3=int(input("排7列纵队,所余人数为:"))forninrange((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")此时,引导学生发现:此程序的运行过程,不是单纯的解析算法思想的应用,其中也用到枚举法。而且是利用解析式缩小了枚举的范围,自然也是提升了运行的效率。从而,提醒学生注意:要辩证地看待算法与编程之间的关系,要学会综合地应用算法思想来解决问题。最后,再次引导学生发现程序中的漏洞,并在进行简单的、提示性的分析后,布置第三个任务。【任务三】在已有的程序上做出修改,以完善程序,使得输出准确的结果。2’课堂小结1’布置课后练习“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”——《算经》(北魏·张丘建)编写程序,解决此问题。(共50张PPT)算法与程序综合应用1(第十九课时)课前准备2-1调出“自主学习任务单”,以配合本节课的学习内容,完成相关的学习任务。打开Anaconda管理器中JupyterNotebook,并新建一个Python3脚本;课前准备2-2“物不知数”韩信是汉初著名军事家,传说他统计士兵数目有个独特的方法。例如,先令士兵排成5列纵队,结果余1人;接着,命令士兵排成6列纵队,结果余5人;再命令士兵排成7列纵队,结果余4人;最后命令士兵排成11列纵队,结果余10人。这样他便知道士兵的总人数了。这种计数的方法被后人称为“韩信点兵”。试编写程序计算士兵的数目。提出问题—“物不知数”提出问题—求不出来。修改题目?士兵的总数是多少?提出问题解决问题计算机解决问题的一般过程计算机解决问题的一般过程提出问题分析问题设计方案编程调试解决问题计算机解决问题的一般过程提出问题分析问题设计算法编程调试解决问题物不知数。提出问题物不知数。提出问题假设士兵总人数为X分析问题分析问题设计算法计算机的特点之一:计算能力强、运算速度快算法一:枚举法提出问题设计算法算法一:枚举法X÷5=a…1X÷6=b…5X÷7=c…4X÷11=d…10设计算法算法一:枚举法输出XX:相应范围内依次取值是否同时满足:X%5==1,X%6==5,X%7==4,X%11==10设计算法分析问题编程调试提出问题forXinrange(4000,5000):语句1:循环结构士兵人数的大致范围?编程调试四千多人X%5==1语句2-1:表达式编程调试X%5==1andX%6==5andX%7==4andX%11==10语句2-2:条件限定print(X)if:编程调试forXinrange(4000,5000):X%5==1andX%6==5andX%7==4andX%11==10print(X)if:编程调试运行程序编程调试4421编程调试分析问题解决问题设计算法提出问题程序的改进数据输入可否更灵活?程序界面可否更友好?计算机解决问题的一般过程提出问题分析问题设计算法编程调试解决问题程序的改进y5=int(input("排成5列纵队,余下的人数:"))y6=int(input("排成6列纵队,余下的人数:"))y7=int(input("排成7列纵队,余下的人数:"))y11=int(input("排成11列纵队,余下的人数:"))A=int(input("部队总人数有几千人左右?"))forXinrange(A-1000,A+1000):ify5==X%5andy6==X%6andy7==X%7andy11==X%11:print("部队士兵总数应该是:",X,"人")任务一(“学习任务单”)历史上的“韩信点兵”计算机解决问题的一般过程提出问题分析问题设计算法编程调试解决问题分析问题X÷3=a…1X÷5=b…1X÷7=c…1士兵人数(X)的大致范围:600余人设计算法算法一:枚举法简便设计算法算法二:解析法提升算法的效率设计算法X÷3=a…1X÷5=b…1X÷7=c…1算法二:解析法X-1=3aX-1=5bX–1=7c同余问题X-1同时满足被3、5、7整除。设计算法算法二:解析法X=105n+1同余问题Xmin=3×5×7+1=105+1=106n=(600+100)//105任务二(“学习任务单”)解析式:X=105n+余数尝试画出流程图A=int(input("士兵约有几百来人?"))y=int(input("排好3列、5列、7列纵队后,所余人数为:"))n=(A+100)//105X=105n+yprint("这群士兵有:",X,"人。")编程调试同余问题编程调试解决问题新问题如果不同余?X÷3=a…y1X÷5=b…y2X÷7=c…y3设计算法算法二:解析法“物不知数”(《孙子算经》)“孙子歌诀”(明·程大位)设计算法算法二:解析法孙子歌诀除百零五便得知。三人同行七十稀,五树梅花廿一支,七子团圆正半月,X+y1=3aX+y2=5bX+y3=7c设计算法算法二:解析法除百零五便得知。三人同行七十稀,五树梅花廿一支,七子团圆正半月,y1×70y2×21y3×15y1×70+y2×21+y3×15-105n70=2×(5×7)21=3×715=3×5A=int(input("士兵约有几百人?"))y1=int(input("排3列纵队,所余人数为:"))y2=int(input("排5列纵队,所余人数为:"))y3=int(input("排7列纵队,所余人数为:"))forninrange((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")编程调试编程调试A=int(input("士兵约有几百人?"))……forninrange((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")解析算法A=int(input("士兵约有几百人?"))……forninrange((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")解析算法枚举算法A=int(input("士兵约有几百人?"))……forninrange((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")枚举算法解析算法多种算法思想综合应用完善程序A=int(input("士兵约有几百人?"))y1=int(input("排3列纵队,所余人数为:"))……fornin((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")编程调试任务三(“学习任务单”)修改此程序,使之运行的结果准确!A=int(input("士兵约有几百人?"))……fornin((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")任务三(“学习任务单”)提示:X=y170+y221+y315-105nX=y170+y221+y315+105n新程序要实现的功能如下:(1)输入士兵人数的大约数量(整百值);(2)输入士兵排成3、5、7列纵队后分别得到的余数;(3)程序运行后,输出士兵准确的人数。课堂小结韩信点兵体验计算机解决问题的过程提出问题分析问题设计算法编程调试解决问题综合应用1——数值计算课堂小结实践算法枚举法解析法提出问题分析问题设计算法编程调试解决问题综合应用1——数值计算韩信点兵体验计算机解决问题的过程课后练习“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”——《算经》(北魏·张丘建)【译文】公鸡每只五文钱,母鸡每只三文钱,小鸡每只一文钱。用一百文钱买了100只鸡,公鸡、母鸡、小鸡各买了多少只?要求:编写程序,解决此问题。注意:算法执行的效率;交互界面的友好。课程基本信息课题算法与程序综合应用1教科书书名:信息技术必修一:数据与计算出版社:人民教育出版社/中国地图出版社出版日期:2019年6月学生信息姓名学校班级学号课堂任务任务一:观看微课中“用枚举法求解问题、编写程序”的内容,理解以下案例程序代码的内涵,在Python语言编译器中输入相关代码,体验运行结果。y5=int(input("排成5列纵队,余下的人数:"))y6=int(input("排成6列纵队,余下的人数:"))y7=int(input("排成7列纵队,余下的人数:"))y11=int(input("排成11列纵队,余下的人数:"))A=int(input("部队总人数有几千人左右?"))forXinrange(A-1000,A+1000):ify5==X%5andy6==X%6andy7==X%7andy11==X%11:print("部队士兵总数应该是:",X,"人")任务二:观看微课中“用解析法求解同余问题”的内容,尝试画出解决相关问题的算法流程图。任务三:观看微课中“用‘孙子歌诀’解析求解非同余的、物不知数的问题”的内容,在以下案例程序代码的基础上进行修改,得到新的程序。并将语句输入编译器,运行,观察运行结果。新程序要实现的功能如下:(1)可以输入士兵人数的范围(最小值、最大值);(2)可以输入士兵排成3、5、7列纵队后分别得到的余数;(3)程序运行后,输出士兵准确的人数。A=int(input("士兵约有几百人?"))y1=int(input("排3列纵队,所余人数为:"))y2=int(input("排5列纵队,所余人数为:"))y3=int(input("排7列纵队,所余人数为:"))forninrange((A-100)//105,(A+100)//105):X=y170+y221+y315-105nifX>A-100andX<A+100:print("这群士兵有:",X,"人。")课后练习结合微课资源,可以与同学进行讨论,共同完成以下作业内容:“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”——《算经》(北魏·张丘建)【译文】公鸡每只五文钱,母鸡每只三文钱,小鸡每只一文钱。用一百文钱买了100只鸡,公鸡、母鸡、小鸡各买了多少只?要求:编写程序,解决此问题。注意:算法执行的效率;交互界面的友好。 展开更多...... 收起↑ 资源列表 算法与程序综合应用1 (第十九课时)-任务单.docx 算法与程序综合应用1 (第十九课时)-教学设计.docx 算法与程序综合应用1 (第十九课时)-练习题.docx 算法与程序综合应用1 (第十九课时)-课件.pptx