Litteral& Rationnel::operator/(const Rationnel & l) const { //diviser c'est multiplier par l'inverse double tmp = (getNumerator()*l.getDenominator())/(getDenominator()*l.getNumerator()); if (isInt(tmp)) return LitteralManager::getInstance().addEntier(static_cast<int>(tmp)); QString s; s = QString("%1/%2").arg(getNumerator()*l.getDenominator()).arg(getDenominator()*l.getNumerator()); return LitteralManager::getInstance().addRationnel(s); }
Litteral& Rationnel::operator*(const Rationnel & l) const { //si le nouveau dénominateur vaut 1, alors on ajoute un entier double tmp = (getNumerator()*l.getNumerator())/(getDenominator()*l.getDenominator()); if (isInt(tmp)) return LitteralManager::getInstance().addEntier(static_cast<int>(tmp)); //Sinon on fait un rationnel QString s; s = QString("%1/%2").arg(getNumerator()*l.getNumerator()).arg(getDenominator()*l.getDenominator()); return LitteralManager::getInstance().addRationnel(s); }
Litteral& Rationnel::operator/(const Entier& l) const { double tmp = l.getValue()/getValue(); if (isInt(tmp)) return LitteralManager::getInstance().addEntier(static_cast<int>(tmp)); QString s; s = QString("%1/%2").arg(getNumerator()).arg(getDenominator()*l.getValue()); return LitteralManager::getInstance().addRationnel(s); }
Litteral& Rationnel::operator*(const Entier& l) const { double tmp = l.getValue()*getValue(); //Si le double résultant n'a plus de partie décimale, alors on le transforme en entier if (isInt(tmp)) return LitteralManager::getInstance().addEntier(static_cast<int>(tmp)); //Sinon on ajoute en tant que rationnel comme prévu QString s; s = QString("%1/%2").arg(l.getValue()*getNumerator()).arg(getDenominator()); return LitteralManager::getInstance().addRationnel(s); }
void RationalNumber::invert(void) { int top = getNumerator(); int bot = getDenominator(); if (top == 0) { return; } setValue(bot, top); }
Litteral& Rationnel::operator-(const Reel & l) const { double d = getNumerator() / getDenominator(); return LitteralManager::getInstance().addReel(l.getValue()-d); }
Litteral& Rationnel::operator-(const Entier& l) const { QString s; s = QString("%1/%2").arg(l.getValue()*getDenominator()-getNumerator()).arg(getDenominator()); return LitteralManager::getInstance().addRationnel(s); }
RationalNumber RationalNumber::getInversion(void) const { RationalNumber anumber(getDenominator(), getNumerator()); return anumber; }
const QString Rationnel::toString() const { std::stringstream s; s << getNumerateur().getValeur() << "/" << getDenominator().getValeur(); return QString::fromStdString(s.str()); }