2014-12-01 2 views
-3
Fraction &operator+= (const Fraction &obj){ 
    if (denom == obj.denom){ 
     num += obj.num; 
    } 
    else{ 
     lcm = l_c_m(num, denom); 
     num * (lcm/denom) += obj.num * (lcm/obj.denom); 
    } 
    return *this; //returns current object 
    } 

//calculating highest common denominator 
int g_c_d(int n, int d){ 
    return d == 0? n : g_c_d(d, n % d); 
} 

int l_c_m(int a, int b){ 
    int temp = g_c_d(a, b); 
    return temp ? (a/(temp * b)) : 0; 
    } 

int main(){ 
    cout << frac1 << " + " << frac2 << " = "; 
    cout << (frac1 += frac2) << endl; 
    } 

Я пытаюсь добавить дробные части, используя этот код. Если перегруженный оператор добавления не работает, когда знаменатели разные. Но код действительно работает, когда знаменатели одинаковы.Как сделать работу оператора сложения?

+1

«не работает» не является полезным описание. –

+1

'num * (lcm/denom) + = obj.num * (lcm/obj.denom);'? – Jarod42

ответ

1

Если вы имели в виду сделать: lcm = lcm(obj.denom, denom);

Затем вам нужно изменить эту строку: num * (lcm/denom) += obj.num * (lcm/obj.denom);

Для этого: num = num * (lcm/denom) + obj.num * (lcm/obj.denom);

Кстати вы также должны обновить denom. denom = lcm;

+1

Вероятность того, что OP хочет '(num * lcm)/denom' над' num * (lcm/denom) ' – Jarod42

+0

@ Jarod42 Я предположил, что он хотел сделать lcm = lcm (obj.denom, denom); это не так? Есть некоторые проблемы с этим кодом ... –

0

Вы серьезно это имеете в виду? : -О

num * (lcm/denom) += obj.num * (lcm/obj.denom); 

сделать это правильно: -

num = num * (lcm/denom) + obj.num * (lcm/obj.denom); 
+0

«Сделай это правильно» ха-ха, ** '+ =' ** –

+0

lol ..! я думаю, я должен спать :-( – 3Demon

+0

Я работал над этим так поздно, что даже не знаю, что я пишу. В командном проекте мы человек короткий, а другой парень даже не придавал особого значения, поэтому, когда стресс ошибки происходят –

3

Ваша функция должна выглядеть как-то

Fraction &operator+= (const Fraction &obj){ 
    if (denom == obj.denom){ 
     num += obj.num; 
    } else { 
     num = num * obj.denom + obj.num * denom; 
     denom *= obj.denom; 
    } 
    normalize(); // simplify num and obj 
    return *this; //returns current object 
} 
+0

. Ваша часть частично работала. Мне пришлось использовать my g_c_d(), чтобы упростить эту функцию. Спасибо за помощь. –

+0

Это цель 'normalize()' или того, что вы называете этой функцией в вашем коде. – Jarod42

1

LCM = l_c_m (obj.denom, DENOM); num = num * (lcm/denom) + obj.num * (lcm/obj.denom);

0

Я думаю, что код должен быть таким

Fraction &operator+= (const Fraction &obj){ 
if (denom == obj.denom){ 
    num += obj.num; 
} 
else{ 
    lcm = l_c_m(obj.denom, denom); 
num= num * (lcm/denom) + obj.num * (lcm/obj.denom); 
} 
return *this; //returns current object 

}

+0

Полезно хотя бы дать короткое объяснение вашего ответа как против того, чтобы просто отказаться от кода. – Antiga

+0

да, ты прав, я здесь новый – batuhan

Смежные вопросы