Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.11.2022
Сообщений: 20

Сложение двух дробей

06.02.2023, 13:28. Показов 3050. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не знаю, как реализовать сложение двух дробей (другие два задания выполнил и убрал с кода)...
Можете, пожалуйста, подсказать?

Перед вами частичная реализация на C++ математической дроби. Класс Fraction из себя представляет структуру данных с приватными полями _numerator (числитель) и _denomenator (знаменатель). Публичный метод toString() - дает строковое представление дроби
Приватный метод reduce() - сокращает дробь, если возможно

Необходимо реализовать следующие операторы:
● Оператор +=, увеличивает данную дробь на целое число
● Оператор ==, сравнивает между собой две дроби
● Оператор +, складывает между собой две дроби


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <string>
#include <numeric>
#include <stdexcept>
#include <iostream>
 
using namespace std;
 
class Fraction {
public:
    Fraction(const int num = 0, const int den = 1);
    Fraction(const Fraction& other) = default;
    ~Fraction() = default;
    std::string toString() const;
 
    Fraction& operator+=(int a);
    friend bool operator==(const Fraction& left, const Fraction& rigth);
    friend const Fraction operator+(const Fraction& left, const Fraction& rigth);
 
private:
    void reduce();
 
private:
    int _numerator;
    int _denomenator;
};
 
Fraction::Fraction(const int num, const int den) {
    if (den == 0) {
        throw std::invalid_argument("denomenator can't be zero");
    }
 
    _numerator = num;
    _denomenator = den;
 
    reduce();
}
 
std::string Fraction::toString() const {
    if (_numerator == 0) {
        return "0";
    }
 
    if (_denomenator == 1) {
        return std::to_string(_numerator);
    }
 
    return std::to_string(_numerator) + "/" + std::to_string(_denomenator);
}
 
void Fraction::reduce() {
    auto gcd = std::gcd(std::abs(_numerator), _denomenator);
 
    if (gcd != 1) {
        _numerator /= gcd;
        _denomenator /= gcd;
    }
}
 
const Fraction operator+(const Fraction& left, const Fraction& rigth) {
    if (left._denomenator == rigth._denomenator) {
        // Вот тут не знаю, как можно реализовать сложение, чтобы потом вернуть значение в d и вывести ее
    }
    else {
        
    }
}
 
int main() {
    Fraction a(0, 10);
    Fraction b(2, 5);
 
    auto d = a + b;
    std::cout << d.toString() << " " << "\n";
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2023, 13:28
Ответы с готовыми решениями:

Структура состоящая из двух дробей и методов работы с ними(сложение, вычитание)
Пишем в Microsoft Visual Studio 2010 -&gt; Win32 Console Application -&gt; C++ Собственно задача такова - создать программу со структурой...

Сложение дробей.
Я хочу сложить массив дробей. Числитель у меня один массив а знаменательль другой массив. Если бы у меня небыло дробей можно было бы...

сложение дробей
Даны две дроби A/B и C/D (А, В, С, D — натуральные числа). Составить функцию сложения этих дробей. Ответ должен быть несократимой дробью.

2
 Аватар для Юля_программист
682 / 192 / 60
Регистрация: 04.05.2012
Сообщений: 886
Записей в блоге: 1
06.02.2023, 14:03
Alexey123446,

Как вариент,

C++
1
2
3
4
5
6
7
8
9
10
11
12
const Fraction operator+(const Fraction& left, const Fraction& rigth) {
    Fraction res;
    if (left._denomenator == rigth._denomenator) {
        // Вот тут не знаю, как можно реализовать сложение, чтобы потом вернуть значение в d и вывести ее
        res._numerator =  left._numerator + rigth._numerator;
        res._denomenator = left._denomenator;
    }
    else {
 
    }
    return res;
}
В других случая аналогично, резльтат записываем в промежуточный обьект.
1
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
06.02.2023, 16:32
В сложении дробей условных переходов не надо.
C++
1
2
3
4
5
6
const Fraction operator+(const Fraction& left, const Fraction& rigth) {
    return {
        left._numerator * rigth._denomenator + rigth._numerator * left._denomenator,
        left._denomenator * rigth._denomenator;
    };
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2023, 16:32
Помогаю со студенческими работами здесь

Сложение дробей
Даны две дроби А/В и С/Д (А, В, С, D — натуральные числа). Составить программу для сложения этих дробей. Результат должен быть...

Сложение дробей
Как сложить две дроби? #include&lt;iostream&gt; using namespace std; class Drob { private: float chislet, znamenat;

Сложение обыкновенных дробей
Две дроби a/b и c/d можно сложить следующим образом: a/b + c/d = (a*d + b* c)/(b*d) Например, 1/4 + 2/3 = (1*3 + 4*2)/4*3 = 11/12 ...

Сложение и вычитание дробей
Не знаю как это можно сделать, надеюсь на вашу помощь Нужно вычеслить : \frac{1}{100}-\frac{1}{101}+\frac{1}{102}-\....+\frac{1}{10000}

Сложение дробей типа a/b и c/b
Добрый вечер есть пример одной (прикрепил фото) всё вроде должно работать если я не ошибся где-то вот только не могу понять как теперь те...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru