中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

3.4 口算作業批改項目分析報告樣例 2021-2022學年高中信息技術浙教版(2019)選修1 數據 與數據結構

資源下載
  1. 二一教育資源

3.4 口算作業批改項目分析報告樣例 2021-2022學年高中信息技術浙教版(2019)選修1 數據 與數據結構

資源簡介

“口算批改”項目作業報告
為了幫助小學生檢查口算作業,你所在的軟件開發團隊計劃開發一款“口算批改”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 csv
number=[0]*100
ops=[' ']*100
top1=-1
top2=-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]=anwser
f=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 inum=0
while i='0' and expleft[i]<='9':
num*=10+ord(expleft[i])-48
i+=1
top1+=1
number[top1]=num
if iif top2>-1 and ops[top2]!='(':
cal;
top2+=1
ops[top2]=expleft[i]
if iif 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()
四、結論與建議
本項目在用字符串存儲后,在處理左邊的算式時,也可以先把中綴表達式轉后綴表達式,再用棧結構處理后綴表達式的值。

展開更多......

收起↑

資源預覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 湄潭县| 中江县| 景洪市| 南乐县| 德惠市| 濮阳市| 云龙县| 元谋县| 东丽区| 临夏县| 安西县| 八宿县| 子洲县| 大姚县| 古浪县| 章丘市| 疏勒县| 龙州县| 托克托县| 咸阳市| 左云县| 井冈山市| 灵川县| 略阳县| 泾源县| 固原市| 资讯 | 葵青区| 嵩明县| 武宣县| 仙桃市| 横峰县| 东至县| 政和县| 合肥市| 姚安县| 乌鲁木齐市| 宾阳县| 哈巴河县| 霸州市| 赣榆县|