课件编号20207636

浙教版(2019)高中信息技术 选修1 第3章 3.3.2 栈的应用 课件(共20张PPT)

日期:2024-05-20 科目:信息技术 类型:高中课件 查看:73次 大小:184541Byte 来源:二一课件通
预览图 1/9
3.3.2,20张,课件,应用,3章,教版
  • cover
(课件网) 栈的应用 为了帮助小学生检查口算作业,设计了“口算批改”程序,根据识别出来的算式,逐一计算,检验算式的正确性,并显示计算结果是否正确。 项目情境 要设计“口算批改”项目,我们需要解决哪些问题: 1.将口算图片转化为文本。 2.处理每一个算式,计算算式的正确答案。 3.输出判定结果。 将正确答案与输入的答案进行比较。 利用OCR识别技术,将图片识别为文本,并存入txt文件 口算批改项目—项目任务 要设计“口算批改”项目,我们需要解决哪些问题: 1.将口算图片转化为文本。 利用OCR识别技术,将图片识别为文本,并存入txt文件 口算批改项目 项目第一课时已经完成。 思考1:如何提取算式 例如:”6+(8-2)*2/3=10” 以字符串读入,先找出等号,等号左边是算式,等号右边是输入的结果 思考2:如何提取算式的数字与运算符 例如:”6+(8-2)*2/3=10” 分离算式中的数字和运算符。 数字可能有多位,所以需要循环取出数字, 运算符只有一位,只需逐位取出,取出后存入列表中。 要设计“口算批改”项目,我们需要解决哪些问题: 1.将口算图片转化为文本。 口算批改项目 要设计“口算批改”项目,我们需要解决哪些问题: 1.将口算图片转化为文本。 2.处理每一个算式,计算算式的正确答案。 3.输出判定结果。 将正确答案与输入的答案进行比较。 利用OCR识别技术,将图片识别为文本,并存入txt文件 口算批改项目 思考3:计算机如何处理加、减、乘、除、括号等运算符的优先级问题? 结合数学中的计算规律,加法和减法运算设置为同一级别,乘法和除法运算设置为同一级别,括号级别最高。 可以用字典来定义每个运算符的优先级,或者通过分支语句实现。 思考4:结合运算符的优先级,如何算得计算式的值? 先将表达式转为逆波兰表达式,再求得逆波兰表达式的值 口算批改项目-抽象建模 开始 读取等号左右两边表达式 将表达式转为逆波兰表达式 计算逆波兰表达式的值 判断计算所得的值与等号右边结果是否相等 读取文件获取每一行的算式 输出是否正确的结果 结束 口算批改项目 设计算法:如何将中缀表达式转为后缀表达式(有括号) 1、初始化运算符栈S1 2、依次从数组中取出各个字符,根据字符做不同处理 3、遇到操作数时,将其输出 4、遇到运算符时,比较其与S1栈顶运算符的优先级: 若S1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈; 否则,若优先级比栈顶运算符的高,也将运算符压入S1(注意必须是高,相同和低于都不行); 否则,将S1栈顶的运算符弹出,再次转到4与S1中新的栈顶运算符相比较: 5 、遇到括号时: 如果是左括号“(”,则直接压入S1;如果是右括号“)”,则依次弹出S1栈顶的运算符,直到遇到左括号为止,此时将这一对括号丢弃; 6、重复步骤2至5,直到表达式遍历结束 7、将S1中剩余的运算符依次弹出; 项目实施-设计算法 ops=[""]*20 top=-1 snbl=[] #存储逆波兰表达式 for i in a: #输出逆波兰表达式 if i in ops_rule: while top>=-1: if top==-1: #运算符栈为空,则入运算符栈ops top+=1 ops[top]=i break else: if ops[top]=="(" or ops_rule[i]>ops_rule[ops[top]]: #若运算符栈不空,栈顶为左括号或者比栈顶元素优先级高,入栈 top+=1 ops[top]=i break else:#优先级比栈顶优先级相等或小 snbl.append(ops[top]) top-=1 项目实施-程序编写 ops_rule={ #字典,定义优先级 "+":1, "-":1, "*":2, "/":2 } ops=[""]*20 top=-1 snbl=[] #存储逆波兰表达式 for i in a: #输出逆波兰表达式 if i in ops_rule: while top>=-1: if top==-1: #运算符栈为空,则入运算符栈ops top+=1 ops[top]=i break else: if ops[top]=="(" or ops_rule[i]>ops_rule[ops[to ... ...

~~ 您好,已阅读到文档的结尾了 ~~