IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> class дроби, Си++
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


В общем нужно сделать класс дроби и соответственно операции для них (+,-,*,/) а потом написать прогу которая бы вычисляла выражения в инфиксной форме с этими дробями(выражение читается из файла). Я реализовал вот так
class Fraction {
int Numerator;
int Denominator;
int Integer;

public:
//Fraction(char *s); // "2.3/2"
Fraction(const int i, const int d, const int n );
Fraction() {Numerator = 0; Denominator = 0; Integer = 0; }
int SetFraction(const int n, const int d, const int i) {
Numerator = n;
Denominator = d;
Integer = i;
return 0;
}
int GetFraction(int &n, int &d, int &i){
n = Numerator;
d = Denominator;
i = Integer;
return 0;
}

friend int SumFraction(Fraction &f1,Fraction &f2);
friend int SubFraction(Fraction &f1,Fraction &f2);
friend int MulFraction(Fraction &f1,Fraction &f2);
friend int DivFraction(Fraction &f1,Fraction &f2);
friend char* ShowFraction();
///? int ShowFraction();
};
Также мне нужно отслеживать переполнение при выполнении операций над дробями.Как это сделать?Я знаю токо 1 способ если допустим при сложении складываем 2 больших числа то получится отрицательное ну и т.д....................Есть ли еще какие-нибудь способы?

И еще как лучше сделать операции так как есть сейчал?или перегрузить операторы +,-,*.......?сейчас результат помещается в f1.

Сообщение отредактировано: blackhard -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Также мне нужно отслеживать переполнение при выполнении операций над дробями.Как это сделать?
У С++ проблема с отслеживанием переполнений (чтобы можно было использовать механизм исключений, например). "Обходной путь" показан здесь:
Implemented integer overflow class
Цитата
И еще как лучше сделать операции так как есть сейчал?или перегрузить операторы +,-,*.......?
Перегрузка операторов всегда предпочтительнее, поскольку ясно видно, что именно программа делает, и выражение любой сложности пишется в одну строку. Попробуй, например, со своими функциями, записать:
Fraction t, a, b, c; // <--- занесешь значения в переменные
...
t = a + 2*b - 3*c / a; // <--- вот это
. А между тем с перегруженными операциями это читается очень просто... И приоритеты операций сохраняются...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


Хочу перегрузить для вывода дроби на экран операцию << и не выходит wacko.gif Непонятно следующее:
что туда передавать и что возвращать и что делать внутри?
Я пробовал примено так

...........................
bool operator<<(fraction &f)
{
cout << f.GetNumerator;//ну и тд
}//не работает(те даже не компилируется)!
//иеще несколько неудачных попыток
...........................


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






class Fraction {
friend ostream& operator << (ostream&, Fraction&);
...
}

ostream& operator << (ostream& os, Fraction& f) {
os << f.GetNumerator(); // <--- это же метод у тебя? Скобки тогда надо...

// и все остальное, что тебе там еще надо вывести...

return os; // это для того, чтобы можно было делать "цепочки вызовов"
}


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


Цитата(volvo @ 23.10.2008 16:57) *

class Fraction {
friend ostream& operator << (ostream&, Fraction&);
...
}

ostream& operator << (ostream& os, Fraction& f) {
os << f.GetNumerator(); // <--- это же метод у тебя? Скобки тогда надо...

// и все остальное, что тебе там еще надо вывести...

return os; // это для того, чтобы можно было делать "цепочки вызовов"
}


ostream& operator << (ostream& os, Fraction& f)
вот то что мне было нужно! спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.10.2021 1:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name