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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Bekbolat
0 / 0 / 0
Регистрация: 16.08.2013
Сообщений: 22
#1

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

16.08.2013, 10:24. Просмотров 2140. Ответов 29
Метки нет (Все метки)

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

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

Класс Рациональная дробь - C++
Есть код, который выполняет операции между дробями (рациональное число, является отношением двух целых чисел). Никак не получается...

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

Ввести класс для работы с объектом "рациональная дробь" - C++
Ввести класс для работы с объектом "рациональная дробь".Реализовать: а)сложение(вычитание) двух дробей; б)приведение дроби к...

Класс для работы с объектом "рациональная дробь" - C++
Надо ввести класс для работы с объектом "рац.дробь" и реализовать 1)умножение(деление) двух дробей 2)сравнение двух дробей.Сравнение двух...

Класс "Рациональная дробь" - C++
Реализовать класс Rational, используя два массива из 100 элементов типа unsigned char для представления числителя и знаменателя. Каждый...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Bekbolat
0 / 0 / 0
Регистрация: 16.08.2013
Сообщений: 22
16.08.2013, 12:29  [ТС] #16
Spasibo!
0
salam
163 / 144 / 12
Регистрация: 10.07.2012
Сообщений: 728
16.08.2013, 13:06 #17
Цитата Сообщение от Мимино Посмотреть сообщение
int Rational::nokR(int x, int y)
{
* * for (int i = 1; i > 0; i++)
* * * * if (i % x == 0 && i % y == 0)
* * * * * * return i;
* * return 1;
}
вот тут явно без проблем не обошлось...
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
16.08.2013, 13:42 #18
Цитата Сообщение от salam Посмотреть сообщение
вот тут явно без проблем не обошлось...
Нет. там все считает нормально.
Вот тут вроде со знаками какая то лажа
C++
1
2
3
4
5
6
7
8
9
10
11
 else
        if (ch < 0 && zn < 0)
        {
            numer = (ch / nod) * -1;
            denom = (zn / nod) * -1;
        }
        else
        {
            numer = ch / nod;
            denom = zn / nod;
        }
0
Bekbolat
0 / 0 / 0
Регистрация: 16.08.2013
Сообщений: 22
16.08.2013, 13:44  [ТС] #19
Составить описание класса. Определить конструктор по умолчанию, конструктор с параметрами и методы класса. Написать программу, демонстрирующую работу с классом для работы с векторами в трехмерном евклидовом пространстве, которые задаются своими координатами – действительными числами x, y и z. Реализовать методы класса: ввод вектора; вывод вектора; умножение вектора на число; деление вектора на число; определение длины вектора.

Добавлено через 29 секунд
помогите пожалуйста! очень надо
0
salam
163 / 144 / 12
Регистрация: 10.07.2012
Сообщений: 728
16.08.2013, 13:59 #20
Цитата Сообщение от Мимино Посмотреть сообщение
Нет. там все считает нормально.
Вот тут вроде со знаками какая то лажа
C++
1
2
3
4
5
6
7
8
9
10
11
 else
        if (ch < 0 && zn < 0)
        {
            numer = (ch / nod) * -1;
            denom = (zn / nod) * -1;
        }
        else
        {
            numer = ch / nod;
            denom = zn / nod;
        }
Я имел ввиду, что это тоже говнокод.
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
16.08.2013, 13:59 #21
Цитата Сообщение от Мимино Посмотреть сообщение
for (int i = 1; i > 0; i++)
условие продолжения цикла всегда true
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
16.08.2013, 14:10 #22
Цитата Сообщение от BigLow Посмотреть сообщение
условие продолжения цикла всегда true
Да, но оно в любом случае будет выполнено (максимум x * y итераций). Тупой поиск общего кратного перебором.

Добавлено через 7 минут
Цитата Сообщение от salam Посмотреть сообщение
Я имел ввиду, что это тоже говнокод.
Всегда приятно пообщаться с умными людьми Я смотрю, у Вас везде "говнокод". И при этом во всех Ваших 362 сообщениях ни одной строки "своего" кода, а только попытка унижения собеседников путем высказываний о их "необразованности". Интересно, это вообще с какой целью?
0
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
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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;
}
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); приведение дроби к несократимому виду.
0
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
16.08.2013, 14:51 #26
Цитата Сообщение от Bekbolat Посмотреть сообщение
vot na etu
Вот иди туда: http://www.cyberforum.ru/order-program/
1
salam
163 / 144 / 12
Регистрация: 10.07.2012
Сообщений: 728
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" не писали говно всякое.
1
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
16.08.2013, 15:02 #28
Цитата Сообщение от salam Посмотреть сообщение
что касается разговоров по сути дела... мне показалось, что нужно намекнуть и вам, и людям, которые, возможно, захотят использовать ваш код, что в нем есть фрагмент, содержащий очень непрактичную и вычислительно сложную реализацию простого алгоритма. я имел ввиду вычисление НОК двух целых чисел. вы изволили находить его перебором чисел на полуинтервале [1; +∞). в то время как можно искать его быстрее.
Это простой учебный пример, написанный мной спустя 3-4 недели после начала изучения С++. Переписывать этот пример ради ТС-а желания у меня нет совсем Как было, так и выложил.
Цитата Сообщение от salam Посмотреть сообщение
P.S. что касается вашего последнего вопроса. цель в том, чтобы люди хотя бы в "a+b" не писали говно всякое.
Это правильно, но не везде уместно. И критика всегда должна быть конструктивной, а не просто "говнокод"
0
Bretbas
198 / 57 / 8
Регистрация: 05.08.2013
Сообщений: 869
Завершенные тесты: 1
16.08.2013, 17:31 #29
Bekbolat, Ну создай проект - консольное приложение Win32.Напиши его название и нажми кнопку Ок.Дальше нажми далее,и потом поставь галочку - Пустой проект.Затем создай .cpp файл и вставь мой код + метод BigLow.И все)
0
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2013, 17:39
Привет! Вот еще темы с ответами:

Рациональная дробь - C++
Здравствуйте! знающие люди, помогите решить задачу:gsorry: Составить описание класса. Определить конструктор по умолчанию, конструктор с...

Разработать класс SqArrayOfInt – двумерный массив целых чисел - C++
Разработать класс SqArrayOfInt – двумерный массив целых чисел. Физически данный массив должен состоять из вектора массивов типа ArrayOfInt....

Разработать класс SortedArrayOfInt – упорядоченный массив целых чисел - C++
Разработать класс SortedArrayOfInt – упорядоченный массив целых чисел, наследованный от класса ArrayOfInt. Замечание: сортировку массива...

Разработать класс, моделирующий массив целых чисел и его обработку - C++
Привет. хотелось бы обратиться к тем, кто хорошо разбирается в программировании. у меня вызвала огромные затруднения тема связанная с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.08.2013, 17:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru