我不能为我的生活付出为什么当我在代码中输入正常分数时,我得到了无限值。除了GCD(最大公约数)之外的所有东西似乎都在起作用。
在这个范围内是否存在明显明显的逻辑错误?
我已经完成了我的研究,并找到了问题的各种答案,我的意思是维基百科甚至给你编写代码,但是我想弄清楚如何使它按照我编码的方式工作现在是。
#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <math.h>
using namespace std;
class Fraction
{
private:
double num;
double den;
double fraction;
double temp;
public:
void setNum();
void setDen();
int getNum();
int getDen();
void lcdOutput();
void decOutput();
int gcd();
};
void Fraction::setNum(){
cout << "Enter a value for your numerator: " << endl;
cin >> num;
}
void Fraction::setDen(){
cout << "Enter a value for your denominator: " << endl;
cin >> den;
}
int Fraction::getNum(){
return num;
}
int Fraction::getDen(){
return den;
}
int Fraction::gcd(){
Fraction set;
if(num > den){
if(fmod(num, den) == 0){
den = temp;
return temp;
}
else{
den = fmod(num, den);
set.gcd();
}
}
else{
if(fmod(den, num) == 0){
num = temp;
return temp;
}
else{
num = fmod(den, num);
set.gcd();
}
}
}
void Fraction::lcdOutput(){
Fraction set;
set.gcd();
num = num / temp;
den = den / temp;
cout << "Fraction in lowest terms: " << num << "/" << den << endl;
}
void Fraction::decOutput(){
double decimal = num / den;
cout.precision(4);
cout << "The fraction in decimal form is: " << decimal << endl;
}
int main(){
Fraction set;
set.setNum();
set.setDen();
set.getNum();
set.getDen();
set.lcdOutput();
set.decOutput();
return 0;
}
答案 0 :(得分:6)
这是我可以通过单步执行代码来确定的。
从main开始,实例化名为Fraction
的{{1}}类型的实例。您可以通过调用set
和set.setNum()
来分配其分子和分母。在这种情况下,对set.setDen()
和getNum()
的调用不执行任何操作,因为它们未被分配给任何内容。
然后你致电getDen()
,让我们开始逐步完成。
首先,实例化一个LOCAL的Fraction实例(不知道为什么要这样做,在我看来这可能是一个概念上的错误),然后为该本地实例调用lcdOutput()
。调用set.gcd()
将调用THAT INSTANCE的方法,在我看来,您真正想要的是set.gcd()
或只是this->gcd()
。
您可以通过设置gcd()
和num = num / temp
进行跟进,但此时den = den / temp
仍然未初始化。如果变量未初始化,它可以(通常是)指向temp
。这可能解释了为什么要返回无意义的值。
答案 1 :(得分:0)
我回去自己想出来了。我看到了一些评论,并注意到我非常大的概念和逻辑错误。这是任何有同样问题的人!
int gcd(double num, double den){
if(den == 0){
return num;
}
return gcd(den, fmod(num, den));
}
void Fraction::lcdOutput(){
double temp = gcd(num, den);
cout << "Fraction in lowest terms: " << num / temp << "/" << den / temp << endl;
}