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

Создать файл для определения класса рациональных чисел с перегрузкой операторов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Если в матрице есть нули, то заменить их суммой max и min последнего столбца. Использовать функции http://www.cyberforum.ru/cpp-beginners/thread1124282.html
Дана матрица порядка n. Найти в последнем столбце max и min. Если в матрице есть нули, то заменить их суммой max и min последнего столбца.
C++ Определить время выполнения потоков Здравствуйте. У меня программно задаются N потоков, которые производят вычисления. В конце необходимо вывести время работы каждого потока. Пользуюсь следующим кодом: for(cur2=inf.begin();cur2!=inf.end();cur2++){ cout<<"Поток, имеющий id="<<cur2->first<<" решил "<<cur2->second<<" задач и затратил "; FILETIME ftKernelTimeEnd,ftUserTimeEnd,ftDummy; _int64 qwKernelTimeElapsed,... http://www.cyberforum.ru/cpp-beginners/thread1124275.html
C++/CLI WinForms Дополнение к калькулятору - бесконечное число аргументов
Собственно написал калькулятор(простой) , единственное что нужно реализовать - это бесконечное число аргументов. Как это сделать? Что дописать? Что изменить? #pragma once namespace jonjohnson { using namespace System; using namespace System::ComponentModel; using namespace System::Collections;
C++ #define sqr(a) (a)*(a) - зачем так много скобок?
#define sqr(a) ((a)*(a)) такие вопросы: 1) Зачем ((a)*(a)) так много скобок? (если можно,объяснить доступным языком) 2) почему, если их убрать - то будет неправильно? 3) как работает этот #define ?
C++ Определить, принадлежит ли точка кольцу, определяемому окружностями http://www.cyberforum.ru/cpp-beginners/thread1124262.html
Вот сама задача: Определить, принадлежит ли точка А(а1, а2) кольцу, определяемому окружностями: x2 + y2 = 1 и x2 + y2 = 16. С чего можно было начать?
C++ Посоветуйте хороший компилятор Посоветуйте хороший компилятор для С,который был бы просто в применении,так как я только начинаю программировать. подробнее

Показать сообщение отдельно
Skedaddler
1 / 1 / 1
Регистрация: 24.02.2014
Сообщений: 13
04.04.2014, 20:56  [ТС]     Создать файл для определения класса рациональных чисел с перегрузкой операторов
Более менее разобрался, вот код (может, кому понадобится)
Кликните здесь для просмотра всего текста

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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// Ratio.cpp : Класс рациональных чисел со своими методами и перегрузкой операторов.
// 2014 год.
 
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
 
using namespace std;
class Ratio
{   
    int num; // Числитель (numerator)
    int den; // Знаменатель (denominator)
    
    /* Методы класса */
    int gcd (); // Находит наибольший общий делитель
    
    
public:
    Ratio() {den = 1; num = 0;}
    explicit Ratio (int n, int d) : num(n), den(d) {} // Конструктор с параметрами 
    Ratio (const Ratio &src) : num(src.num), den(src.den) {} // Конструктор копирования
 
    /* Перегрузка операторов */
    Ratio operator* (const Ratio&x) const; // Оператор умножения дробей
    Ratio operator/ (const Ratio&x) const; // Оператор деления дробей
    Ratio& operator= (const Ratio &src); // Оператор присваивания
    Ratio& operator*= (const Ratio&x); // Оператор умножения
    Ratio& operator/= (const Ratio&x); // Оператор деления
    friend ostream& operator<< (ostream& outs, const Ratio &x); // Перегрузка ввода
        friend istream& operator>> (istream& ins, Ratio &x);  // Перегрузка вывода
    bool operator== (const Ratio&x) const; // Оператор эквивалентности
    bool operator!= (const Ratio&x) const; // Оператор не тождественности
    operator int() const; // Предаставление дроби как целого числа
    operator double() const; // Предаставление дроби как числа с плавающей запятой
    
    /* Методы */
    void invert (); // Меняет местами числитель и знаменатель
    void reduce (); // Сокращает дробь
    ~Ratio() {}; // Деструктор  
};
 
 
Ratio Ratio::operator* (const Ratio&x) const // Оператор умножения дробей
{
    Ratio result (num * x.num, den * x.den); // (a/b)*(c/d)=(ac/bd)
    return result;
}
 
Ratio Ratio::operator/ (const Ratio&x) const //Оператор деления дробей
{
    Ratio result (den * x.num, num * x.den); // (a/b)/(c/d)=(a/b)*(d/c)=(ad/bc)
    return result;
}
 
Ratio& Ratio::operator= (const Ratio &src) // Присваивание
{
    if(&src == this) return *this;
    num = src.num;
    den = src.den;
    return *this;
}
 
Ratio& Ratio::operator*= (const Ratio &x) // Умножение
{
    num *= x.num;
    den *= x.den;
    return *this;
}
 
Ratio& Ratio::operator/= (const Ratio&x) // Деление
{
    num *= x.den;
    den *= x.num;
    return *this;
}
 
ostream& operator<< (ostream& outs, const Ratio &x) // Вывод
{
    outs << x.num << '/' << x.den << endl;
    return outs; // Состояние потока
}
 
istream& operator>> (istream &ins, Ratio &x) // Ввод
{
    int n, d = 1; 
    char c;
    ins >> n >> c;
    if (c == '/') ins >> d;
    x.num = n;
    x.den = d;
    return ins; // Состояние потока
}
 
bool Ratio::operator== (const Ratio&x) const // Эквивалентность
{
    return ((num == x.num) && (den == x.den));
}
 
bool Ratio::operator!= (const Ratio&x) const // Не тождественность
{
    return !operator == (x);    
}
    
Ratio::operator int() const // Целые числа
{
    return num/den;
}
 
Ratio::operator double() const // Числа с плавающей запятой
{
    return double(num)/den;
}
 
int Ratio::gcd () // Ищет наибольший общий делитель
{
    int i, od, max, min; // Счетчик и делитель
    max = (num > den) ? num : den;
    min = (num < den) ? num : den;
    for (i = 1; i == min; i++)
    {
        if (max % i == 0 && min % i == 0) od = i; // Если оба числа делятся без остатка, od равен этому числу
    }
    return od;
}
 
void Ratio::reduce() // Сокращение дроби
{
    int temp = gcd();
    num /= temp;
    den /= temp;
}
 
void Ratio::invert () // Меняет местами числитель и знаменатель
{
    int temp = num;
    num = den;
    den = temp;
}
    
int main () // Здесь будут продемонстрированы все возможности класса
{
    Ratio a, b, c; // Рациональные числа
    char ex; // Для выхода из программы
    int temp; // Временная переменная
    
    cout << "Рациональные числа вводите в форме x/y\n" << "Введите первое число (a): ";
    cin >> a;
    cout << "Введите второе число (b): ";
    cin >> b;
    
    // Проверка операторов
    //с = a * b;
    c(5,7);
    cout << "Умножение a*b: " << c;
    c = a / b;
    c.reduce();
    cout << "Деление этого числа (с) на b: " << c;
    c *= a;
    c.reduce();
    cout << "Умножение c на a (c*=a): " << c;
    c /= a;
    c.reduce();
    cout << "Деление c на a (c/=a): " << c;
    if (c == a) temp = 1; else temp = 0;
    cout << "Если с = a, выводится 1" << temp << endl;
    if (c != b) temp = 1; else temp = 0;
    cout << "Если c не равно b, выводится 1: " << temp << endl;
    double temp1 = double (c);
    cout << "Представление c как десятичной дроби: " << temp1 << endl;
    temp = int (a);
    cout << "Представление a как целого числа: " << temp << endl;   
    b.invert ();
    cout << "Инвертирование дроби b: " << b;
 
    cout << "Press q to quit: ";
    cin >> ex;
    if (ex == 'q' || ex == 'Q') exit;
    return 0;
}
 
Текущее время: 20:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru