Консультация № 178076
28.04.2010, 16:09
43.65 руб.
0 5 1
Здравствуйте, уважаемые эксперты. Помогите с задачей. Задача легкая, но времени на написание нет.
ОС Windows XP, Turbo C++ 3.0

Создать класс Rational, воплощающий абстракцию рациональных чисел, представляемых в виде дробей с числителем (numerator) и знаменателем (denominator). Инкапсулировать в классе Rational функции-члены класса, реализующие основные действия над рациональными числами (сложение, вычитание, умножение и деление). Учесть необходимость сокращения дробей в ходе вычислений.

Обсуждение

Неизвестный
28.04.2010, 16:24
общий
Жиляев М. Ю.:
Такой вопрос уже был ранее. https://rfpro.ru/question/160214

Только он сделан не под доисторический ТР 3, а под VS 2008.
Неизвестный
28.04.2010, 17:05
общий
это ответ
Здравствуйте, Жиляев М. Ю..
Не знал, что есть, поэтому тоже набросал. Не проверял, но по идее должно работать

Приложение:
#include <math.h>

class Rational {
typedef unsigned int uint;

void reduce() {
if (denominator == 0) numerator = 0;
else {
uint top = ceil(sqrt(denominator));
for (uint i(2); i < top; i++)
if (((numerator % i) == 0) && ((denominator % i) == 0)) {
numerator /= i;
denominator /= i;
i = 2;
}
}
return;
}
public:
int numerator;
uint denominator;

Rational(int num = 0, uint den = 0) {
numerator = num;
denominator = den;
reduce();
}

Rational makeRational(int num, uint den) {
Rational v(num, den);
return v;
}

Rational operator +(Rational v) {
int num = numerator * v.denominator + denominator * v.numerator;
uint den = denominator * v.denominator;
return makeRational(num, den);
}

Rational operator -(Rational v) {
int num = numerator * v.denominator - denominator * v.numerator;
uint den = denominator * v.denominator;
return makeRational(num, den);
}

Rational operator *(Rational v) {
return makeRational(numerator * v.numerator,
denominator * v.denominator);
}

Rational operator /(Rational v) {
return makeRational(numerator * v.denominator,
denominator * v.numerator);
}
};
Неизвестный
28.04.2010, 17:12
общий
Товарищи с одного института похоже, один вариант вытащили )
Неизвестный
28.04.2010, 19:45
общий
Жиляев М. Ю.:
Если Вы еще не посмотрели решение по ссылке эксперта Micren, но настоятельно советую сделать это. Решение Micren-а действительно профессиональное — намного лучше, чем предложенное Алексеем. И его легко адаптировать к Turbo C++ 3.0, изменения совсем небольшие.
Неизвестный
29.04.2010, 02:36
общий
Спасибо за ответ! Только с этим вопросом меня попросили помочь и отказать возможности нет, и времени самому писать нет - через неделю сессия начинается))
Форма ответа