c++ - 无法在输出中获取正确的分数值

标签 c++ class fractions

我相信我已经更正了程序的大部分内容。到目前为止它没有错误,但我在执行的某个部分收到了奇数:

我的输出是:

0/2
3/4
Cannot divide by zero
Cannot divide by zero
0
0
Cannot divide by zero
____________________________________

我知道我的函数计算是正确的,但我相信它们没有收到传递给它们的变量的保存值。

这是我的类(class):

#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 那里请求过一次关于这个程序的帮助,并且遇到了非常好的人。我又给我的教授发了两次电子邮件,并打电话到他的办公室。他没有回复//阅读我的电子邮件打开时抄送并且没有回复我留下的语音邮件。

最佳答案

我想我发现你有问题,关于你计算 d 时的加/减函数,

int d = a.getNum() * b.getDen();

你犯了一个错误,对于 D,你实际上应该这样做:

int d = a.getDen() * b.getDen();

从你的添加函数中你应该删除两个返回值

   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;
    }

在你的 inc 函数上你忘记设置 num,den:

   long inc(fraction& a) {
        num = a.getNum() + 1;
        den = a.getDen() + 1;
    }

检查一下 http://ideone.com/C7KgD3查看结果

关于c++ - 无法在输出中获取正确的分数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25693236/

相关文章:

java - 解释java类文件的十六进制转储

c++ - 如何在不在基类中的派生类中访问 STL 类的成员函数? (正文有详细解释)

php - 使用不同的共享方法和属性扩展 PHP 类

c++ - 将浮点十进制值转换为分数

c++ - 为什么slot函数调用成功也无法插入文本

c++ - STDLIB 中容器元素类型的要求是什么?

c++ - 第一次使用 Boost::asio::async_read 读取时出现 EOF

c++ - 如何通过名称获取 id 顶点?

java - 减少负分数

R:在数据框中将分数转换为小数