4.1 算法及其特征 教案(2课时)

文档属性

名称 4.1 算法及其特征 教案(2课时)
格式 docx
文件大小 33.0KB
资源类型 教案
版本资源 教科版(2019)
科目 信息技术(信息科技)
更新时间 2020-11-23 15:46:30

图片预览

文档简介

教科版2019信息技术必修1数据与计算
第4单元计算与问题解决4.1 算法及其特征教学设计
【教材分析】
程序设计是给出解决特定问题程序的过程。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。算法是程序设计中的核心,算法依赖程序设计语言来实现。
程序设计语言有较大的局限性,不能用来解决所有类型的问题,人们要根据所需解决的问题不同而选择不同的语言,而语言本身也在不断变化和更新。因此,语言具有不稳定和变化更新快的特征;算法则比较稳定,它与描述算法的语言无关,可以在更长的时间内发挥作用。程序设计语言只要多实践多使用就能熟能生巧,算法则需要比较深入的理论基础知识,必须经过严格的科学训练。
基于以上认识,程序设计语言知识可以作为一种技能来培养,程序设计方法可以作为一个规则来遵循,算法可以作为科学方法来传授,这样才能适应时代的需要,跟上技术的飞速发展。
通过前面单元的学习,我们可以认为学生具备初步编写程序的简单技能,如基本的输入输出语句、选择结构和循环结构的语句实现、列表及文件的初步操作等。本项目既要唤醒学生已有的技能,又要让学生初识算法,因此在项目及活动设计时,抛开晦涩难懂的概念和语法,不做内容上的堆积和罗列,采用了生动有趣的活动形式,每个活动中会涉及到一个或几个知识点。
代码不是最终目的,而是作为载体,让学生初步了解程序设计的基本方法,在面对实际问题的时候,可以换一种思维,找到有效的算法。
本节的项目“软件开发社招新”主要包含“探讨面试题的解决方案”和“求解‘谁是冠军’”两个任务,包含4个活动。任务一的重点在已有知识和技能的唤醒,任务二的重点是最基本算法思想的介绍。
【教学建议】
通过本项目的教学应让学生了解程序设计的基本方法和基本流程,利用学生感兴趣的实例,让学生感觉程序设计并不是遥不可及的,而是人机对话的一种方式,让学生带着轻松的心情,在游戏中学习,在学习中游戏。以活动为中心,增加拓展类知识,兼顾到不同层次学生的需求。
“探讨面试题的解决方案”包含三个活动。
活动1寻找“开关对应关系”重在定性分析,挖掘对象的特征,重温算法的结构化表示如流程图。
活动2寻找“被污染的药丸”重在定量分析,让学生尝试对生活中的实体进行数据抽象,针对实际问题分析已知信息和未知信息,挖掘程序中的输入、输出信息,了解算法的特征。
活动3寻找“误删的ID号”,将实例的增删抽象成数值的加减,同时复习前面单元中学会的编程技术,如累加、文件读写等。
任务二求解“谁是冠军”,介绍最简单最直接的算法思想——“枚举”,尝试将自然语言转换为程序表达,了解逻辑运算在程序设计中的应用。
两个任务4个活动,编程量不大,因此建议在教学过程中,重点放在分析问题,解决问题的过程上,把握每个活动的重难点。
根据学生实际情况,设定“读懂程序”“修改程序”“编写程序”“自创问题及编程实现”四个梯度,使每个学生都能获得成功的体验。
【教学目标】
1.熟悉将解决问题的方法归结为一系列清晰、 准确的步骤的过程。
2.了解算法的基本要素和重要特征。
3.运用恰当的方式描述算法。
4.运用Python语言实现简单算法,解决问题。
【教学重点、难点】
将解决问题的方法归结为一系列清晰、 准确的步骤的过程。算法的基本要素和重要特征。运用恰当的方式描述算法。运用Python语言实现简单算法,解决问题。
【教学过程】
第一课时
一、引入
计算科学是关于计算的学问,它主要研究哪些问题是可计算的以及怎样去计算。计算是获得信息的一种过程, 所以计算是动态的,信息的获得是计算的延伸。可以说,问题解决的过程,实质上是描述和变换信息的过程。
本单元我们将对“计算” 进行更多探究。我们将进一一步了解计算与算法的关系,明确算法的基本特征,尝试用枚举的思想实现简单算法;掌握数值类及非数值类问题求解中的常用算法思想;学会分析问题,针对问题的解决选择合理的算法,运用已学的计算知识解决实际问题。
算法并不遥远,它就在我们身边。日常生活中,很多看似平常的做法都蕴含着一-定的道理,如果将这些做法抽象成数学描述可能就是- -些非常有效的算法。算法可能是一个计算公式,可能是一个贏得游戏的策略,也可能是一个解决综合问题的复杂方案。
软件设计师是业务领城和技术领域的专家。面对客户需求,软件设计师要对问题进行整体分析以找到解决方案,通过恰当的方式与客户沟通;面对技术问题,软件设计师需要借助计算机编程解决实际问题。我们将通过“软件开发社招新”项目讨论计算机编程解决问题的过程。
二、新课
本项目主要包含“探讨面试题的解决方案”和“求解‘谁是冠军’”两个任务。
任务一探讨 面试题的解决方案
活动1寻找“开关对应关系”
软件开发社团要招募新成员,报名的同学要经过面试才能加入。第一关面试题是:“一个房间有3盏灯, 房间外有3个开关分别控制这3盏灯,如图4.1.1所示。在只允许进房间一次的情况下,如何判断哪个开关控制哪盏灯?”
设计算法是解决问题的核心,它的基本任务是对问题进行定性分析和定量分析,遵循算法的特征和约定,寻求计算的方法和规则,明确解决问题的途径。
从表面上看,灯只有亮、灭两种状态,但是灯又具有一种特殊性,即开灯的同时会伴随发光发热,因此灯被触摸时还有冷、热两种状态。综上所述,一盏灯可能有4种不同的状态。而在房间内共有3盏灯,完全可以保证每盏灯的状态都是唯一的。由于题目中并没有限制开关按动次数,所以3个开关的闭合状态是可以随意改变的。如何能使3盏灯处于不同的状态?
请在下框中写下你的步骤,在小组中比比谁的方法更快捷、更合理。归纳有效解决问题的具体步骤,对问题进行定性分析和定量分析,就能得出答案。
首先开1号、2号两个开关,2分钟后关闭1号开关,然后进房间,显然亮着的灯由2号开关控制。接下来摸一下另外两益不亮的灯,发热的灯肯定由1号开关控制。最后确定3号开关控制的灯。请同学们一起来完善如图4.1.2所示的“开关对应关系”流程图。
算法的重要特征
有穷性。算法必须能在执行有限个步骤之后终止。
确切性。算法中的每一-次运算都有明确的定义,具有无二义性,并且可以通过计算得到唯
一的结果。
输人项。一个算法有0个或多个输人,以刻画运算对象的初始情况,所谓0个输入是指算法
本身给出了初始条件。
输出项。算法-定要有输出。任何算法都不能“无功而返”。
可行性。算法中执行的任何计算都可以在有限时间内完成(也称为有效性)。算法中的运算都
必须是可以实现的。
从某种意义上说,算法也是一种数学模型。一般而言,问题求解的第一步是数学建模。用数学语言描述实际现象,将现实世界的问题抽象成数学模型,就可能发现问题的本质并判定其能否求解,继而找到求解该问题的方法和算法。
活动2定量分析,寻找“被污染的药丸”
面试的第二关是实验题。如图4.1.3所示,有4个分别装了4种药丸的药瓶,里面每颗药九都有单颗标准质量,其中有一个药瓶中的所有药九都被污染了。每颗被污染的药九比正常药丸增重1克。请在只允许称量一次的情况下,判断出哪个药瓶中的药丸被污染了。
如果从每个药瓶中取出1颗药丸分别进行称重,肯定可以判断出哪颗药丸被污染了,但是这种做法显然不符合“只能称量一次”的要求。改进方法?
考虑1颗药丸的重量变化,如果药九被污染,则增重 克,否则增重_ 克。从某一个药瓶中取出n颗药丸,如果被污染,则增重 克,否则增重_ 克
如果我们从不同的药瓶中取出不同颗数的药丸,你能根据增重情况找出被污染的药丸吗?
从第1个药瓶中取出1颗药丸,从第2个药瓶中取出2颗药丸,从第3个药瓶中取出3颗药九,从第4个药瓶中取出4颗药丸,共I0颗药九。如果增重 克,则___?号药瓶中的药丸被污染。
回顾算法的特点,思考一下,在这个问题中,哪些信息属于输入、哪些信息属于输出呢?
请设计程序并运行,使输入10颗药丸的总重量及4种药丸的单颗标准质量就可以看到结果,找到被污染的药丸。
活动3巧用运算,?寻找“误删的ID号"
面试的第三关是程序设计题。学校历届校友的数据存储在学校网络中心服务器中(?共10000条,无重复数据),某管理员由于误操作删除了一位校友的ID号(8位整数)。恰好在备份文件中保存了所有人员的ID号(无重复数据,无序)。怎样快速找出被误删的ID号以便恢复数据?
仔细分析问题,我们发现实际需要参与分析及处理的只有ID号,而且这些ID号的特征也很明显。请归纳ID号的特征,写在下面的横线上。
ID号的特征
①数据类型及大小范围:
②数据在两个文件中出现的次數:
③备份文件中ID号总和与故障文件中的ID号总和的差值为:
通过上面的分析,我们发现计算备份文件ID号总和与故障文件ID号总和的差值就是误删的ID号。
充分利用数值及计算的特点,可以将复杂的查找过程转换成简单的计算。
程序是我们和计算机沟通的主要途径。编写程序就是使用程序设计语言,将算法用程序代码的形式输入,并最终得到结果的过程。让我们一起来完成下面这个程序,并回顾文件读取的方法。
target= #设置初始值
f1=open('copy.txt',?'r') #打开备份文件
list1=f1.readlines() #按行读取备份文件
for?line?in #依次处理列表list1中的数据
target=?target+int(line) #将读取的数据做加运算
f1. #关闭备份文件
f2=open(‘trouble.txt',‘r')#打开故障文件
list2= #按行读取故障文件
for :#依次处理列表1ist2中的数据
target= #将读取的数据做减运算
#关闭故障文件
print("被误删的ID号是:",_____)#输出被误删的ID号
请设计copy.txt文件(?10个数,每行一个)和trouble.txt?文件(?9个在copy.txt文件中的数,每行一个)的信息,看看程序运行结果是否为被误删的ID号。
第二课时
任务二求解“谁是冠军’
活动尝试枚举
这次面试的冠军在A、B、C、D四位同学中。A说:“不是我。”B说:“是C。”C说:“是D。?”D说:“C说的不对。?”已知四人中有一人说了假话。你能判断出到底谁是冠军吗?说出你的结论和判断过程。
结论:_ 是冠军。
判断过程:
枚举
我们常利用计算机运算速度快、精确度高的特点解决实际问题。在设计算法时,最简单的方法就是“直译”我们的思维过程。有一种算法
是把所有可能的答案一一列举,?合适就保留,不合适就丢弃。这种方法称作“枚举”或“穷举”。
在不知道谁说真话、谁说假话的情况下,最简单的方法就是把所有可能都枚举出来。因为只有一位冠军,所以可以枚举选手的编号,并对A、B、C、D四个人的话进行判断。
计算的本质是完成一系列算术运算和逻辑运算。因此在进行计算时,首先要将各种类型的数值问题转化为计算机能够执行的基本运算。在本任务中,我们需要把每个人说的话转化成计算机能够执行的表达式。如A说:“不是我。?”可以表示为“i!='A"?,其中i为枚举的冠军选手编号。
请分析以下代码的含义,理解解题思路,并在横线上填写语句的功能。
champion=['A','B','C','D']#设置选手列表
for?i?in?champion:
Cn(-=1*='+(=C'(+(1i==')+(i!='D')?#____
if?cond==3:
print("冠军是:",i)
请在Python中输入代码并运行程序,看看谁是冠军。
算法来源于生活,服务于生活。程序同样如此。
【拓展训练】
与算法零距离
活动:安排住宿
活动描述:有n个男生一起出去旅游,要安排酒店住宿,已知4人间为140元/间,3人间为120元/间,那怎样订房间最省钱,而且要保证每人都有床位。
选题理由
本项目包含了“枚举”算法,枚举算法是我们在日常中使用到的最多的一个算法,使用枚举来解决问题是利用计算机计算速度快的特点,罗列所有可能性,筛选出正确的答案。
操作建议
学生在学习本章节之前已经掌握了程序设计三大结构,重点在循环结构中的参数应该如何设置,问题解决的步骤是怎样的。另外还需要提示Python语言中的整除和取余符号。
参考代码:
n=int(input("输入人数:"))
min=1000000 #最小值赋初值
for r4 in range(n//4+1): #罗列4人间房间数量
rs=n-4*r4 #计算剩余人数
if rs%3==0: #计算剩余人数需要多少个3人间
r3=rs//3
else:
r3=rs//3+1
w=140*r4+120*r3 #计算费用
if min>w:min=w #保存最少费用
print(min)
注意问题
“枚举”法的优点在于(1)是解决问题的思路的“直译”,因此比较容易理解,(2)是基于穷举所有状态的基础上的,因此正确性比较容易证明。“枚举”的缺点是枚举的效率。在教学中可以提示学生优化枚举的范围,减少枚举的个数。
【教学反思】