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

Дробь - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ простое число в заданном диапазоне http://www.cyberforum.ru/cpp-beginners/thread389743.html
необходимо найти наименьшее простое число в заданном диапазоне
C++ Посоветуйте литературу для олимпиадного программирования C++ Буду вам очень благодарен. Пока читаю только Окулова про алгоритмы в общем. http://www.cyberforum.ru/cpp-beginners/thread389733.html
C++ Перевод числа из 8-й системы счисления в 2-ю без перевода в 10-ю
нужно написать две программы в с++ 1) Написать программу, которая переводит число из 8-й сис*те*мы счисления в 2-ю, не переводя все число в 10-ю. Выполнить от*лад*ку прог*раммы с помощью какого–либо примера, подготовлен*ного Вами на бумаге. 2)Открыть файл, имя которого задается с клавиатуры. Найти сумму чисел, содержащихся в файле. Буду очень благодарен за помощь!
Эмуляция работы процессора C++
Предисловие : Здравствуйте, дорогие "форумчани". Сразу перейду к делу. Недавно получил комплект лабораторных работ с заданием. Методички у нас просто супер : написано задание и ни одного примера. Значит задание звучит так... Задание: Разработать эмулятор процессора, создать для него язык ассемблера и написать демонстрационную программу. Из чтения методички я понял то, что процессор...
C++ задачка http://www.cyberforum.ru/cpp-beginners/thread389706.html
Помогите пожалуйста Нужна прога: Есть массив X(n). Упорядочить его элементы в порядке возрастания, все элементы больше нуля увеличить в 3 раза, а меньше- в (-2) раза.
C++ Считать количество цифр в числе Нужно написать програмку, которая из двух чисел выбрала бы то, в котором больше цифр (написать прогу, которая считала бы количество цифр в числе) подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.11.2011, 08:53     Дробь
Нужен шаблон класса "дробь" с именем TFraction, подобный обыкновенной дроби в том, что данная TFraction должен иметь числитель и знаменатель, но обе эти его части могут быть любых встроенных числовых типов, включая действительные, а не только целыми (то есть допускается специализация на float для хранения дробей вроде http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{25.4f}{0.01f}). Требуется поддерживать операции: +, -, *, /, +=, -=, *=, /= без приведения объектов к встроенным числам и с максимальным сохранением точности, причём, операции *= и /= должны поддерживать и правые операнды встроенных числовых типов, а операции * и / - как правые, так и левые операнды встроенных числовых типов, но один операнд обязательно должен быть экземпляром TFraction, а в операциях +, -, += и -= оба операнда должны быть экземплярами TFraction. Требуется также поддерживать приведение TFraction ко встроенным числовым типам. У меня не получается придумать иные реализации арифметических операторов, кроме:
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
TFraction TFraction::operator *(TFraction &x)
{
 TFraction Result;
 Result.Numerator  =Numerator    *x.Numerator;
 Result.Denominator=Denominator*x.Denominator;
 return Result;
}
TFraction TFraction::operator /(TFraction &x)
{
 TFraction Result;
 Result.Numerator  =Numerator    *x.Denominator;
 Result.Denominator=Denominator*x.Numerator;
 return Result;
}
TFraction::operator *=(TFraction &x)
{
 Numerator   *=x.Numerator;
 Denominator*=x.Denominator;
 return *this;
}
TFraction TFraction::operator /=(TFraction &x)
{
 Numerator   *=x.Denominator;
 Denominator*=x.Numerator;
 return *this;
}
TFraction::operator *(double &x)
{
 TFraction Result;
 Result.Numerator  =Numerator    *x;
 Result.Denominator=Denominator;
 return Result;
}
TFraction TFraction::operator /(double &x)
{
 TFraction Result;
 Result.Numerator  =Numerator
 Result.Denominator=Denominator*x;
 return Result;
}
TFraction TFraction::operator *=(double &x)
{
 Numerator*=x;
 return *this;
}
TFraction TFraction::operator /=(double &x)
{
 Denominator*=x;
 return *this;
}
TFraction TFraction::operator +(TFraction &x)
{
 TFraction Result;
 Result.Numerator  =Numerator*x.Denominator+xNumerator*Denominator;
 Result.Denominator=Denominator*x.Denominator;
 return Result;
}
TFraction TFraction::operator -(TFraction &x)
{
 TFraction Result;
 Result.Numerator  =Numerator*x.Denominator-xNumerator*Denominator;
 Result.Denominator=Denominator*x.Denominator;
 return Result;
}
TFraction TFraction::operator +=(TFraction &x)
{
 TFraction Buffer;
 Buffer.Numerator  =Numerator*x.Denominator+xNumerator*Denominator;
 Buffer.Denominator=Denominator*x.Denominator;
 *this=Buffer;
 return *this;
}
TFraction TFraction::operator -=(TFraction &x)
{
 TFraction Buffer;
 Buffer.Numerator  =Numerator*x.Denominator-xNumerator*Denominator;
 Buffer.Denominator=Denominator*x.Denominator;
 *this=Buffer;
 return *this;
}
TFraction::operator double ()
{
 return Numerator/Denominator;
}
friend TFraction operator *(double &x, TFraction &y)
{
 TFraction Result;
 Result.Numerator  =x*y.Numerator;
 Result.Denominator=  y.Denominator;
 return Result;
}
TFraction TFraction::operator /(double &x)
{
 TFraction Result;
 Result.Numerator  =  y.Numerator;
 Result.Denominator=x*y.Denominator;
 return Result;
}
и перегрузки тех операторов, которые с double путём замены double на другие числовые типы. Но я сомневаюсь в оптимальности данного исходника в плане точности и чего то не соображу, как избавиться от временных объектов в операторах с =. С такой оптимизацией у меня проблемы не меньшие, чем у новичков. Поможите?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru