年终活动
搜索
    上传资料 赚现金
    英语朗读宝
    3.4 口算作业批改项目分析报告样例教案第1页
    3.4 口算作业批改项目分析报告样例教案第2页
    还剩2页未读, 继续阅读
    下载需要20学贝 1学贝=0.1元
    使用下载券免费下载
    加入资料篮
    立即下载

    3.4 口算作业批改项目分析报告样例教案

    展开

    这是一份3.4 口算作业批改项目分析报告样例教案,共4页。
    “口算批改”项目作业报告 为了帮助小学生检查口算作业,你所在的软件开发团队计划开发一款“口算批改”APP,以提高口算批改的效率。该程序的基本设想是:将手机对着作业本拍照,利用OCR(光学字符识别)技术,从图片中识别出算式,然后逐一计算,判断答案是否正确。一、口算等式采集 为了便于学生进行后面的“口算批改”项目的进行,可以采用手工录入、互联网查找、OCR采集等各种方式,采集口算等式,并将所有等式存入“算式.csv”文件中。 二、抽象与建模过程                                                                    采集到的算式存储在“算式.csv”文件中,每行一个口算等式。判断一个等式是否正确,需要计算等号左边的运算式的值。等式中包括数字与运算符号,可以以字符串的形式,整体读入,存入字符串变量中。对于等号左边的算式,计算其结果时,用数字栈存储算式中的数字,用符号栈存储运算符号。由于算式中的运算符号加、减、乘、除、括号等存在着优先级别,以算式中的运算符号与符号栈栈顶元素进行比较,如果算式中的优先级别小于等于栈顶元素的优先级别,则栈顶元素出栈,否则入栈。如果是左括号,则直接入栈。如果是右括号,则栈中元素依次出栈,直至左括号。数字与运算符号的计算,把数字栈、符号栈结合起来操作。 三、算法与设计 采用文件读取的方式,从“算式.csv”中读取所有的算式。一个算式占一行,以字符串存储该算式。利用字符串的find函数,找到“=”在算式中的位置,并用字符串中求子串的操作,取出等号左边的算式与右边的值。对于左边等式,建立数字栈和符号栈,从左往右扫描,依次处理算式的中间计算过程。按如下方式处理:1)当遇到的字符是数字时,继续扫描,直至遇到非数字字符。把这次的数字串转换成整数,压入数字栈中。2)当遇到的是非数字时,必定为运算符号(因为字符串中仅有数字字符与运算符号),设该运算符号为x,符号栈顶元素为y,分以下几种情况处理:如果x为“(”时,或栈空时,则把x压入符号栈。如果x为“+”或“-”时,同时y为“(”,则入栈,否则, y出栈,同时,把数字栈最顶上的两个元素出栈,用运算符号y进行运算,并把运算结果压入数字栈。再把x压入符号栈。如果x为“*”或“/”时,同时y为“*”或“/”时,则y出栈,同时,把数字栈最顶上的两个元素出栈,用运算符号y进行运算,并把运算结果压入数字栈。再把x压入符号栈。 如果x为“)”时,则把符号栈中元素逐一出栈,直至遇到第一个左括号。继续扫描,直至左边的算式结束,则数字栈中的元素为左边的答案。如果答案与等号右边的值一样时,则输出“”,否则输出“?”。四、编写程序与测试用Python语言编程实现。import csvnumber=[0]*100ops=[' ']*100top1=-1top2=-1#数字栈顶两个元素参与运算,并将运算结果压入栈def cal():    op1=number[top1]    top1-=1    op2=number[top1]    top1-=1    op=ops[top2]    top2-=1    anwser=0    if op=='+':        anwser=op2+op1    if op=='-':        anwser=op2-op1    if op=='*':        anwser=op2*op1    if op=='/':        anwser=op2/op1    top1+=1    number[top1]=anwserf=open("算式.csv","r")f_csv=csv.reader(f)for row in f_csv:    exp=row[0]    pos=exp.find('=')    expleft=exp[0:pos]    expright=exp[pos+1:]    print(expleft)    explen=len(expleft)    i=0    top1=-1    top2=-1    while i<explen:        num=0        while i<explen and expleft[i]>='0' and expleft[i]<='9':            num*=10+ord(expleft[i])-48            i+=1        top1+=1        number[top1]=num        if i<explen and expleft[i]=='+' or expleft[i]=='-':            if top2>-1 and ops[top2]!='(':                cal;            top2+=1            ops[top2]=expleft[i]        if i<explen and expleft[i]=='*' or expleft[i]=='/':            if top2>-1 and ops[top2]=='*' or ops[top2]=='/':                cal;            top2+=1            ops[top2]=expleft[i]        if expleft[i]=='(':            top2+=1            ops[top2]=expleft[i]        if expleft[i]==')':            while(ops[top2]!='('):                cal;                top2-=1            top2-=1        i+=1    if number[top1]==int(expright):        print("对")    else:        print("错")f.close()四、结论与建议 本项目在用字符串存储后,在处理左边的算式时,也可以先把中缀表达式转后缀表达式,再用栈结构处理后缀表达式的值。  

    欢迎来到教习网
    • 900万优选资源,让备课更轻松
    • 600万优选试题,支持自由组卷
    • 高质量可编辑,日均更新2000+
    • 百万教师选择,专业更值得信赖
    微信扫码注册
    qrcode
    二维码已过期
    刷新

    微信扫码,快速注册

    手机号注册
    手机号码

    手机号格式错误

    手机验证码 获取验证码

    手机验证码已经成功发送,5分钟内有效

    设置密码

    6-20个字符,数字、字母或符号

    注册即视为同意教习网「注册协议」「隐私条款」
    QQ注册
    手机号注册
    微信注册

    注册成功

    返回
    顶部
    Baidu
    map