結對編碼-四則運算 2252118 2252121

gujiahao發表於2024-04-21

2252118 2252121
程式具有以下特點和功能:
隨機生成題目:程式會隨機生成包含兩個運算子(加、減、乘、除)的四則運算題目。
整數結果:所有運算的結果都是整數,避免了小數的出現。
運算子優先順序:程式正確處理了運算子的優先順序,確保乘法和除法在加法和減法之前執行。
整除調整:在涉及除法的題目中,程式會調整數字以確保結果為整數。
使用者交雲:使用者可以輸入他們的答案,程式會檢查答案是否正確,並提供反饋。
鼓勵資訊:根據使用者完成的題目數量,程式會輸出不同的鼓勵資訊。
錯誤反饋:當使用者連續答錯一定數量的題目時,程式會提供相應的反饋,鼓勵使用者更加認真。
退出機制:使用者可以透過輸入特定的命令(-1)來退出程式。

include

include

include

include

int calculate(int num1, int num2, char op);
bool isResultValid(int result);
void printEncouragement(int count);
void printErrorFeedback(int errorCount);
int main() {
srand(static_cast(time(0)));
int num1, num2, num3, result;
char op1, op2;
std::string input;
int count = 0;
int errorCount = 0;

while (true) {
    do {
        num1 = rand() % 100 + 1; 
        num2 = rand() % 100 + 1;
        num3 = rand() % 100 + 1;
        op1 = "+-*/"[rand() % 4];
        op2 = "+-*/"[rand() % 4];
        if (op1 == '/' && num1 % num2 != 0) {
            num1 = num2 * (rand() % 10 + 1);
        }
        if (op2 == '/' && num2 % num3 != 0) {
            num2 = num3 * (rand() % 10 + 1);
        }
        if (op1 == '+' || op1 == '-') {
            if (op2 == '*' || op2 == '/') {
                num2 = calculate(num2, num3, op2);
                op2 = op1;
                num3 = rand() % 100 + 1;
            }
        }
        result = calculate(num1, num2, op1);
        result = calculate(result, num3, op2);
    } while (!isResultValid(result));
    std::cout << num1 << ' ' << op1 << ' ' << num2 << ' ' << op2 << ' ' << num3 << " = ?\n";
    std::cin >> input;
    if (input == "-1") {
        break;
    }
    int userAnswer;
    std::stringstream ss(input);
    ss >> userAnswer;
    if (userAnswer == result) {
        std::cout << "正確\n";
        errorCount = 0; 
    }
    else {
        errorCount++;
        std::cout << "錯誤\n";
        printErrorFeedback(errorCount);
    }
    count++;
    printEncouragement(count);
}
return 0;

}
int calculate(int num1, int num2, char op) {
switch (op) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/': return num2 != 0 ? num1 / num2 : 1;
default: return 0;
}
}
bool isResultValid(int result) {
return result >= 0 && result <= 1000;
}
void printEncouragement(int count) {
switch (count) {
case 1:
std::cout << "還需努力\n";
break;
case 2:
std::cout << "再努力一把\n";
break;
case 3:
std::cout << "今天的量完成啦,請繼續提高\n";
break;
case 4:
std::cout << "加油,還能努力一把\n";
break;
case 5:
std::cout << "今天的任務超額完成了,該休息了,明天繼續\n";
break;
default:
// No encouragement for other counts
break;
}
}

// Print error feedback based on the error count
void printErrorFeedback(int errorCount) {
if (errorCount >= 5 && errorCount < 10) {

    std::cout << "你錯的有點多了哦\n";
}
else if (errorCount >= 10) {
    std::cout << "做題要認真哦\n";
}

}
這裡便於展示,達到提示的次數調整為1-5次與錯誤5次以上和10次以上




實驗總結:
結對程式設計優點:
溝通與協作:結對程式設計強調了溝通的重要性。透過密切合作,我們能夠更好地理解問題,找到更有效的解決方案,並且在編碼過程中即時解決疑問。
知識共享:這次實驗是一個學習和教學的過程。雙方可以互相學習對方的程式設計技巧和解決問題的方法,從而提高個人技能。
程式碼質量:有兩套眼睛檢查程式碼意味著錯誤更容易被發現和修正。這通常會導致更高質量、更可維護的程式碼。
互相學習:每個人都有自己的強項和弱點。結對程式設計使得團隊成員能夠互補技能,共同成長。
動態互動:與傳統的程式設計相比,結對程式設計更加動態和互動。它鼓勵實時反饋和討論,這有助於快速學習和適應。
問題解決:在遇到難題時,兩個頭腦比一個頭腦好用。結對程式設計提供了即時的支援和創意,有助於找到解決問題的新方法。
效率:雖然結對程式設計可能看起來效率較低,但它實際上可以透過減少錯誤和提高程式碼質量來節省時間。
這次結對程式設計的實驗是一個寶貴的學習經歷,它不僅提高了程式設計技能,還加深了對團隊合作和溝通重要性的理解。

相關文章