第四次作業之四則運算


結對伙伴:李圓圓

要求1 參考《構建之法》第4章兩人合作,結對編程上述功能,要求每人發布隨筆1篇 (代碼是共同完成的,博客是分別完成的)。 (1) 給出每個功能的重點、難點、編程收獲。(2)給出結對編程的體會,以及 (3) 至少5項在編碼、爭論、復審等活動中花費時間較長,給你較大收獲的事件。

  1. 功能一

    重點:判斷符號的優先性。對於功能一的實現,我和隊友認為還是可以達到要求的,所以在初期我們想采取窮舉的方法,但在接下來的工作中,發現此方法不可用,代碼量太大,浪費了大量的精力,於是我們重新開始找尋其他方法來實現這部分功能

    以下是該功能的部分重點代碼片段

    void check(char c, stack<char>& coll2, deque<char>& coll3)
    {
    if (coll2.empty())
    {
    coll2.push(c);
    return;
    }

    if (isPra(c))
    {
    if (c == '(')
    coll2.push(c);
    else
    {
    while (coll2.top() != '(')
    {
    char ch = coll2.top();
    coll3.push_back(ch);
    coll2.pop();
    }
    coll2.pop();
    }
    }
    else
    {

    char sym = coll2.top();

    if (getPri(c) <= getPri(sym))
    {
    coll2.pop();

    coll3.push_back(sym);
    check(c, coll2, coll3);
    }
    else
    {

    coll2.push(c);
    }
    }
    }

     

2.功能二

重點:括號的添加。沒有括號的試題實現還是非常容易的,所以當加入括號時,所產生的問題也是我們所遇到的較大困難,我們使用了大量的if判斷語句,讓括號的里優先級最高,帶括號的和不帶括號的試題交叉出現。

重點代碼如下:

void sz2(){
int a, b, c, d, k1, k2, k3, count;
char c1, c2, c3;
double e, f;
int k;
count
= 0;
string str;
for (int i = 0; i < 20; i++) {
k1
= rand() % 4;
if (k1 == 0)
c1
= '+';
else if (k1 == 1)
c1
= '-';
else if (k1 == 2)
c1
= '*';
else if (k1 == 3)
c1
= '/';

k2
= rand() % 4;
if (k2 == 0)
c2
= '+';
else if (k2 == 1)
c2
= '-';
else if (k2 == 2)
c2
= '*';
else if (k2 == 3)
c2
= '/';

k3
= rand() % 4;
if (k3 == 0)
c3
= '+';
else if (k3 == 1)
c3
= '-';
else if (k3 == 2)
c3
= '*';
else if (k3 == 3)
c3
= '/';
a
= rand() % 10;
b
= rand() % 10;
c
= rand() % 10;
d
= rand() % 10;
if (c1 == '/') {
a
= a*1.0;
b
= 2;
}
if (c2 == '/') {
b
= b*1.0;
c
= 2;
}
if (c3 == '/') {
c
= c*1.0;
d
= 2;
}
stringstream ss1;
stringstream ss2;
stringstream ss3;
string s1;
string s2;
string s3;
ss1
<< "(" << a << c1 << b << ")" << c2 << c << c3 << d;
ss2
<< a << c1 << "(" << b << c2 << c << ")" << c3 << d;
ss3
<< a << c1 << b << c2 << "(" << c << c3 << d << ")";
s1
= ss1.str();
s2
= ss1.str();
s3
= ss1.str();
k
= rand() % 3;
if (k == 0)
str
= s1;
else if (k1 == 1)
str
= s2;
else if (k1 == 2)
str
= s3;
cout
<< str << "=" << endl;
deque
<char> coll1;
stack
<char> coll2;
deque
<char> coll3;
stack
<int>coll4;

for (int i = 0; i != str.size(); ++i)
{
coll1.push_back(str[i]);
}

allocate(coll1, coll2, coll3);

calculate(coll3, coll4);
f
= coll4.top();
cout
<< "?";
cin
>> e;
if (e == f) {
cout
<< "答對啦,你真是個天才!" << endl;
count
++;
}
else if (e != f) {
cout
<< "再想想吧,答案似乎是" << f << "喔!" << endl;
}
}
cout
<< "...(一共20道題)" << endl;
cout
<< endl;
cout
<< "你一共答對" << count << "道題,共20道題。" << endl;
}

3.功能三

重點:命令行的字符判斷。對於輸入的題目必須是正整數,不能是英文,負數,浮點數。計算后綴表達式。

 

void main(int argc, char *argv[])
{


if (argc == 1) {
sz2();
}
else {
int b1;
float b2 = atof(argv[2]);
if ((b2 - (int)b2) > 0){
cout
<< "題目數量必須是 正整數。";
exit(
0);
}
else {
b1
= atoi(argv[2]);
if (!(*argv[2] == '+' || (*argv[2] > '0'&& *argv[2] <= '9') || *argv[2] == '.')) {
cout
<< "題目數量必須是 正整數。";
exit(
0);
}
sz3(b1);
}

}

}

 重點:把算式輸出到文件中,方便打印。

ofstream fout;
fout.open(
"f4.txt");
fout
<< str << "=" << "\t" << "\t" << std::left << f << endl;
fout.close();

結對編程體會: 參考《構建之法》第四章,進行結對編程,我一開始是有些擔心的,因為兩個人的工作習慣的不同和脾氣的不同,所以在一起工作中怕會發生一些不愉快的事情,但事實證明我的擔心是多余的,我們倆的合作是非常愉快的,雖然會有小的分歧,但無傷大雅,結對編程雖然在效率上可能沒有一個人效率高,但是代碼的正確實現,小錯誤的找出,bug的調試都由兩個人完成,還有另一個非常深的感受是結對編程需要兩個人的精力充沛,就像我隊友說的需要天時地利人和,哈哈。

5項在編碼、爭論、復審等活動中花費時間較長,給你較大收獲的事件:

1.在制定代碼規范時,由於雙方的編程習慣和審美觀點不同,在制定規范出現了分歧,通過初步的在,線討論和面對面交談,雙方都進行妥協,最大限度的滿足兩個人的要求,這樣在接下來的編程過程中互相提醒和進步,對於結對編程來說是一個好的開始。

2.編程初期,我的隊友提出四則運算想采用窮舉的方法進行實現,我提出這個方法會不會代碼量過大,工作時間過長,但也同意用這個方法試試看,但接下來的工作過程中,代碼量過於龐大,.無法再往下進行,果真印證了這個猜想。

3.進行單元測試的時候 ,我的隊友認為應該所有的功能塊應該全部測試,我認為應該找重點的測試,在接下來的工作中,我的想法得到了認可。

4.在結對編程中,一個人在寫,一個人在檢查,在某個小問題上可能也要爭論半天,有時候隊友的提醒,雖然是是無心之舉,可能就打擾了正在編程工作者的思路,大大降低了效率。不過,既然是兩個人,能快速在別人身上學到自己不太熟悉的知識,認識到隊友指出自己的缺點,共同進步。

5.功能四的實現問題進行了討論,因為功能四的實現遇到困難,以至於兩個人在到底是否進行實現的問題上,出現分歧。最后由於各自時間安排,沒有實現功能四

要求2 給出照片1張,包括結對的2位同學、工作地點、計算機,可選項包括其他能表達結對編程工作經歷的物品或場景。

結對成員:王偉東、李圓圓

工作地點:計算機樓107教室

計算機:聯想電腦,操作系統為64位,內存為8g

編程經歷:應老師的要求,結對編程需在物理空間下,相距一兩米的距離,所以在選用了在無人上課的教室進行實際操作,因為工作地點的不穩定因素,所以要隨時更換工作地點,打斷工作進程,效率降低,其次因為事先工作習慣的原因,在電源突然切斷的情況下,對所完成的代碼進行提前保存,避免大量工作的重復進行。

照片:

要求3 使用coding.net做版本控制。checkin 前要求清理 臨時文件、可執行程序,通常執行 build-clean可以達到效果

git 地址:

 https://git.coding.net/wangwd/SecondAssignment.git

運行截圖:運行f4

判斷正整數


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com