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

Как написать класс «несократимая дробь» (т.е. дроби 2/4, 4/8 и т.п. есть дробь 1/2)? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Посчитать выражение формулой Горнера, вопрос- как? http://www.cyberforum.ru/cpp-beginners/thread227470.html
Не представляю, как реализовать. С математикой проблемно из-за незаточенности(читать как - тупости) мышления в данном направлении(бывший гуманитарий) По заданным вещественным числам а(0),...
C++ сортирует не совсем правильно программа сортирует 3 массива сортировкой Шелла и пузырьком, считает время. ток ошибка есть, не могу найти. сортировка Шелла сортирует но в первый и последний элемент записывает не понятное число.... http://www.cyberforum.ru/cpp-beginners/thread227467.html
C++ Закрывается раньше времени
Задача: Дана действительная матрица размером n × m, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать...
C++ функции.двумерный массив
помогите плиз) буду оч признательна) создать двумерный массив и меняя местами строки матрицы, отсортировать по возрастанию ее первый столбец Добавлено через 18 минут пишу в с++ через Visual...
C++ Дано натуральное число,заменить в нем все <единицы> на <пятерки>. Вводимые числа в промежутке [10;9999] http://www.cyberforum.ru/cpp-beginners/thread227432.html
Дано натуральное число,заменить в нем все <единицы> на <пятерки>. Вводимые числа в промежутке Добавлено через 15 минут помогите плиз написать прогу(((
C++ Ошибка Объясните почему если записать так то работает все ок #include <iostream.h> using namespace std; int main() { int n, i, j; int a ; srand(time(0)); cout << "n= "; cin >> n; подробнее

Показать сообщение отдельно
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
12.01.2011, 01:33
Цитата Сообщение от sandye51 Посмотреть сообщение
volovzi, этот класс я писал еще в сентябре месяце
А сейчас ты бы лучше написал?

как привычка, правило хорошего тона
С классами — да, с базовыми типами — нет. Выигрыша нет, а код избыточен.

не круто выипаться, когда сам ничего своего не предоставил на критику
Не вопрос, дружище.
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
#include "xtl_math.h"
 
class fraction {
public:
    fraction () : m_numerator(0), m_denominator(1) {}
    fraction (int m_numerator, int m_denominator) : m_numerator(m_numerator), m_denominator(m_denominator) { fix(); }
    
    // ---- Арифметика ----------------------------------------------------------------------------
    
    fraction operator + (const fraction & f) const { return fraction(m_numerator * f.m_denominator + m_denominator * f.m_numerator, m_denominator * f.m_denominator); }
    fraction operator - (const fraction & f) const { return fraction(m_numerator * f.m_denominator - m_denominator * f.m_numerator, m_denominator * f.m_denominator); }
    fraction operator * (const fraction & f) const { return fraction(m_numerator * f.m_numerator, m_denominator * f.m_denominator); }
    fraction operator / (const fraction & f) const { return fraction(m_numerator * f.m_denominator, m_denominator * f.m_numerator); }
    
    fraction operator += (const fraction & f) { return *this = *this + f; }
    fraction operator -= (const fraction & f) { return *this = *this - f; }
    fraction operator *= (const fraction & f) { return *this = *this * f; }
    fraction operator /= (const fraction & f) { return *this = *this / f; }
    
    fraction operator + (int number) const { return *this + fraction(number, 1); }
    fraction operator - (int number) const { return *this - fraction(number, 1); }
    fraction operator * (int number) const { return *this * fraction(number, 1); }
    fraction operator / (int number) const { return *this / fraction(number, 1); }
    
    fraction operator += (int number) { return *this = *this + number; }
    fraction operator -= (int number) { return *this = *this - number; }
    fraction operator *= (int number) { return *this = *this * number; }
    fraction operator /= (int number) { return *this = *this / number; }
    
    friend fraction operator + (int number, const fraction & f) { return fraction(number, 1) + f; }
    friend fraction operator - (int number, const fraction & f) { return fraction(number, 1) - f; }
    friend fraction operator * (int number, const fraction & f) { return fraction(number, 1) * f; }
    friend fraction operator / (int number, const fraction & f) { return fraction(number, 1) / f; }
    
    fraction operator - () { return fraction(-m_numerator, m_denominator); }
    fraction operator + () { return fraction(*this); }
    
    // ---- Сравнение -----------------------------------------------------------------------------
    
    bool operator < (const fraction & f) const { return m_numerator * f.m_denominator < f.m_numerator * m_denominator; }
    bool operator > (const fraction & f) const { return m_numerator * f.m_denominator > f.m_numerator * m_denominator; }
    
    bool operator == (const fraction & f) const { return m_numerator == f.m_numerator && m_denominator == f.m_denominator; }
    bool operator != (const fraction & f) const { return m_numerator != f.m_numerator || m_denominator != f.m_denominator; }
    
    // ---- Преобразования ------------------------------------------------------------------------
    
    double double_value () const { return static_cast<double>(m_numerator) / m_denominator; }
    
    // ---- Ввод-вывод ----------------------------------------------------------------------------
    
    friend std::ostream & operator << (std::ostream & stream, const fraction & f) {
        if (f.m_numerator == 0 && f.m_denominator == 0) stream << "nan";
        else if (f.m_denominator == 0 && f.m_numerator > 0) stream << "inf";
        else if (f.m_denominator == 0 && f.m_numerator < 0) stream << "-inf";
        else if (f.m_numerator == 0) stream << "0";
        else if (f.m_denominator == 1) stream << f.m_numerator;
        else stream << f.m_numerator << "/" << f.m_denominator;
        
        return stream;
    }
    
private:
    // ---- Служебные функции ---------------------------------------------------------------------
    
    void fix () {
        simplify();
        fix_sign();
    }
 
    void simplify () {
        int gcd = xtd::gcd(m_numerator, m_denominator);
        
        if (gcd != 0) {
            m_numerator /= gcd;
            m_denominator /= gcd;
        }
    }
    
    void fix_sign () {
        if (m_denominator < 0) {
            m_numerator *= -1;
            m_denominator *= -1;
        }
    }
 
protected:
    int m_numerator;
    int m_denominator;
};
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru