我相信我已經修正了大部分程序。到目前爲止,它是免費的錯誤,但執行的某一部分時我收到奇數值:無法在輸出中獲取正確的小數值
我的輸出是:
0/2 3/4 Cannot divide by zero Cannot divide by zero 0 0 Cannot divide by zero ____________________________________
我知道,我在我的函數的計算是正確的,但我相信他們沒有收到傳遞給它們的變量的保存值。
這裏是我的類:
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
class fraction {
private:
long num, den;
public:
fraction() {}
fraction(int n, int d) {
num = n;
if (d == 0) {
cout << "Careful there, Tim..." << endl;
exit(0);
} else
den = d;
}
void setNum(long l_num) { num = l_num; }
void setDen(long l_den) { den = l_den; }
long getNum() { return num; }
long getDen() { return den; }
long add(fraction& a, fraction& b) {
int n = (a.getNum() * b.getDen()) + (b.getNum() * a.getDen());
int d = a.getNum() * b.getDen();
num = n/gcd(n, d);
den = d/gcd(n, d);
return num;
return den;
}
long sub(fraction& a, fraction& b) {
int n = a.getNum() * b.getDen() - b.getNum() * a.getDen();
int d = a.getNum() * b.getDen();
num = n/gcd(n, d);
den = d/gcd(n, d);
}
long mult(fraction& a, fraction& b) {
int n = a.getNum() * b.getNum();
int d = a.getDen() * b.getDen();
num = n/gcd(n, d);
den = d/gcd(n, d);
}
long div(fraction& a, fraction& b) {
int n = a.getNum() * b.getDen();
int d = a.getDen() * b.getNum();
num = n/gcd(n, d);
den = d/gcd(n, d);
}
long inc(fraction& a) {
int n = a.getNum() + 1;
int d = a.getDen() + 1;
}
long gcd(long n, long d) {
int remainder;
while (d != 0) {
remainder = n % d;
n = d;
d = remainder;
}
return n;
}
void print() // Display method
{
if (den == 1)
cout << num << endl;
else if (den == 0)
cout << "Cannot divide by zero" << endl;
else
cout << num << "/" << den << endl;
}
};
我的教練給了我們嚴格的指示,不要改變他給出int main()
,但在這裏它是:
int main() { // define seven instances of the class fraction
fraction f1, f2, f3, f4, f5, f6, f7;
// set values for the numerator and denominator to f1 and print
// them
f1.setDen(2L);
f1.setNum(0L);
f1.print();
// set values for the numerator and denominator to f2 and print them
f2.setDen(4L);
f2.setNum(3L);
f2.print();
f3.add(f1, f2);
f3.print();
f4.sub(f1, f2);
f4.print();
f5.mult(f1, f2);
f5.print();
f6.div(f1, f2);
f6.print();
f7.inc(f1);
f7.print();
}
我已經提出幫助該程序一次從SO之前,我被非常好的人接近。我再次給我的教授發了兩封電子郵件,然後打電話給他的辦公室。他沒有回答//閱讀我的電子郵件閱讀cc打開,並且未回覆我留下的語音郵件。
你一定'gcd'功能是OK?函數'add'中有無法訪問的代碼'return den;'。給'gcd'函數添加一些測試。 – NetVipeC 2014-09-05 20:10:45
如果'gcd'工作,整數除法是沒有問題的。目前唯一的分區是'分子/ gcd'和'分母/ gcd',如果'gcd'確定就可以分割。 – NetVipeC 2014-09-05 20:12:47
我已經使用add函數作爲一種'測試'來看看我是否可以操縱它來產生一個很好的答案。 我將如何去改變它輸出正確的答案? – 2014-09-05 20:15:33