diff --git "a/13-\346\213\254\345\217\267\345\214\271\351\205\215-\345\276\256\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/README.md" "b/13-\346\213\254\345\217\267\345\214\271\351\205\215-\345\276\256\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/README.md" index 48e9c5ed32d3f4307efa8327fdd9a8e542e089d5..706828b410ed5c4cdbd361bc6d361917d54b34aa 100644 --- "a/13-\346\213\254\345\217\267\345\214\271\351\205\215-\345\276\256\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/README.md" +++ "b/13-\346\213\254\345\217\267\345\214\271\351\205\215-\345\276\256\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/README.md" @@ -1,34 +1,89 @@ # 13-括号匹配-微项目-第三单元 队列、栈与树 ### 一、项目主题 +在一个数学计算式“(a/(cb-c)+d)×e中,位置1和位置4有左括号“(”,位置9和位置12有右括号“)”。位置1的左括号与位置12的右括号相匹配,位置4的左括号与位置9的右括号相匹配。而对于数学计算式“a/(b-c)”,位置8的右括号没有可匹配的左括号。设计一个程序,判断输入的数学计算式中的括号(只有小括号)是否匹配 ### 二、项目内容 #### 1.项目背景 + 这是学生在掌握前面队列的知识后新学习的一个数据结构栈,这个数据结构和队列是不同的。队列是先进先出,栈是先进后出。而括号匹配是一个很好的学习栈的一个实例。 #### 2.项目设计依据 +栈是我们生活中常见的一种数据结构,以一个括号匹配的程序设计引导学生从已有的认知水平和实践能力出发,针对给定的项目任务进行分析,对括号匹配规则——“括号配对”的分析和整理,明确要解决的关键问题,并能提取问题的基本特征,进行抽象建模,用算法描述解决问题的方案,并根据解决方案编写程序直至问题解决,得出结 #### 3.项目概述 + 本项目在前面学习的基础上,让学生通过对括号匹配规律的分析,这既有利于学生理解对事物现象进行归纳总结的重要性,又能激发学生的思维。整个项目的实施,要求学生对括号的配对分析与处理过程清晰明了并设计正确的算法,使用Python语言编写程序,调试运行后得出结果,并能和其他同学进行展示交流。 ### 三、项目指导 +1、括号匹配问题中出现的几种情况? +2、如何判断括号匹配? ### 四、项目实施流程 + ### 五、项目实施环节安排 +本项目实施定位于学生已经学完选择性必修1《数据与数据结构》第三单元的知识内容。通过本项目的实施,学生将对程序设计的各个环节、题目分析与算法设计、Python的基本控制结构以及不同的数据类型等内容在项目中进行综合应用。具体安排如下: #### 第一阶段:项目准备阶段 + 课时分配:0.5课时 1. 确定项目主题 +根据项目内容,确定项目主题 2. 项目需求分析与总体规划 - + (1)明确项目实现的功能以及项目输入(即处理对象或原始数据)与输出(即处理结果)。 + (2)确定项目在实施过程中可以分成几个阶段完成,明确每个阶段需要完成的任务。 3. 分组、分工 - + 建议2-3名学生为一组,确定一个组长作为项目负责人,统一协调组内成员各阶段的任务。项目在不同实施阶段每个组员都有不同的项目分工。 #### 第二阶段:项目的指导阶段 +课时分配:1课时 1. 抽象与建模 + 数学计算式中既有数字,又有加减乘除等运算符号,判断括号是否匹配时,可以忽略这些括号以外的数字和运算符号。对于数学计算式:(a/(cb-c)+d)×e,括号的序列如图 +![输入图片说明](image.png) +若左右括号的数量相等并且位置匹配,则括号匹配;否则,括号不匹配。判断左右括 +号的数量与位置时,可以采用栈结构进行设计:遇到左括号时,入栈;遇到右括号时,则把处于栈顶的左括号出栈括号匹配。分以下三种情况,判断数学计算式中的括号是否匹配: +①栈空,出现右括号时、不匹配 +②扫描结束,栈中还有左括号时,不匹配 +③扫描结束,栈空、则匹配 2. 设计算法 - +根据建模,问题解决需经历如下几个步骤: +设置一个栈st和栈顶指针top,从左往右逐步处理数学计算式。若是左括号,栈顶指针top值加1,并将其压入栈中。若是右括号:如果top大于-1,那么栈中有元素,把栈顶的左括号弹出,top即值减1,表示该右括号与弹出的左括号相匹配;如果top等于-1,栈为空,表示没有与该右括号相匹配的左括号,是不匹配的数学计算式。如果数学计算式处理完毕,栈中还有左括号,那么它也是不匹配的数学计算式。过程如下图 +![输入图片说明](image.png) 3. 项目程序实现 - +st=[“”]100 +top=-1 +flag=True +s=input(“请输入数学表达式”) +for i in range(len(s)): +if s[i]==”(”: + top=top+1 + st[top]=s[i] +Elif s[i]==”)”: + if top==-1: + flag=False + Break + else: + top=top-1 +if top>=0: +flag=False +if flag: +print(“括号匹配!”) +else: +print(“括号不匹配!”) #### 第三阶段:项目汇报阶段 +课时分配:0.5课时 +1.学生制作项目汇报材料。 +(1)展示与分享项目成果。 +(2)对完成项目的感悟,总结项目的实施流程。 +(3)回顾项目实施过程中存在的困难及解决途径。 +2.教师组织学生对每个小组项目进行评价。 ### 六、项目汇报环节安排 +1.教学导入。 +鼓励学生作为小组项目发言人,自主准备汇报材料,介绍自己所在小组项目实施的过程、成果、意义及感悟,以期待得到同学的“认可”。引导学生以项目评价量化表为标准,客观给予评价。汇报的内容和形式自定,可以是文稿演示、成果报告、展板展示、项目实施手册展示和项目活动过程陈述等方式。教师对小组汇报的项目研究报告进行打分,并对评选出的最佳小组给予奖励。 +汇报过程对学生来说是一个非常重要的学习经历,也是对学生的总结反思、整理资料能力及写作能力的一次挑战。 +2.分组汇报。 +每个项目研究小组派小组代表采用合适的方式汇报小组的项目经历与成果。 +3.学生提问,教师点评,评价打分。 +根据“项目成果评价表”进行评价,并记录同学们提出的意见。 +每个小组可以根据同学们的评价进一步地修改项目中存在的问题,将自评、他评、师评和专家评价结合起来,借助信息技术更及时呈现评价结果。为了激励学生并检验各组的项目成果,教师合理评价并为“最佳”项目成果颁发奖项,以评价的形式引导学生梳理、总结项目成果。 + diff --git "a/13-\346\213\254\345\217\267\345\214\271\351\205\215-\345\276\256\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/image.png" "b/13-\346\213\254\345\217\267\345\214\271\351\205\215-\345\276\256\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/image.png" new file mode 100644 index 0000000000000000000000000000000000000000..6ba2bc856e7cf20f42615465b77c9c683c6fff71 Binary files /dev/null and "b/13-\346\213\254\345\217\267\345\214\271\351\205\215-\345\276\256\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/image.png" differ