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

Определить класс для рациональных чисел - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ не проходит инцилизация вектора http://www.cyberforum.ru/cpp-beginners/thread664480.html
#include <iostream> #include <vector> #include <ctime> // function RandomInitializationVector void PrintElementVector(std::vector <int> vector); void RandomInitializationVector(std::vector <int> vector, int size); int main() { std::cout << "Test Vector" << std::endl << std::endl;
C++ Программа, которая помогает найти число х между 0 и 1000 Программа, которая помогает найти число х между 0 и 1000. Это число х выбирается программой. Использовать функцию rand. Когда вводишь число, программа должна сказать "слишком большое" или "слишком маленькое", либо "угадал"! И еше она должна подсчитивать число попыток. помогите написать! Ниче не получается http://www.cyberforum.ru/cpp-beginners/thread664468.html
Вектор C++
Заполните вектор случайными числами. Напишите вывод на экран. Отсортируйте вектор. Напишите функцию, которая удалит из вектора все простые числа. Напишите функцию, которая копирует все простые числа из одного вектора в другой. как это можно реализовать?
Вычислить значение функции C++
Ребят помогите написать код двух задач. Задача 1 Роздилите абитуриентов, что выдержали конкурс, между двумя группами с ближайшим количественным составом. Задача 2 Заданно значение функции sin(a). Вычислить главное значение аргумента этой функции в градусах. Добавлено через 15 часов 42 минуты Ну что ребят ктонибудь знает как написать код к этим задачам???
C++ Как правильно обьявить геометрические точки? http://www.cyberforum.ru/cpp-beginners/thread664418.html
Здраствуйте! Задача стоит такая : Добавить геометрическую точку с указанными координатами. (х у) Отсортировать геометрические точки в сторону увеличения расстояния от начала координат. Теперь основной вопрос : как правильно обьявить точку, для последующей сортировки ( по гипотенузе ), а также обращения к етой точке. Дополнительный, необязательный вопрос : для дальнейшего удаления етой точки...
C++ Усечение числа с плавающей точкой Доброго времени суток! Собсно сабж. floor(v*1000)/1000 не помогает, обнуляется только несколько знаков после запятой, а остальные остаются. А как обнулить все, кроме первых пяти знаков? подробнее

Показать сообщение отдельно
igorrr37
 Аватар для igorrr37
1594 / 1222 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
06.10.2012, 14:01     Определить класс для рациональных чисел
Rational.h
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
#ifndef RATIONAL_H
#define RATIONAL_H
 
#include <iostream>
 
class Rational
{
public:
    explicit Rational(int num_ = 0, int den_ = 1) : num(num_), den(den_)
    {
        Make();
    }
    void Make ();
    friend std::ostream& operator << (std::ostream& , Rational const&);
    friend std::istream& operator>> (std::istream& , Rational&);
    friend Rational const operator+ (Rational const&, Rational const&);
    friend Rational const operator- (Rational const&, Rational const&);
    friend Rational const operator* (Rational const&, Rational const&);
    friend Rational const operator/ (Rational const&, Rational const&);
    friend bool operator< (Rational const&, Rational const&);
    friend bool operator== (Rational const&, Rational const&);
    friend bool operator> (Rational const&, Rational const&);
    friend bool operator<= (Rational const&, Rational const&);
    friend bool operator>= (Rational const&, Rational const&);
private:
    int num, den;
};
 
#endif // RATIONAL_H
Rational.cpp
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
#include <iostream>
#include <stdexcept>
#include <cmath>
#include <string>
#include <sstream>
#include "Rational.h"
 
void Rational::Make()
{
    if(!den)
        throw std::invalid_argument("denominator should not be zero");
    if(((num >> (sizeof(num) * 8 - 1)) ^ (den >> (sizeof(den) * 8 - 1))) & 1)
        num = -std::abs(num);
    else
        num = std::abs(num);
    den = std::abs(den);
}
 
std::ostream& operator <<(std::ostream& ost, Rational const& r)
{
    return ost << r.num << '/' << r.den;
}
 
std::istream& operator>>(std::istream& ist, Rational& r) // e.g. (5, -2)
{
    std::string s;
    std::getline(ist, s, ')');
    std::string::size_type ind;
    while((ind = s.find_first_of("(,)")) != std::string::npos)
        s.replace(ind, 1, 1, ' ');
    std::istringstream iss(s);
    iss >> r.num >> r.den;
    r.Make();
    return ist;
}
 
Rational const operator+ (Rational const& lhs, Rational const& rhs)
{
    return Rational(lhs.num * rhs.den + rhs.num * lhs.den, lhs.den * rhs.den);
}
 
Rational const operator- (Rational const& lhs, Rational const& rhs)
{
    return lhs + Rational(-rhs.num, rhs.den);
}
 
Rational const operator* (Rational const& lhs, Rational const& rhs)
{
    return Rational(lhs.num * rhs.num, lhs.den * rhs.den);
}
 
Rational const operator/ (Rational const& lhs, Rational const& rhs)
{
    return lhs * Rational(rhs.den, rhs.num);
}
 
bool operator< (Rational const& lhs, Rational const& rhs)
{
    return double(lhs.num) / lhs.den < double(rhs.num) / rhs.den;
}
 
bool operator== (Rational const& lhs, Rational const& rhs)
{
    return !(lhs < rhs || rhs < lhs);
}
 
bool operator> (Rational const& lhs, Rational const& rhs)
{
    return rhs < lhs;
}
 
bool operator<= (Rational const& lhs, Rational const& rhs)
{
    return !(rhs < lhs);
}
 
bool operator>= (Rational const& lhs, Rational const& rhs)
{
    return !(lhs < rhs);
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include "Rational.h"
 
int main()
{
    using namespace std;
    Rational test1, test2, test3(2, 6);
    std::cin >> test1 >> test2 >> test3;
    cout << "\nTest1 equals " << test1;
    cout << "\nTest2 equals " << test2;
    cout << "\nTest3 equals " << test3;
    // Test our operators
    cout << "\nTest1 * Test2 equals " << test1*test2;
    cout << "\nTest1 / Test3 equals " << test1/test3;
    cout << "\nTest2 + Test3 equals " << test2+test3;
    cout << "\nTest3 - Test1 equals " << test3-test1;
    if (test1 == test2)
    cout << "\nTest1 is equal to Test2";
    if (test1 < test2)
    cout << "\nTest1 is less than Test2";
    return 0;
}
 
Текущее время: 01:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru