2014-04-11 5 views
0

Iam은 두 분수를 더하고 결과에 따라 가장 낮은 형태 또는 혼합 된 형태로 결과 분수를 얻는 방법을 찾으려고 노력하지만 문제는 동일한 분모로 두 분수를 입력 할 때 문제가되는 것입니다. 다른 망쳐 놨어요 모든 그래서 그들은 모두 항상 0이다이 분모가 같은 경우 지금까지분수 계산기 C++

#include<cmath> 
#include<iostream> 
using namespace std; 
void reduce_fraction(int &numerator, int &denominator); 
void addFractions(int numerator1Par, int denominator1Par, int numerator2Par, int    denominator2Par); 
int main(){ 
    int numerator1 = 0; 
    int denominator1 = 0; 
    int numerator2 = 0; 
    int denominator2 = 0; 
    int unfactoredNumerator = 0; 
    int resultDenominator = 0; 
    int mixedNumberRemainder = 0; 
    int mixedNumberWhole = 0; 
    int reducedNumerator = 0; 
    int reducedDenominator = 0; 
    int result; 
    int greatCommonDenominator; 
    cout << "Enter first numerator: "; 
    cin >> numerator1; 

    cout << "Enter first denominator: "; 
    cin >> denominator1; 
    cout << endl; 


    cout << "Enter second numerator: "; 
    cin >> numerator2; 

    cout << "Enter second denominator: "; 
    cin >> denominator2; 
    cout << endl; 
    if (denominator1 == denominator2) 
    { 
      result = numerator1 + numerator2; 
      if (unfactoredNumerator>resultDenominator){ 
        int a = unfactoredNumerator/resultDenominator; 
        int b = unfactoredNumerator - (a*resultDenominator); 
        cout << numerator1 << "/" << denominator1 << " + " << numerator2 << "/" << denominator2 << " = " << a << " " << b << "/" << resultDenominator << endl; 
      } 
      else 
      { 
        if (unfactoredNumerator == 0 && resultDenominator == 0) 
          greatCommonDenominator = 1; 
        else if (resultDenominator == 0) 
          greatCommonDenominator = unfactoredNumerator; 
        else if (unfactoredNumerator != 0) { 
          int a = unfactoredNumerator, b = resultDenominator; 
          while (a != b) 
            if (a < b) 
              b -= a; 
            else 
              a -= b; 
          greatCommonDenominator = b; 
        } 
        cout << numerator1 << "/" << denominator1 << " + " << numerator2 << "/" << denominator2 << " = " << (unfactoredNumerator/greatCommonDenominator) << "/" << (resultDenominator/greatCommonDenominator) << endl; 
      } 

    } 
    else 
    { 
      addFractions(numerator1, denominator1, numerator2, denominator2); 
    } 
    system("pause>nul"); 
    return 0; 
} 

void reduce_fraction(int &numerator, int &denominator) 
{ 
    for (int i = denominator * numerator; i > 1; i--) { 
      if ((denominator % i == 0) && (numerator % i == 0)) 
      { 
        denominator /= i; 
        numerator /= i; 
      } 

    } 
} 
void addFractions(int numerator1Par, int denominator1Par, int numerator2Par, int denominator2Par) { 
    int unfactoredNumerator; 
    int resultDenominator; 
    int greatCommonDenominator; 
    unfactoredNumerator = numerator1Par * denominator2Par + numerator2Par * denominator1Par; 
    resultDenominator = denominator1Par * denominator2Par; 
    if (unfactoredNumerator>resultDenominator){ 
      int a = unfactoredNumerator/resultDenominator; 
      int b = unfactoredNumerator - (a*resultDenominator); 
      cout << numerator1Par << "/" << denominator1Par << " + " << numerator2Par << "/" << denominator2Par << " = " << a << " " << b << "/" << resultDenominator << endl; 
    } 
    else 
    { 
      if (unfactoredNumerator == 0 && resultDenominator == 0) 
        greatCommonDenominator = 1; 
      else if (resultDenominator == 0) 
        greatCommonDenominator = unfactoredNumerator; 
      else if (unfactoredNumerator != 0) { 
        int a = unfactoredNumerator, b = resultDenominator; 
        while (a != b) 
          if (a < b) 
            b -= a; 
          else 
            a -= b; 
        greatCommonDenominator = b; 
      } 
      cout << numerator1Par << "/" << denominator1Par << " + " << numerator2Par << "/" << denominator2Par << " = " << (unfactoredNumerator/greatCommonDenominator) << "/" << (resultDenominator/greatCommonDenominator) << endl; 
    } 

} 
+0

실제 문제를 보여주는 예제 인풋과 아웃풋을 추가해야합니다. "그냥 엉망이 되네"정말 도움이되지 않습니다. – Axel

+0

오 오 죄송합니다. 5/6과 1/10을 입력하면 답은 14/15가 될 것입니다. 그러나 4/5와 3/5를 입력하면 출력은 0/0입니다. 올바른 출력은 1/2이어야합니다. 5 그리고 내가 2/9와 16/18을 입력하면 출력은 1 18/162이고 또한 올바른 출력은 1이어야 함 1/9 –

답변

0

, 당신은 unfactoredNumeratorresultDenominator를 초기화하지 않는 내가 가지고있는 코드입니다 완벽하게 작동합니다. 또한 resultDenominator이 0으로 나누기 전에 점검하지 않습니다. (분자와 분모에 전달 된 값이 0인지 여부를 확인하고 그에 따라 처리해야합니다.)

+0

내 문제와 1 18/162를 지적 해 주셔서 고맙습니다. 나가 분수를 감소시키는 기능을 부르지 않았기 때문에 나오기 때문에, 나를 도와 주신 모든 분들께 다시 한번 감사드립니다. –