Предмет: Информатика, автор: yanakotic2004rus

С++ Разработать модуль для работы с обыкновенными дробями,

числителем и знаменателем которых являются длинные числа.

В модуле должны быть представлены следующие операции:

сложение;

вычитание;

умножение;

деление;

сокращение;

выделение целой части;

отношения в виде логических функций.

Используя разработанный модуль, найти разность минималь-

ного и максимального элементов заданного массива обыкновен-

ных дробей.

Ответы

Автор ответа: ttty77389
0

Ответ:

Для реализации модуля для работы с обыкновенными дробями с длинными числами в качестве числителя и знаменателя, можно использовать класс Fraction, который будет содержать поля для числителя и знаменателя, а также методы для выполнения операций над дробями. Вот пример реализации такого класса на языке C++:

Объяснение:

#include <iostream>

#include <string>

#include <algorithm>

#include <numeric>

#include <cmath>

class Fraction {

public:

   Fraction(long long num = 0, long long den = 1) {

       numerator = num;

       denominator = den;

       reduce();

   }

   long long getNumerator() const {

       return numerator;

   }

   long long getDenominator() const {

       return denominator;

   }

   Fraction operator+(const Fraction& other) const {

       long long lcm = std::lcm(denominator, other.denominator);

       long long num = numerator * lcm / denominator + other.numerator * lcm / other.denominator;

       return Fraction(num, lcm);

   }

   Fraction operator-(const Fraction& other) const {

       long long lcm = std::lcm(denominator, other.denominator);

       long long num = numerator * lcm / denominator - other.numerator * lcm / other.denominator;

       return Fraction(num, lcm);

   }

   Fraction operator*(const Fraction& other) const {

       long long num = numerator * other.numerator;

       long long den = denominator * other.denominator;

       return Fraction(num, den);

   }

   Fraction operator/(const Fraction& other) const {

       long long num = numerator * other.denominator;

       long long den = denominator * other.numerator;

       return Fraction(num, den);

   }

   Fraction reduce() {

       long long gcd = std::gcd(numerator, denominator);

       numerator /= gcd;

       denominator /= gcd;

       if (denominator < 0) {

           numerator = -numerator;

           denominator = -denominator;

       }

       return *this;

   }

   int integerPart() const {

       return numerator / denominator;

   }

   bool operator==(const Fraction& other) const {

       return numerator == other.numerator && denominator == other.denominator;

   }

   bool operator!=(const Fraction& other) const {

       return !(*this == other);

   }

   bool operator<(const Fraction& other) const {

       long long lcm = std::lcm(denominator, other.denominator);

       return numerator * lcm / denominator < other.numerator * lcm / other.denominator;

   }

   bool operator<=(const Fraction& other) const {

       return *this < other || *this == other;

   }

   bool operator>(const Fraction& other) const {

       return !(*this <= other);

   }

   bool operator>=(const Fraction& other) const {

       return !(*this < other);

   }

private:

   long long numerator;

   long long denominator;

};

std::ostream& operator<<(std::ostream& out, const Fraction& f) {

   out << f.getNumerator() << "/" << f.getDenominator();

   return out;

}

Fraction maxFraction(const Fraction* fractions, int size) {

   Fraction max = fractions[0];

   for (int i = 1; i < size; ++i) {

       if (fractions[i] > max) {

           max = fractions[i];

       }

   }

   return max;

}

Fraction minFraction(const Fraction* fractions, int

Похожие вопросы
Предмет: География, автор: quliyevafarida358
Предмет: Химия, автор: kirillhohlov466