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

Как вычислить дробь?

17.09.2021, 21:36. Показов 2983. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Стоит задание создать класс "Обыкновенная дробь" , члены класса-это числитель и знаменатель. Итогом программы должна быть дробь R=(a1/a2)*(a1-a3) (должна быть неделимой) и обратная ей, то есть 1/R. Также там должны быть реализованы методы: конструктор, деструктор, определение обратной дроби и метод вывода дроби. И ещё должны быть операторы перегрузки это сложение, вычитание, умножение дробей.

Деструктор я написал и перегрузки осуществил, но не знаю, как в мэйне осуществить вычисление дроби R.

Вот, что есть:

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
#include <iostream>
#include <string>
#include <math.h>
 
using namespace std;
 
class fraction
{
private:
    int numerator; // числитель
    int denomirator; // знаменатель
public:
    fraction(int valuea1=0, int valuea2=1)
    {
        numerator = valuea1;
        denomirator = valuea2;
    }
    fraction operator/(fraction f) // перегрузка деления дроби на дробь
    {
        fraction res(numerator*f.denomirator,denomirator*f.numerator);
        return res;
    }
    fraction operator+(fraction f) // перегрузка сложения дробей
    {
        fraction sum(numerator*f.denomirator+denomirator*f.numerator,denomirator*f.denomirator);
        return sum;
    }
    fraction operator-(fraction f) // перегрузка вычитания дробей
    {
        fraction sub(numerator*f.denomirator-denomirator*f.numerator,denomirator*f.denomirator);
        return sub;
    }
    fraction operator*(fraction f) // перегрузка вычитания дробей
    {
        fraction mul(numerator*f.numerator, denomirator*f.denomirator);
        return mul;
    }
    void Print()
    {
        cout<<numerator<<'/'<<denomirator<<endl;
    }
};
 
int main()
{
    setlocale(LC_ALL,"Rus");
    int R1, R2, R3;
    fraction c1(5, 6),c2(3, 4), c3(1, 2);
    cout<<"Исходные дроби:\n";
    c1.Print();
    c2.Print();
    c3.Print();
 
   
 
    cin.get();
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2021, 21:36
Ответы с готовыми решениями:

Как написать класс «несократимая дробь» (т.е. дроби 2/4, 4/8 и т.п. есть дробь 1/2)?
Я только начанаю знакомство с C++. В классе реализовать следующие методы: конструкторы (по умолчанию, с параметрами, копирования), ввод с...

Как вычислить дробь с корнем в числителе?
% TITLE &lt;&lt;5_1-FPU&gt;&gt; ; y=(2*c-d+sqrt23*a)/(a/4-1) .model small .8087 .stack 100h .data a1 dd ? c1 dd...

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

14
Заблокирован
17.09.2021, 21:50
Цитата Сообщение от Helpplease Посмотреть сообщение
(должна быть неделимой)
ну так нужно сокращать, при создании и при каждой операции.

Добавлено через 2 минуты
fraction R = (с1/с2)*(с1-с3);
fraction RR = R.reverse(); // сделать еще такой метод
0
1 / 1 / 0
Регистрация: 17.04.2020
Сообщений: 58
17.09.2021, 21:53  [ТС]
Дело в том, что я не знаю, как передать значение выполения операций, т.е. например перегруженная операция сложения дробей.
Я не знаю, как работу этой операции передать куда-то, чтоб дальше с ней работать, например сократить или провести дальнейшие вычисления дроби R

Добавлено через 1 минуту
Извиняюсь, не увидел
0
Заблокирован
17.09.2021, 22:04
Добавлено через 6 минут
Цитата Сообщение от Helpplease Посмотреть сообщение
например сократить
внутри класса, создать метод сокращения дроби, сделать его приватным,
вызывать при создании дроби и при операциях
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
17.09.2021, 22:27
Лучший ответ Сообщение было отмечено Helpplease как решение

Решение

Цитата Сообщение от Helpplease Посмотреть сообщение
C++
1
2
fraction sub(numerator*f.denomirator-denomirator*f.numerator,denomirator*f.denomirator);
        return sub;
Прикольные операторы, но я б, наверное, так не делал.
Однако с ними просто с сокращениями:
Кликните здесь для просмотра всего текста
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 <iostream>
#include <string>
#include <math.h>
 
#include <numeric> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
using namespace std;
 
class fraction
{
private:
    int numerator; // числитель
    int denomirator; // знаменатель
public:
 
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    void normalize()
    {
        int gcd = std::gcd(numerator, denomirator);
        if(gcd > 1)
        {
            numerator /= gcd;
            denomirator /= gcd;
        }
    }
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    fraction(int valuea1=0, int valuea2=1)
    {
        numerator = valuea1;
        denomirator = valuea2;
        normalize(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    }
    fraction operator/(fraction f) // перегрузка деления дроби на дробь
    {
        fraction res(numerator*f.denomirator,denomirator*f.numerator);
        return res;
    }
    fraction operator+(fraction f) // перегрузка сложения дробей
    {
        fraction sum(numerator*f.denomirator+denomirator*f.numerator,denomirator*f.denomirator);
        return sum;
    }
    fraction operator-(fraction f) // перегрузка вычитания дробей
    {
        fraction sub(numerator*f.denomirator-denomirator*f.numerator,denomirator*f.denomirator);
        return sub;
    }
    fraction operator*(fraction f) // перегрузка вычитания дробей
    {
        fraction mul(numerator*f.numerator, denomirator*f.denomirator);
        return mul;
    }
    void Print()
    {
        cout<<numerator<<'/'<<denomirator<<endl;
    }
};
 
int main()
{
    setlocale(LC_ALL,"Rus");
    int R1, R2, R3;
    fraction c1(5, 6),c2(3, 4), c3(1, 2);
    cout<<"Исходные дроби:\n";
    c1.Print();
    c2.Print();
    c3.Print();
 
    fraction ff = (c1 / c2) * (c1 - c3);
    ff.Print();
 
    cin.get();
    return 0;
}
2
Заблокирован
17.09.2021, 22:33
Folian, в примере с1-с3 нормализованные, но результат (R) нет.
Сокращать нужно и после вычислений.

Добавлено через 2 минуты
блин, просмотрел ))) смешно и глупо вышло ))

Добавлено через 25 секунд
ну а если будут операторы *= то там нужно будет сокращать ))
2
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
17.09.2021, 22:36
Цитата Сообщение от SmallEvil Посмотреть сообщение
в примере с1-с3 нормализованные, но результат (R) нет.
Ты операторы его видел? 0_о Я в конструктор нормализацию впихнул, даж проверил ещё раз на всякий - всё там нормализуется.
0
1 / 1 / 0
Регистрация: 17.04.2020
Сообщений: 58
17.09.2021, 22:40  [ТС]
Почему бы так не делал?
1
Заблокирован
17.09.2021, 22:42
Folian, gcd с 17 версии доступен, может ему и не прокатить... смотре где пишет.
Ну можно же и самому написать .
0
1 / 1 / 0
Регистрация: 17.04.2020
Сообщений: 58
17.09.2021, 22:43  [ТС]
А вот вопрос ещё
Я же не использую тут динамическое выделение памяти, тогда стоит ли сюда запихивать деструктор?

Добавлено через 45 секунд
Просто препод сказал, что дестркутор обязательно должен быть
0
Заблокирован
17.09.2021, 22:49
Цитата Сообщение от Helpplease Посмотреть сообщение
Просто препод сказал, что дестркутор обязательно должен быть
в данном случае он не нужен.
Но если нужно, значит нужно
C++
1
~fraction()=default;
1
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
17.09.2021, 22:59
Цитата Сообщение от SmallEvil Посмотреть сообщение
ну а если будут операторы *= то там нужно будет сокращать ))
Почему не люблю такие темы - постоянно что-то и дописать и наперёд ёрзается)
Цитата Сообщение от Helpplease Посмотреть сообщение
Почему бы так не делал?
Да нормально вроде всё, мне чёт померещилось; единственное - аргумент константной ссылкой бы, а не значением.
Цитата Сообщение от SmallEvil Посмотреть сообщение
может ему и не прокатить
Я руками писать не буду! У меня есть
Цитата Сообщение от Helpplease Посмотреть сообщение
Я же не использую тут динамическое выделение памяти, тогда стоит ли сюда запихивать деструктор?
Пустой засунь чтоб был.
1
Заблокирован
17.09.2021, 23:57
Цитата Сообщение от Folian Посмотреть сообщение
Почему бы так не делал?
там можно даже без переменной, сразу возвращать безымянный fraction
C++
1
return fraction(numerator*f.denomirator-denomirator*f.numerator,denomirator*f.denomirator);
Добавлено через 1 минуту
кстати, а как быть с нулем в знаменателе ???
1
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
18.09.2021, 00:36
Цитата Сообщение от SmallEvil Посмотреть сообщение
кстати, а как быть с нулем в знаменателе ???
Ага, и отрицательные)
Хочется в подобном всё и сразу, но иногда очень лениво )
Мы сейчас так до комплексных дойдём, я ж говорил
0
Заблокирован
18.09.2021, 01:09
Folian, , да, пора отсюда по тихому валить
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2021, 01:09
Помогаю со студенческими работами здесь

Вычислить дробь
Вычислить дробь (см. рис) REM REM d7 = 77.40463 REM DECLARE FUNCTION D! (a!, b!, c!) CLS d1 = D(3, 4, 5)

Вычислить цепную дробь.
Вычислить цепную дробь ...

Цепная дробь, вычислить
Вычислить с точностью до шести знаков бесконечную дробь 1+\frac{2}{1+\frac{2}{1+\frac{2}{1+...}}} Получается , что в теле программы...

Вычислить цепную дробь
Для данного вещественного X и натурального N вычислить цепную дробь: x/(1+x/2(+x/(3+x/(.../(N+x))...);

Вычислить цепную дробь
Вычислить:


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru