2017-05-04 23 views
-4

コンピュータは、生徒が算数問題を解決する能力をテストするために広く使われてきました。このコードをより効率的に短くするにはどうすればよいですか?

学生は、1から100の間のランダムな整数を使って、加算、減算、または乗算をテストするプログラムを書いています。問題の種類を選択することから始まり、3つのチャンスそれぞれ正しく答える。 3回のチャンスの後でも答えが間違っていれば、正しい答えが表示されます。スコアは、最初の試行では正解10点、2試行で5点、3試行で2点、3試行が間違っている場合は0点を与えて計算されます。プログラム。ここで

が唯一の私の試みであるこの問題:

#include<iostream> 
#include<stdlib.h> 
#include<time.h> 

using namespace std; 

int num() 
{ 
    return rand()%100+1; 
} 

//Screen ---------------------------------------------------------------------------------------------------------- 
int screen() 
{ 
    int choice; 

    cout<<"Enter the number for the problem type desired.\n"; 
    cout<<" 1. Addition\n"; 
    cout<<" 2. Subtraction\n"; 
    cout<<" 3. Multiplication\n\n"; 
    cout<<"Enter choice: "; 
    cin>>choice; 

    return choice; 
} 

//Multiplications ----------------------------------------------------------------------------------------------------- 
void Multi(int &tries, int&score, int &true_answer) 
{ 
    int num1, num2, answer; 
    num1 = num(); 
    num2 = num(); 
    true_answer = num1+num2; 
    cout<<"\n"<<num1<<" * "<<num2<<" = "; 
    cin>>answer; 

    if(num1 * num2 != answer) 
    { 
    cout<<"Wrong, Try again\n"; 
    tries++; 
    } 
    else 
    { 
    cout<<"CORRECT\n"; 
    } 

    if(tries == 0 && num1*num2 == answer) 
    { 
    score+=10; 
    } 

    if(tries == 1 && num1*num2 == answer) 
    { 
    score += 5; 
    } 

    if(tries == 2 && num1*num2 == answer) 
    { 
    score += 2; 
    } 

    if(tries == 3) 
    { 
    score += 0; 
    } 
} 

// Subtraction ------------------------------------------------------------------------------------------------------- 
void Subtract(int &tries, int &score, int &true_answer) 
{ 
    int num1, num2, answer; 
    num1 = num(); 
    num2 = num(); 
    true_answer = num1 + num2; 
    cout<<"\n"<<num1<<" - "<<num2<<" = "; 
    cin>>answer; 

    if(num1 - num2 != answer) 
    { 
    cout<<"Wrong, Try again\n"; 
    tries++; 
    } 
    else 
    { 
    cout<<"CORRECT\n"; 
    } 

    if(tries == 0 && num1-num2 == answer) 
    { 
    score+=10; 
    } 

    if(tries == 1 && num1-num2 == answer) 
    { 
    score += 5; 
    } 

    if(tries == 2 && num1-num2 == answer) 
    { 
    score += 2; 
    } 

    if(tries == 3) 
    { 
    score += 0; 
    } 
} 

//Addition ------------------------------------------------------------------------------------------------------- 
void Add(int &tries, int &score, int &true_answer) 
{ 
    int num1, num2, answer; 
    num1 = num(); 
    num2 = num(); 
    true_answer = num1+num2; 
    cout<<"\n"<<num1<<" + "<<num2<<" = "; 
    cin>>answer; 

    if(num1+num2 != answer) 
    { 
    cout<<"Wrong, Try again\n"; 
    tries++; 
    } 
    else 
    { 
    cout<<"CORRECT\n"; 
    } 

    if(tries == 0 && num1+num2 == answer) 
    { 
    score+=10; 
    } 

    if(tries == 1 && num1+num2 == answer) 
    { 
    score += 5; 
    } 

    if(tries == 2 && num1+num2 == answer) 
    { 
    score += 2; 
    } 

    if(tries == 3) 
    { 
    score += 0; 
    } 
} 

int main() 
{ 
    int answer, choice, score, tries, true_answer; 
    score = 0; 
    tries = 0; 
    srand(time(NULL)); 
    choice = screen(); 

    while(tries!=3) 
    { 
    if(choice == 1) 
    { 
     for(int i = 1; i<=10; i++) 
     { 
     Add(tries, score, true_answer); 
     if(tries==3) 
     { 
      break; 
     } 
     } 
    } 

    if(choice == 2) 
    { 
     for(int i = 1; i<=10; i++) 
     { 
     Subtract(tries, score, true_answer); 
     if(tries==3) 
     { 
      break; 
     } 
     } 
    } 

    if(choice == 3) 
    { 
     for(int i = 1; i<=10; i++) 
     { 
     Multi(tries, score, true_answer); 
     if(tries==3) 
     { 
      break; 
     } 
     } 
    } 

    if(tries == 3) 
    { 
     cout<<"You have missed 3 times. The answer is "<<true_answer<<"."; 
     break; 
    } 
    } 

    cout<<"\n\n"<<"Total Score: "<<score<<"\n\n"; 
    return 0; 
} 
+0

ステップ1:役に立たないコメントや過度の空行を削除します。また、インデントの一貫性を保つ。 –

+0

なぜ乱数を生成するのですか? num1とnum2のユーザー入力ではありませんか? – Shadi

答えて

0

すべての操作は、関数として分離することができるものの違いと同じコードを持っているので、あなたは、それぞれに別々のコードを記述する必要はありません。

新しい試行で新しい質問のように一部の誤ったロジックが修正されました。

あなたは、開始点として、このコードを使用して、あなたにそれを比較し、それがさらに良く作ってみることができます。

#include<iostream> 
#include<stdlib.h> 
#include<time.h> 
using namespace std; 

int random_num() { return rand() % 100 + 1; } 

void screen() 
{ 
    cout << "\n Enter the number for the problem type desired.\n\n"; 
    cout << " 1. Addition\n"; 
    cout << " 2. Subtraction\n"; 
    cout << " 3. Multiplication\n"; 
    cout << " x. Exit.\n\n"; 

    cout << "\n Enter your choice: "; 
} 

int calc(int n1, int n2, int choice, char &op) 
{ 
    switch (choice) 
    { 
     case 1: op = '+' ; return n1 + n2; 
     case 2: op = '-' ; return n1 - n2; 
     case 3: op = '*' ; return n1 * n2; 
    } 

    cout << "\n Error: Incorrect choice"; 
    return 0; 
} 

int ded(int tries) 
{ 
    switch (tries) 
    { 
     case 0: return 0; 
     case 1: return 5; 
     case 2: return 8; 
    } 
    return 10; 
} 

int main() 
{ 
    int choice, score = 0, tscore = 0, tries = 0; 
    int true_answer, user_answer; 
    char op; 

    srand(time(NULL)); 
    screen(); 
    cin >> choice; 

    while(choice >= 1 && choice <= 3) 
    { 
     bool is_correct = false; 

     int num1 = random_num(); 
     int num2 = random_num(); 

     true_answer = calc(num1, num2, choice, op); 

     do 
     { 
      cout << "\n\n " << num1 << " " << op << " " << num2 << " = "; 
      cin >> user_answer; 

      if (user_answer == true_answer) 
      { 
       is_correct = true; 

       score += 10 - ded(tries); 
       tscore += score; 
       tries = 0; 
      } 
      else 
      { 
       cout << "\n Incorrect answer. \n\n"; 
       ++tries; 
      } 

      if (!(tries > 0 && tries < 3)) 
      { 
       cout << "\n Correct answer.\n\n"; 
       cout << "\n Score = " << score; 
       cout << "\n Total Score = " << tscore << "\n\n\n"; 
      } 
     }while (!is_correct && tries < 3); 

     tries = 0; 
     score = 0; 
     screen(); 
     cin >> choice; 
    } 

    cout << "Good bye! \n\n\n"; 

    return 0; 
} 
関連する問題