资源简介 (共36张PPT)第4单元 计算与问题解决信息技术(必修1)算法及其特征学习目标★ 了解算法的基本要素和重要特征。★ 运用恰当的方式描述算法。★ 运用Python语言实现简单算法,解决问题。温故知新1. 什么是算法?2. 描述算法的方法有哪些?算法是解决问题的方法和步骤。自然语言流程图伪代码程序代码PAD图01知识回顾流程图大作战游戏规则九宫格底下藏有流程图图例或基本结构的照片,小组抢答选择卡片数字,老师点击该卡片,卡片就会消失在荧幕上,猜出照片上的知识即可获胜。回答错误,继续抢答回答问题。123456789101112131415161718123456789101112131415161718123456789101112131415161718123456789101112131415161718123456789101112131415161718123456789101112131415161718软件设计师是业务领域和技术领域的专家。面对客户需求,软件设计师要对问题进行整体分析以找到解决方案,通过洽当的方式与客户沟通;面对技术问题,软件设计师需要借助计算机编程解决实际问题。我们将通过“软件开发社招新”项目讨论计算机编程解决问题的过程。※ 活动1 寻找“开关对应关系”软件开发社团要招募新成员,报名的同学要经过面试才能加入。第一关面试题是:“一个房间有3盏灯,房间外有3个开关分别控制这3盏灯在只允许进房间一次的情况下, 如何判断哪个开关控制哪盏灯?”设计算法是解决问题的核心,它的基本任务是对问题进行定性分析和定量分析,遵循算法的特征和约定,寻求计算的方法和规则,明确解决问题的途径。任务一 探讨面试题的解决方案分析问题—灯的状态和特性灯只有亮、灭两种状态,但是灯又具有一种特殊性,即开灯的同时会伴随发光发热,因此灯被触摸时还有冷、热两种状态。综上所述,一盏灯可能有4种不同的状态。灯亮灯灭发热不发热怎么样保证每盏灯的状态都是唯一的?题目中并没有限制开关按动次数,所以3个开关的闭合状态是可以随意改变的。单分支流程图也称为程序框图,它是描述问题解决的一种图形化表示方法。与使用自然语言描述相比,用流程图描述形象、直观、更容易理解。三种基本结构想一想,划一划第一步:打开1、2两个开关第二步:过2分钟后关闭1号开关第三步:进房间,亮着的灯是由2号开关控制第四步:摸一下另外两盏不亮的灯,发热的灯泡是由1号开关控制第五步:不亮又不热的灯是由3号开关控制自然语言流程图关1号开关灯亮?灯热?该灯由2号开关控制该灯由1号开关控制该灯由3号开关控制解决问题的方法及步骤算法设计算法计算a,b两数和与差 第一步:输入两个数a,b第二步:计算两数和s1=a+b第三步:计算两数差s2=a-b第四步:输出s1,s2输入两个数a,b计算s1=a+b,s2=a-bPrint s1,s2输入a,bS1=a+bS2=a-b输出s1,s2输入a,bS1=a+b,s2=a-b输出s1,s2算法的描述自然语言流程图伪代码N-S框图PAD图程序代码算法的特征price=66while True:guess=int(input("输入你猜的价格:"))if guessprint("猜小了!")elif guess>price:print("猜大了!")else:print("恭喜你,猜中了!")break输入项输出项开始结束设置商品价格猜对了猜低了输出“猜对了”输出“猜低了”输出“猜高了”是否是否输入猜的价格确切性、可行性、有穷性算法的特征输出所有的正整数。100/正整数100/0XXX有穷性:一个算法必须保证他的执行步骤是有限的。确定性:算法中的每个步骤必须有确切的含义。可行性:算法中的每个步骤都是可行的,能在有限的时间内完成。算法的特征有穷性确切性输出项可行性输入项算法必须能在执行有限个步骤之后终止。算法中的每一次运算都有明确的定义,具有无二义性,并且可以通过计算得到唯一的结果。算法一定要有输出。任何算法都不能 “无功而返" 。输入项。一个算法有0个或多个输入,以刻画运算对象的初始悄况,所谓0个输入是指算法本身给出了初始条件。算法中执行的任何计算都可以在有限时间内完成(也称为有效性)。有4个分别装了4种药丸的药瓶,里面每颗药丸都有单颗标准质量,其中有一个药瓶中的所有药丸都被污染了。 每颗被污染的药丸比正常药丸增重1克。请在只允许称量一次的情况下,判断出哪个药瓶中的药丸被污染了。活动2 定量分析, 寻找”被污染的药丸”如果从每个药瓶中取出1颗药丸分别进行称重,肯定可以判断出哪颗药丸被污染了,但是这种做法显然不符合 ”只能称量一次" 的要求。 你能改进判断方法吗?考虑1颗药丸的重量变化,如果药丸被污染,则增重_____克,否则增重________克。改进算法从某一个药瓶中取出n颗药丸,如果被污染,则增重_____克,否则增重________克。如果我们从不同的药瓶中取出不同颗数的药丸,你能根据增重情 况找出被污染的药丸吗?第1个药瓶取1颗,第2个药瓶取2颗,第3个药瓶取3颗,笫4个药瓶取4颗,共10颗药丸。如果增重______克,则_______号药瓶中的药丸被污染。4.1 算法及其特征分析问题:如果从每个药瓶中取出1颗药丸分别进行称重,肯定可以判断哪颗药丸被污染了,但这不符合题目要求。如何改进判断方法呢?考虑:1颗药丸被污染,则增重1克;n颗药丸被污染,则增重n克;如果我们从不同的瓶子中取出不同颗数的药丸,则可以判断是哪个瓶子被污染了。解决问题的步骤(自然语言描述)1.从第1个瓶子取出1颗药丸;2.从第2个瓶子取出2颗药丸;3.从第3个瓶子取出3颗药丸;4.从第4个瓶子取出4颗药丸;以上共10颗药丸,进行称重,结果如下:1.如果增重1克,则为1号瓶子污染;2.如果增重2克,则为2号瓶子污染……请根据算法设计程序,输入单颗药丸重量及10颗药丸的总重量,判断输出是哪个瓶子被污染。活动2 定量分析,解决问题请设计程序并运行,使输入10颗药丸的总重量及4种药丸的单颗准质量就可以看到结果,找到被污染的药丸。d=int(input('请输入每颗药丸的标准重量:'))w=int(input('请输入药丸称得的重量:'))x=w-10*dprint('被污染的药瓶序号是:',x)input("运行完毕,请按回车键退出...")活动3 巧用运算, 寻找"误删的ID号”学校历届校友的数据存储在学校网络中心服务器中(共10000条,无重复数据),某管理员由于误操作删除了一位校友的ID号(8位整数)。恰好在备份文件中保存了所有人员的ID号(无重复数据,无序)。怎样快速找出被误删的ID号以便恢复数据?ID号的特征1.ID数据类型:____________2.数据在两个文件中出现的次数:________3.备份文件中1D号总和与故障文件中的ID号总和的差值为:__________整型(int)2次被删除的ID自然语言描述算法第一步:打开备份数据f1与故障数据f2第二步:读取备份数据list1,并数据求和target第三步:读取故障文件list2,并用备份数据和target减去故障数据和第四步:输出差值,即为误删ID号备份ID号故障ID号设计算法——找出被删除的ID通过分析,我们发现计算备份文件ID号总和与故障文件ID号总和的差值就是误删的ID号。target=________f1=open('copy.txt', 'r’)listl=fl.readlines()for line in _____ :target= target+int(line)fl.____________f2=open('trouble.txt', 'r’)list2= _________for ___________ :target= ___________________________print(被误删的ID号是:,_______)#设置初始值#打开备份文件#按行读取备份文件#依次处理列表listl中的数据#将读取的数据做加运算#关闭备份文件#打开故障文件#按行读取故障文件#依次处理列表list2中的数据#将读取的数据做减运算#关闭故障文件#输出被误删的ID号0list1Close()f2.readlines()line in list2target – int(line)F2.close()target代码解析f1=open(‘copy.txt’, ‘r’) #open()函数打开外部存储器中的文件,并赋值给内存中的f1变量;listl=fl.readlines() #按行读取txt文件中的数据,并赋值到list1列表中;f1.close() #close()函数关闭正在打开的文件这次面试的冠军在A 、 B 、 C 、 D四位同学中。 A说:“不是我。” B说:“是C”。“C说: “是D。”D说:“C说的不对。”已知四人中有一人说了假话。 你能判断出到底谁是冠军吗?说出你的结论和判断过程。※ 活动 尝试枚举不是我是C是DC说的不对ABCD任务二 求解“谁是冠军”枚举有一种算法是把所有可能的答案一一列举,合适就保留,不合适就丢弃。这种方法称作“枚举”或“穷举”。枚举法解决问题的一般结构:循环+判断。优势:易证明正确性在不知道谁说真话、谁说假话的情况下,最简单的方法就是把所有可能都枚举出来。因为只有一位冠军,所以可以枚举选手的编号,并对A、B、C、D四个人的话进行判断。解析:利用枚举法,逐一假设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: # 遍历champion列表cond=(i! ='A')+(i=='C')+(i=='D')+(i! ='D')if cond==3:print(“冠军是”,i)设计算法答案 冠军是: C在《孙子算经》中,有这样一道算术题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”。(即一个数除以3余2,除以5余3,除以7余2,求这个数。)参考答案:i=0while (i%3!=2 or i%5!=3 or i%7!=2):i=i+1print(i)巩固提升知识小结课堂小结算法:解决问题的方法和步骤;算法的描述:算法的特征:有穷性:算法步骤有限;确切行:每一次运算的含义明确;输入项:一个算法有0个或多个输入;输出项:算法一定要有输出;可行性:在有限时间内完成;计算机解决问题的一般过程:自然语言流程图伪代码N-S框图PAD图程序代码具体问题分析问题问题解决设计算法编写程序调试运行 展开更多...... 收起↑ 资源预览