四则运算题目生成程序
生活随笔
收集整理的這篇文章主要介紹了
四则运算题目生成程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、題目描述: ?????? 實踐能力的提高當然就是得多動手了,那么就從第一個個人項目開始吧,用一周的時間完成一個基于控制臺的四則運算程序,實現一個自動生成小學四則運算題目的命令行程序。 從《構建之法》第一章的 “程序” 例子出發,像阿超那樣,花二十分鐘寫一個能自動生成小學四則運算題目的命令行 “軟件”,滿足以下需求: (以下參考博客鏈接:http://www.cnblogs.com/jiel/p/4810756.html) 1. 使用 -n 參數控制生成題目的個數,例如 ?????? Myapp.exe -n 10?-o Exercise.txt 將生成10個題目。 2. 使用 -r 參數控制題目中數值(自然數、真分數和真分數分母)的范圍,例如? ????? Myapp.exe -r 10 ?將生成10以內(不包括10)的四則運算題目。該參數可以設置為1或其他自然數。該參數必須給定,否則程序報錯并給出幫助信息。 3. 生成的題目中如果存在形如e1?÷ e2的子表達式,那么其結果應是真分數。 4. 每道題目中出現的運算符個數不超過3個。 5. 程序一次運行生成的題目不能重復,即任何兩道題目不能通過有限次交換+和×左右的算術表達式變換為同一道題目。例如,23 + 45 = 和45 + 23 = 是重復的題目,6 × 8 = 和8 × 6 = 也是重復的題目。3+(2+1)和1+2+3這兩個題目是重復的,由于+是左結合的,1+2+3等價于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重復的兩道題,因為1+2+3等價于(1+2)+3,而3+2+1等價于(3+2)+1,它們之間不能通過有限次交換變成同一個題目。 生成的題目存入執行程序的當前目錄下的Exercises.txt文件,格式如下: ???? 1. 四則運算題目1 ???? 2. 四則運算題目2 ????????? …… ? 其中真分數在輸入輸出時采用如下格式,真分數五分之三表示為3/5,真分數二又八分之三表示為2’3/8。 6. 在生成題目的同時,計算出所有題目的答案,并存入執行程序的當前目錄下的Answers.txt文件,格式如下: ??? 1. 答案1 ??? 2. 答案2 ??? 特別的,真分數的運算如下例所示:1/6 + 1/8 = 7/24。 7. 程序應能支持一萬道題目的生成。 8. 程序支持對給定的題目文件和答案文件,判定答案中的對錯并進行數量統計,并會輸出所有題目中重復的題目,輸入參數如下: ???? Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt?-o Grade.txt 統計結果輸出到文件Grade.txt,格式如下: ? Correct: 5 (1, 3, 5, 7, 9) Wrong: 5 (2, 4, 6, 8, 10) Repeat:2 RepeatDetail: (1)?? 2,45+32? Repeat 3,32+45???????????????????? (2)?? 5,3+(2+1)? Repeat 7,1+2+3 解釋: Correct: 5 ----5道題目正確,正確的題號 1,3,5,7,9 Wrong:5 -----5道題目錯誤,錯誤的題號 2,4,6,8,10 Repeat:2?? 2---組題目重復 (1) 第一組 題號2,題目 45+32? 與題號3的題目重復,題號3為 32+45 (2)第二組? 題號5,題目 3+(2+1) 與題號7的題目重復,題號7為 1+2+3 ? 其中“:”后面的數字5表示對/錯的題目的數量,括號內的是對/錯題目的編號。為簡單起見,假設輸入的題目都是按照順序編號的符合規范的題目。 二、個人軟件過程: (以下參考博客鏈接:http://www.cnblogs.com/happyzm/p/6472120.html) 在開始實現程序之前,理解下Personal Software Process Stages(http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html) 開始實現程序之前,請使用以下PSP表格,在第3列填上自己對每個環節的估計時間(單位:分鐘)。 在做每個環節的過程中,請在第4列填上對應環節的實際消耗時間(單位:分鐘)在軟件開發中,掌握估計時間是一項重要的技能,請通過PSP表格做到:
- 厘清開發的完整環節,爭取在每個環節都有實際的工作,一開始邊界不清楚是正常的,但請嘗試按自己的理解去努力在對應環節做實際的工作。
- 預估每個環節的時間,并真實統計這些環節的耗時,在完成后輸出完整的PSP耗時估計表。
- 注意:該表格是給自己看的,不要偽造數據!
- PSP模版表格如下,第3列和第4列分別對應第2列條目的估計時間和真實時間,模版表格里的時間只是示意。
-
PSP2.1 Personal Software Process Stages Time Senior Student Time ? Planning 計劃 8 15 ? · Estimate 估計這個任務需要多少時間 8 600 ? Development 開發 82 300 ? · Analysis 需求分析 (包括學習新技術) 6 100 ? · Design Spec 生成設計文檔 5 65 ? · Design Review 設計復審 4 65 ? · Coding Standard 代碼規范 3 30 ? · Design 具體設計 10 12 ? · Coding 具體編碼 36 21 ? · Code Review 代碼復審 7 30 ? · Test 測試(自我測試,修改代碼,提交修改) 13 210 ? Reporting 報告 9 20 ? · 測試報告 3 2 ? · 計算工作量 2 1 ? · 并提出過程改進計劃 3 3 ? ? ? ? ? ? ?
代碼說明
點擊確定按鈕生成表達式,并在頁面顯示
btn.onclick = function(){var strLi = '',strInput = '';getCount = document.getElementsByClassName('inputer')[0].getElementsByTagName('input')[0].value,getRange = document.getElementsByClassName('inputer')[0].getElementsByTagName('input')[1].value;console.log(getCount+getRange);for( var i = 0; i < getCount; i++){detailArr.push(deepClone(obj));expreArr.push(createExpression(getRange));detailArr[i].expression = expreArr[i];}for(var i = 0; i < detailArr.length; i++){answerArr.push(calculate(detailArr[i].expression));detailArr[i].answer = answerArr[i];}count = getCount;range = getRange;if(getCount != null && getRange != null){for(var i = 0; i < getCount; i++){strLi += '<li>'+(i+1)+'、 '+ detailArr[i].expression + '= <input type="text"></li>';strInput +='';}$('#content').append(strLi);$('.response').append(strInput);}}?
點擊提交按鈕顯示題目答案并統計答題信息
submit.onclick = function(){var strDiv = '',strAnswer = '',rightCount = 0,wrongCount = 0,score = 0;var respArrays = document.getElementById('content');for( var i = 0; i < detailArr.length; i++){// console.log(respArray[i].value+" "+detailArr[i].answer);// console.log('index:'+i);var responseValue = respArrays.getElementsByTagName('li')[i].getElementsByTagName('input')[0].value;if(responseValue == detailArr[i].answer && responseValue!= null){$('#content li:eq('+i+')').append('<div class="rightMsg"></div>');// strDiv += "<div class='rightMsg'></div>" ;detailArr[i].status = 'right';rightCount++;console.log(1);}else{// strDiv += "<div class='wrongMsg'></div>";$('#content li:eq('+i+')').append('<div class="wrongMsg"></div><input type="text" value="'+detailArr[i].answer+'">');detailArr[i].status = 'wrong';wrongCount++;console.log(0);} detailArr[i].response = responseValue;strAnswer +='<input type="text"value="'+ detailArr[i].answer+'"readonly>'; }$('.status').append(strDiv);$('.answer').append(strAnswer);//打印統計結果var oResults = document.getElementsByClassName('wrapper')[0].getElementsByClassName('bottom')[0];//正確數oResults.getElementsByClassName('content')[0].getElementsByTagName('input')[0].value = rightCount;//錯誤數oResults.getElementsByClassName('content')[0].getElementsByTagName('input')[1].value = wrongCount;//得分|正確率oResults.getElementsByClassName('result')[0].getElementsByTagName('input')[0].value = Math.round(rightCount/(rightCount + wrongCount) * 100);}
?
控制臺顯示題號
點擊右下角保存,通過ajax將數據發送到php后臺并將題目以txt格式保存到本地
?
?
download.click = function(){$ajax({type:'POST',url:'./getDatas.php',data:{detailArr},success:function(){alert("保存成功!");window.location.reload();},error:function(){alert("保存失敗");}})}后臺
<?php head('content-type:text/html;charset="utf-8"'); error_reporting(0);$dataArrays = $_Post['detailArr'];$arrayLength = count(dataArrays);$myfile = fopen("result.txt", "w") or die("Unable to open file!");for($x = 0; $x < $arrayLength; $x++){$txt= $dataArrays[$x]+"\n";fwrite($myfile, $txt);}fclose($myfile); `支持生成上萬道四則運算題,但當前尚未進行優化,因此過程稍慢。
?
?總結:
當前未完成分數、真分數的計算、難度的設置以及表達式的查重,在后續版本會加以改善。
?本實驗代碼已發布到git上,鏈接地址https://gitee.com/ck250/fourOpera
?
更新:鏈接地址:https://github.com/Aero-ku/fourOper
bug修復(4-9):
1、包含括號的表達式無法正確計算:計算結果為該表達式去掉括號時計算的結果。
2、未輸入答案提交,表達式結果為0,系統判斷正確的問題
3、當表達式出現除0時答案為NaN,但輸入NaN系統判定錯誤的問題。
4、點擊下載按鈕無法獲取txt文件?? 請在服務器中運行該程序,直接打開將無法保存錯題集的txt文件。
轉載于:https://www.cnblogs.com/Aero/p/8684416.html
總結
以上是生活随笔為你收集整理的四则运算题目生成程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3种方法实现CSS隐藏滚动条并可以滚动内
- 下一篇: 新版vue-cli模板下本地开发环境使用