2.4.3 算法与程序实现的综合应用1 课件(50张ppt)+教案+学习任务单+练习题

文档属性

名称 2.4.3 算法与程序实现的综合应用1 课件(50张ppt)+教案+学习任务单+练习题
格式 zip
文件大小 21.7MB
资源类型 教案
版本资源 中图版(2019)
科目 信息技术(信息科技)
更新时间 2020-12-11 22:44:50

文档简介

自主学习任务单
学习指南
课题名称:算法与程序综合应用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("部队总人数有几千人左右?"))
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
,
"人")
任务二:观看微课中“用解析法求解同余问题”的内容,尝试画出解决相关问题的算法流程图。
任务三:观看微课中“用‘孙子歌诀’解析求解非同余的、物不知数的问题”的内容,在以下案例程序代码的基础上进行修改,得到新的程序。并将语句输入编译器,运行,观察运行结果。
新程序要实现的功能如下:
(1)可以输入士兵人数的范围(最小值、最大值);
(2)可以输入士兵排成3、5、7列纵队后分别得到的余数;
(3)程序运行后,输出士兵准确的人数。
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
+
y2
21
+
y3
15
-
105
n
if
X
>
A-100
and
X
<
A+100:
print("这群士兵有:",X,"人。")
拓展阅读资料
《孙子算经》及其中关于“物不知数”的简介
《孙子算经》作者不可考,约成书于四、五世纪(中国南北朝时期)。此书是算经十书之一,也是中国古代最重要的数学著作之一。
在《孙子算经》中,“物不知数”是其最重要的成就之一。书中提到:“今有物,不知其数。三三数之,剩二;五五数之,剩三;七七数之,剩二。问:物几何?答曰:二十三。”书中不仅给出了题目的答案,更重要的是给出了解法。此解法也被西方称之为:中国余数定理。
评述算法的优劣性
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。
时间复杂度:
一个算法执行所耗费的时间。?
空间复杂度:
运行完一个程序所需内存的大小。
评测反思
知识小测:
结合微课资源,可以与同学进行讨论,共同完成以下作业内容:
“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”
——《算经》(北魏·张丘建)
【译文】公鸡每只五文钱,母鸡每只三文钱,小鸡每只一文钱。用一百文钱买了100只鸡,公鸡、母鸡、小鸡各买了多少只?
要求:编写程序,解决此问题。
注意:算法执行的效率;交互界面的友好。
学习评价:
评价指标评价等级及分值得分优秀
9-10分良好
5-8分一般
3-4分自评互评老师评项目实践完成度(50%)项目自主创新与个性化设计(10%)项目学习交流合作(20%)成果展示(20%)
学习反思:
通过本节课的学习,你最大的收获是什么?
在实践操作环节,遇到了哪些困难?你是如何解决的?
关于本节课的学习内容,列出你最想进一步研究的内容。课程基本信息
课例编号
学科
信息技术
年级
高一
学期
秋季
课题
算法与程序综合应用1
教科书
书名:
信息技术必修1
《数据与计算》
人民教育出版社;中国地图出版社
出版日期:2019

6

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




解决问题
计算机解决问题的一般过程
计算机解决问题的一般过程








设计
方案
编程调试
解决问题
计算机解决问题的一般过程








设计
算法
编程调试
解决问题
物不知数。
提出问题
物不知数。
提出问题
假设士兵总人数为X
分析问题
分析问题
设计算法
计算机的特点之一:计算能力强、运算速度快
算法一:枚举法
提出问题
设计算法
算法一:枚举法
X
÷
5
=
a

1
X
÷
6
=
b

5
X
÷
7
=
c

4
X
÷11
=
d

10
设计算法
算法一:枚举法
输出X
X:相应范围内依次取值


同时满足:
X%5==1
,X%6==5,
X%7==4,X%11==10
设计算法
分析问题
编程调试
提出问题
for
X
in
range
(4000,5000):
语句1:循环结构
士兵人数的大致范围?
编程调试
四千多人
X%5==1
语句2-1:表达式
编程调试
X%5==1
and
X%6==5
and
X%7==4
and
X%11==10
语句2-2:条件限定
print(X)
if
:
编程调试
for
X
in
range
(4000,5000):
X%5==1
and
X%6==5
and
X%7==4
and
X%11==10
print(X)
if
:
编程调试
运行程序
编程调试
4421
编程调试
分析问题
解决问题
设计算法
提出问题
程序的改进
数据输入可否更灵活?
程序界面可否更友好?
计算机解决问题的一般过程








设计
算法
编程调试
解决问题
程序的改进
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
,
"人")
任务一(“学习任务单”)
历史上的“韩信点兵”
计算机解决问题的一般过程








设计
算法
编程调试
解决问题
分析问题
X
÷
3
=
a

1
X
÷
5
=
b

1
X
÷
7
=
c

1
士兵人数(X)的大致范围:600余人
设计算法
算法一:枚举法
简便
设计算法
算法二:解析法
提升算法的效率
设计算法
X
÷
3
=
a

1
X
÷
5
=
b

1
X
÷
7
=
c

1
算法二:解析法
X
-
1
=
3
a
X
-
1
=
5
b
X

1
=
7
c
同余问题
X-1同时满足被3、5、7整除。
设计算法
算法二:解析法
X=105
n+1
同余问题
Xmin=3×5×7+1
=105+1
=106
n=(600+100)//105
任务二(“学习任务单”)
解析式:X
=
105
n
+
余数
尝试画出流程图
A
=
int(input("士兵约有几百来人?"))
y
=
int(input("排好3列、5列、7列纵队后,所余人数为:"))
n
=
(A+100)
//
105
X
=
105
n
+
y
print("这群士兵有:",
X
,
"人。")
编程调试
同余问题
编程调试
解决问题
新问题
如果不同余?
X
÷
3
=
a

y1
X
÷
5
=
b

y2
X
÷
7
=
c

y3
设计算法
算法二:解析法
“物不知数”(《孙子算经》)
“孙子歌诀”(明·程大位)
设计算法
算法二:解析法
孙子歌诀
除百零五便得知。
三人同行七十稀,
五树梅花廿一支,
七子团圆正半月,
X
+
y1
=
3
a
X
+
y2
=
5
b
X
+
y3
=
7
c
设计算法
算法二:解析法
除百零五便得知。
三人同行七十稀,
五树梅花廿一支,
七子团圆正半月,
y1×70
y2×21
y3×15
y1×70+y2×21+y3×15-105n
70=2×(5×7)
21=3×7
15=3×5
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
+
y2
21
+
y3
15
-
105
n
if
X
>
A-100
and
X
<
A+100:
print("这群士兵有:",X,"人。")
编程调试
编程调试
A
=
int(input("士兵约有几百人?"))
……
for
n
in
range
((A-100)//105,
(A+100)//105):
X
=
y1
70
+
y2
21
+
y3
15
-
105
n
if
X
>
A-100
and
X
<
A+100:
print("这群士兵有:",X,"人。")
解析算法
A
=
int(input("士兵约有几百人?"))
……
for
n
in
range
((A-100)//105,
(A+100)//105):
X
=
y1
70
+
y2
21
+
y3
15
-
105
n
if
X
>
A-100
and
X
<
A+100:
print("这群士兵有:",X,"人。")
解析算法
枚举算法
A
=
int(input("士兵约有几百人?"))
……
for
n
in
range
((A-100)//105,
(A+100)//105):
X
=
y1
70
+
y2
21
+
y3
15
-
105
n
if
X
>
A-100
and
X
<
A+100:
print("这群士兵有:",X,"人。")
枚举算法
解析算法
多种算法思想
综合应用
完善程序
A
=
int(input("士兵约有几百人?"))
y1
=
int(input("排3列纵队,所余人数为:"))
……
for
n
in
((A-100)//105,
(A+100)//105):
X
=
y1
70
+
y2
21
+
y3
15
-
105
n
if
X
>
A-100
and
X
<
A+100
:
print("这群士兵有:",
X
,"人。")
编程调试
任务三(“学习任务单”)
修改此程序,
使之运行的结果准确!
A
=
int(input("士兵约有几百人?"))
……
for
n
in
((A-100)//105,
(A+100)//105):
X
=
y1
70
+
y2
21
+
y3
15
-
105
n
if
X
>
A-100
and
X
<
A+100
:
print("这群士兵有:",
X
,
"人。")
任务三(“学习任务单”)
提示:X
=
y1
70
+
y2
21
+
y3
15
-
105
n
X
=
y1
70
+
y2
21
+
y3
15
+
105
n
新程序要实现的功能如下:
(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("部队总人数有几千人左右?"))
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
,
"人")
任务二:观看微课中“用解析法求解同余问题”的内容,尝试画出解决相关问题的算法流程图。
任务三:观看微课中“用‘孙子歌诀’解析求解非同余的、物不知数的问题”的内容,在以下案例程序代码的基础上进行修改,得到新的程序。并将语句输入编译器,运行,观察运行结果。
新程序要实现的功能如下:
(1)可以输入士兵人数的范围(最小值、最大值);
(2)可以输入士兵排成3、5、7列纵队后分别得到的余数;
(3)程序运行后,输出士兵准确的人数。
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
+
y2
21
+
y3
15
-
105
n
if
X
>
A-100
and
X
<
A+100:
print("这群士兵有:",X,"人。")
课后练习
结合微课资源,可以与同学进行讨论,共同完成以下作业内容:
“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”
——《算经》(北魏·张丘建)
【译文】公鸡每只五文钱,母鸡每只三文钱,小鸡每只一文钱。用一百文钱买了100只鸡,公鸡、母鸡、小鸡各买了多少只?
要求:编写程序,解决此问题。
注意:算法执行的效率;交互界面的友好。