標籤:idt RoCE ima 隨機數 info 提升 自動產生 瞭解對方 表示
git:https://github.com/yyyyyykx/yyyyyyykx98/blob/master/1.cpp
成員:於可欣 梁子君
PSP表格:
PSP2.1 |
Personal Software Process Stages |
預估耗時(分鐘) |
實際耗時(分鐘) |
Planning |
計劃 |
30 |
40 |
· Estimate |
· 估計這個任務需要多少時間 |
30 |
40 |
Development |
開發 |
1260 |
1560 |
· Analysis |
· 需求分析 (包括學習新技術) |
300 |
400 |
· Design Spec |
· 產生設計文檔 |
30 |
40 |
· Design Review |
· 設計複審 (和同事審核設計文檔) |
30 |
40 |
· Coding Standard |
· 代碼規範 (為目前的開發制定合適的規範) |
40 |
45 |
· Design |
· 具體設計 |
60 |
65 |
· Coding |
· 具體編碼 |
400 |
500 |
· Code Review |
· 代碼複審 |
240 |
245 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
160 |
225 |
Reporting |
報告 |
120 |
120 |
· Test Report |
· 測試報告 |
40 |
50 |
· Size Measurement |
· 計算工作量 |
40 |
30 |
· Postmortem & Process Improvement Plan |
· 事後總結, 並提出流程改善計劃 |
40 |
40 |
合計 |
|
1410 |
1720 |
設計實現過程:
設計代碼由12個函數組成,要自動產生四則運算題目並得出算術式的答案可以分成兩個部分,分別為算術式的產生和算術式結果。自動產生就表示要靠隨機函數rand()來完成,運算子的個數,運算子的種類,數位個數,數位大小都是隨機的。其中運算子的個數和數位個數是相互制約的。算術式結果的計算就是要根據先算括弧內的然後按照先乘除後加減的從左向右的運算順序來完成的。
代碼說明:
算術式的產生函數,先調用隨機產生運算子和隨機數的函數,然後用數組形式把它們列出來
//產生一個算術式並輸出char Formula(int range, int no,FILE *fp) { int i,j=1; RandomNum(range,no); //產生隨機運算子 SignOfOperator(no); //產生隨機數 for( i=0;i<=no; i++) { if(n[i][1]==1) { //若分母為1則可以確定數字為自然數 fprintf(fp,"%d",n[i][0]); printf("%d",n[i][0]); } else { //若為分數 fprintf(fp,"%d‘%d/%d",n[i][0],n[i][2],n[i][1]); printf("%d‘%d/%d",n[i][0],n[i][2],n[i][1]); } fprintf(fp,"%c",sign[i]); printf("%c",sign[i]); } fprintf(fp,"\n"); printf("\n");}
主函數部分:
嘗試過括弧部分但沒有成功:
//隨機是否加括弧int Bracket() { int num; int choice[2] = {1, 2}; //1為添加( 2為否 srand ((unsigned)time(NULL)); num = rand()%2; return choice[num];}
//產生一個算術式void Formula(string &t) { int i, j, b; int num = SignOfOperatorNum(); int s[4]; char c[5]; for(i=0; i<num+1; i++) { s[i] = RandomNum(range); //將隨機產生的數字存入數組 } for(j=0; j<num; j++) { c[j] = SignOfOperator(); //將隨機產生的符號存入數組 } b = Bracket(); //判斷是否存在括弧 int n, m; if(b==1 && num!=1) { //添加括弧 if(num==2) { //當有兩個運算子時 n = rand()%2; if(n==0) { //在開頭加入括弧 c[3] = c[1]; c[2] = ‘)‘; c[1] = c[0]; c[0] = ‘(‘; } else if(n==1) { //在第一個符號後加入括弧 c[3] = ‘)‘; c[2] = c[1]; c[1] = ‘(‘; } } else if(num==3) { //當有三個運算子時 n = rand()%3; for( ; num>n; num--) { c[num] = c[num-1]; } c[n] = ‘(‘; if(n==0) { //在開頭加入括弧後 m = rand()%2; for( ; num>m+1; num--) { c[num+1] = c[num]; } c[m+2] = ‘)‘; } else if(n==1) { //在第一個運算子後加入括弧後 m = rand()%2; for( ; num>m+2; num--) { c[num+1] = c[num]; } c[m+3] = ‘)‘; } else { //在第二個運算子後加入括弧後 c[num+1] = ‘)‘; } } } c[num+2] = ‘=‘; int k; i = 0, j = 0; for( k=0; k<num; k++) { if(c[j]==‘(‘) { t += c[j]; j++; } t += s[i]; i++; if(c[j]==‘)‘) { t += c[j]; j++; } t += c[j]; j++; }}
測試回合:
輸出題目
項目小結:
在這次結對項目中,首先要感謝我的搭檔的積極性,作為一個有拖延症的人,我的搭檔首先對項目進行了瞭解並開始,我隨後才跟上。我也感受到和別人結對的困難,因為兩人思路上的不同,會導致瞭解對方思路的困難。但同時,我們也看到對方看不到的東西。
自身對C語言還是不夠熟悉,在編程的過程中多次出現問題導致停滯不前和一些需求並沒有實現。對學過的知識印象不夠深刻,比如資料結構。自己尋找程式bug的能力還需要鍛煉和提升。
結對題目:四則運算