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

Олимпиадное задание "Калькулятор рациональных дробей"

16.12.2010, 07:00. Показов 1833. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Калькулятор рациональных дробей (выполнение операций сложения, вычитания, умножения, деления).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2010, 07:00
Ответы с готовыми решениями:

Калькулятор рациональных дробей
Первая программа принимает от пользователя три строки, (первая и третья строки – это правильные...

Усовершенствованный калькулятор рациональных дробей
Добавил операторы сравнения и равно, всё скомпилировалось, ровно работает, при добавлении <=,>=,!=...

Класс рациональных дробей
Класс дробь состоит из 2 целых полей, числителя и знаменателя. Реализовать методы выделения дробной...

Матрица рациональных дробей
П.5.4.Правил Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и...

2
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.12.2010, 07:24 2
На форуме полно. Юзайте поиск.
0
C/C++
93 / 93 / 18
Регистрация: 01.07.2010
Сообщений: 281
16.12.2010, 08:57 3
Лучший ответ Сообщение было отмечено konstantinx2525 как решение

Решение

Вот держи класс, смотри методы в описании, для действий - перегрузил операторы. При присвоении переменным типа float автоматически преобразуются. Используй как сказано в задании.
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <cstdlib>
 
class Fraction
{
private:
    int num, den;
public:
    Fraction();
    Fraction(int);
    Fraction(int,int);
    Fraction(const Fraction&);
    int getNum();
    int getDen();
    void setNum(int);
    void setDen(int);
    friend Fraction reduce(Fraction);
    void reduceit();
    friend std::ostream& operator<<(std::ostream&, Fraction);
    friend Fraction operator+(Fraction,Fraction);
    friend Fraction operator-(Fraction,Fraction);
    friend Fraction operator*(Fraction,Fraction);
    friend Fraction operator/(Fraction,Fraction);
    friend std::istream& operator>>(std::istream&, Fraction&);
    operator float();
};
 
Fraction::Fraction()
{
    num=0; den=1;
}
 
Fraction::Fraction(int n)
{
    num=n; den=1;
}
 
Fraction::Fraction(int n, int d)
{
    setNum(n); setDen(d);
}
 
Fraction::Fraction(const Fraction& it)
{
    *this=it;
}
 
int Fraction::getNum()
{
    return num;
}
 
int Fraction::getDen()
{
    return den;
}
 
void Fraction::setNum(int n)
{
    num=n;
}
 
void Fraction::setDen(int d)
{
    if (d<0)
    {
        num*=-1;
        d*=-1;
    }
    den=(d!=0 ? d : 1);
}
 
int NOD(int m, int n)
{
    if (m==0) return n;
    if (n==0) return m;
    if (m%2==0 && n%2==0)
        return 2*NOD(m/2,n/2);
    if (m%2==0 && n%2!=0)
        return NOD(m/2,n);
    if (m%2!=0 && n%2==0)
        return NOD(m,n/2);
    if (m%2!=0 && n%2!=0)
        return NOD(n,abs(m-n));
    return -1;
}
 
Fraction reduce(Fraction fr)
{
    int del=NOD(fr.num,fr.den);
    return Fraction(fr.num/del,fr.den/del);
}
 
void Fraction::reduceit()
{
    *this=reduce(*this);
}
 
std::ostream& operator<<(std::ostream& stream, Fraction fract)
{
    if (fract.den!=1)
        stream<<'('<<fract.num<<'/'<<fract.den<<')';
    else
        stream<<fract.num;
    return stream;
}
 
Fraction operator+(Fraction arg1, Fraction arg2)
{
    return reduce(Fraction(arg1.num*arg2.den+arg2.num*arg1.den,
        arg1.den*arg2.den));
}
 
Fraction operator-(Fraction arg1, Fraction arg2)
{
    return arg1+Fraction(-arg2.num,arg2.den);
}
 
Fraction operator*(Fraction arg1, Fraction arg2)
{
    return reduce(Fraction(arg1.num*arg2.num,arg1.den*arg2.den));
}
 
Fraction operator/(Fraction arg1, Fraction arg2)
{
    return arg1*Fraction(arg2.den,arg2.num);
}
 
std::istream& operator>>(std::istream& stream, Fraction& fract)
{
    int n,d;
    stream>>n;
    stream.get();
    stream>>d;
    fract=Fraction(n,d);
    return stream;
}
 
Fraction::operator float()
{
    return float(num)/den;
}
0
16.12.2010, 08:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2010, 08:57
Помогаю со студенческими работами здесь

Класс рациональных дробей
Написать пользоват. тип рациональных дробей. Внутреннее представление типа: int a, b; должно быть...

Класс рациональных дробей RatNum
Класс RatNum имитирует работу с обычными дробями. Полями этого класса должны быть два поля типа...

Разработать класс рациональных дробей
азработать класс рациональных дробей. Предусмотреть в нём все методы, которые необходимы, чтобы...

Метод вычитания рациональных дробей
помогите с функцией void sub(RationalFraction) вычитание из дроби другую дроби, рез сохраняется в...

Создать класс ДРОБЕЙ рациональных чисел
Создать класс ДРОБЕЙ рациональных чисел, является отношением двух целых чисел. Перезагрузить ...

Преобразование к типу double (класс рациональных дробей)
Имеется класс рациональных дробей (чтоб код лишним не нагружать оставил только перегрузки операций...

Олимпиадное задание
В школе Виталия Петровича есть многолетняя традиция. На одной из стен выпускники оставляют памятную...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru