Форум программистов, компьютерный форум CyberForum.ru

Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Bekbolat
0 / 0 / 0
Регистрация: 16.08.2013
Сообщений: 22
16.08.2013, 10:24     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #1
Составить описание класса. Определить конструктор по умолчанию, конструктор с параметрами и методы класса. Написать программу, демонстрирующую работу с классом для работы с рациональными дробями вида m/n, где m и n – целые числа. Реализовать методы класса: умножение двух дробей; деление двух дробей; сравнение двух дробей
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2013, 10:24     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел»)
Посмотрите здесь:

C++ Ввести класс для работы с объектом "рациональная дробь"
Разработать класс, представляющий собой множество целых чисел, с методом определения множества C++
Разработать класс (Объект «рациональная не сократимая дробь, представлен парой целых чисел») C++
Разработать класс, моделирующий массив целых чисел и его обработку C++
C++ Класс для работы с объектом "рациональная дробь"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
16.08.2013, 13:59     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #21
Цитата Сообщение от Мимино Посмотреть сообщение
for (int i = 1; i > 0; i++)
условие продолжения цикла всегда true
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
16.08.2013, 14:10     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #22
Цитата Сообщение от BigLow Посмотреть сообщение
условие продолжения цикла всегда true
Да, но оно в любом случае будет выполнено (максимум x * y итераций). Тупой поиск общего кратного перебором.

Добавлено через 7 минут
Цитата Сообщение от salam Посмотреть сообщение
Я имел ввиду, что это тоже говнокод.
Всегда приятно пообщаться с умными людьми Я смотрю, у Вас везде "говнокод". И при этом во всех Ваших 362 сообщениях ни одной строки "своего" кода, а только попытка унижения собеседников путем высказываний о их "необразованности". Интересно, это вообще с какой целью?
Bekbolat
0 / 0 / 0
Регистрация: 16.08.2013
Сообщений: 22
16.08.2013, 14:14  [ТС]     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #23
Составить описание класса. Определить конструктор по умолчанию, конструктор с параметрами и методы класса. Написать программу, демонстрирующую работу с классом для работы с рациональными дробями вида m/n, где m и n – целые числа. Реализовать методы класса: ввод дроби; вывод дроби в виде m/n (например, 1/3 или -2/5); приведение дроби к несократимому виду.

Добавлено через 17 секунд
pomogite reshit
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 14:33     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #24
Цитата Сообщение от Bekbolat Посмотреть сообщение
pomogite reshit
Тебе же уже все помогли.
Я думаю сравнивать правильней всего так:
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
#include <iostream>
 
using namespace std;
 
class rational {
    int num, den, nod;
 
    int gcd( int x, int y ) {
        if ( y == 0 ) return x;
        return gcd( y, x % y );
    }
 
public:
    rational( int n, int d ) : num(n), den(d), nod(gcd( n, d )) {}
 
    bool operator == ( const rational & a ) {
        return (num / nod == a.num / a.nod) &&
               (den / nod == a.den / a.nod);
    }
};
 
int main()
{
    rational a( 4, 2 );
    rational b( 2, 1 );
 
    cout << ((a == b) ? "==" : "!=") << endl;
    return 0;
}
Bekbolat
0 / 0 / 0
Регистрация: 16.08.2013
Сообщений: 22
16.08.2013, 14:49  [ТС]     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #25
ya tut drugyu zada4u poprosil pomo4. vot na etu
Составить описание класса. Определить конструктор по умолчанию, конструктор с параметрами и методы класса. Написать программу, демонстрирующую работу с классом для работы с рациональными дробями вида m/n, где m и n – целые числа. Реализовать методы класса: ввод дроби; вывод дроби в виде m/n (например, 1/3 или -2/5); приведение дроби к несократимому виду.
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 14:51     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #26
Цитата Сообщение от Bekbolat Посмотреть сообщение
vot na etu
Вот иди туда: http://www.cyberforum.ru/order-program/
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
16.08.2013, 14:56     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #27
Цитата Сообщение от Мимино Посмотреть сообщение
Всегда приятно пообщаться с умными людьми Я смотрю, у Вас везде "говнокод". И при этом во всех Ваших 362 сообщениях ни одной строки "своего" кода, а только попытка унижения собеседников путем высказываний о их "необразованности". Интересно, это вообще с какой целью?
не опускайтесь до моего уровня: в моих сообщениях есть мой собственный код.
что касается разговоров по сути дела... мне показалось, что нужно намекнуть и вам, и людям, которые, возможно, захотят использовать ваш код, что в нем есть фрагмент, содержащий очень непрактичную и вычислительно сложную реализацию простого алгоритма. я имел ввиду вычисление НОК двух целых чисел. вы изволили находить его перебором чисел на полуинтервале [1; +∞). в то время как можно искать его быстрее.
воспользуемся простой математической формулой: http://www.cyberforum.ru/cgi-bin/latex.cgi?lcm(a, b) = \frac{a * b}{gcd(a, b)}
схематично докажем ее:
даны натуральные числа a, b.
обозначим g такое число, что http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases} & \text{} g \mid a \\  & \text{} g \mid b  \end{cases}

тогда мы можем однозначно определить: http://www.cyberforum.ru/cgi-bin/latex.cgi?a = g * {k}_{a}, http://www.cyberforum.ru/cgi-bin/latex.cgi?b = g * {k}_{b}, http://www.cyberforum.ru/cgi-bin/latex.cgi?a * b = g * {k}_{a} * g * {k}_{b}
произведение http://www.cyberforum.ru/cgi-bin/latex.cgi?{k}_{a} * g * {k}_{b} удовлетворяет требованием lcm(a, b), так как очевидно делится на a, b, при этом оно удовлетворяет критерию минимальности, т.к: http://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases}  gcd({k}_{a}, {k}_{b}) = 1  \\   gcd({k}_{a}, g) = 1 \\   gcd({k}_{b}, g) = 1  \end{cases}

программно это можно реализовать, например, так:
C++
1
2
3
int lcm(int a, int b) {
   return (a / gcd(a, b)) * b;
}
стоит заметить, что такая последовательность операций предпочтительна, потому как позволяет избежать переполнения.

P.S. что касается вашего последнего вопроса. цель в том, чтобы люди хотя бы в "a+b" не писали говно всякое.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
16.08.2013, 15:02     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #28
Цитата Сообщение от salam Посмотреть сообщение
что касается разговоров по сути дела... мне показалось, что нужно намекнуть и вам, и людям, которые, возможно, захотят использовать ваш код, что в нем есть фрагмент, содержащий очень непрактичную и вычислительно сложную реализацию простого алгоритма. я имел ввиду вычисление НОК двух целых чисел. вы изволили находить его перебором чисел на полуинтервале [1; +∞). в то время как можно искать его быстрее.
Это простой учебный пример, написанный мной спустя 3-4 недели после начала изучения С++. Переписывать этот пример ради ТС-а желания у меня нет совсем Как было, так и выложил.
Цитата Сообщение от salam Посмотреть сообщение
P.S. что касается вашего последнего вопроса. цель в том, чтобы люди хотя бы в "a+b" не писали говно всякое.
Это правильно, но не везде уместно. И критика всегда должна быть конструктивной, а не просто "говнокод"
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 467
Завершенные тесты: 1
16.08.2013, 17:31     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #29
Bekbolat, Ну создай проект - консольное приложение Win32.Напиши его название и нажми кнопку Ок.Дальше нажми далее,и потом поставь галочку - Пустой проект.Затем создай .cpp файл и вставь мой код + метод BigLow.И все)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 17:39     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел»)
Еще ссылки по теме:

Структура Правильная рациональная дробь C++
Разработать класс SortedArrayOfInt – упорядоченный массив целых чисел C++
Разработать класс SqArrayOfInt – двумерный массив целых чисел C++

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

Или воспользуйтесь поиском по форуму:
Atlant_V
8 / 8 / 1
Регистрация: 14.08.2013
Сообщений: 99
16.08.2013, 17:39     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел») #30
Я делал похожую задачу, только там нет нужных функций. Зато написана функция NSD того, чтоб найти наименьший делитель и потом в функции void Skor() можно было сократить дроб.
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
#include <iostream>
 
using namespace std;
 
class Drib
{
private :
    int chus;
    int znam;
    int NSD (int a, int b)
    {
        while(a!=b){
            if(a>b)a-=b;
            else b-=a;
        }
        return a;
    }
public:
    Drib (){
        chus=0;
        znam=1;
    }
    Drib(int chus1,int znam1){
        chus=chus1;
        znam=znam1;
    }
    Drib add(Drib a){
        Drib res(0,1);
        res.znam=znam*a.znam;
        res.chus=znam*a.chus +chus*a.znam;
        res.chus=znam*chus;
        
    
    
        return res;
    }
    void Skor()
    {
        int temp=NSD(chus,znam);
        chus/=temp;
        znam/=temp;
    }
    void printDrib()
    {
        Skor();
        cout<<chus<<'/'<<znam<<endl;
    }
 
};
 
int main()
{
    Drib b(1,2);
    Drib c(3,4);
    b.printDrib();
    c.printDrib();
    Drib sum=b.add(c);
    sum.printDrib();
    system("pause");
    return 0;
}
Yandex
Объявления
16.08.2013, 17:39     Разработать класс (Объект «рациональная дробь, представлен парой целых чисел»)
Ответ Создать тему
Опции темы

Текущее время: 03:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru