Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 541
1

Реализовать класс Money для работы с денежными суммами; перегрузить операторы согласно условию

13.10.2018, 17:41. Просмотров 2063. Ответов 13
Метки нет (Все метки)

Вот условие задачи:Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки
представить как 0.01 (1*копейка), 0.05 (5*копеек), 0.1 (10*копеек), 0.5 (50*копеек). Создать класс
Money для работы с денежными суммами. Сумма должна быть представлена полями-номиналами,
значениями которых должно быть количество купюр данного достоинства. Реализовать сложение сумм,
вычитание сумм, деление сумм, деление суммы на дробное число, умножение на дробное число и
операции сравнения. Дробная часть (копейки) при выводе на экран должны быть отделена от целой
части запятой.

Это рабочий код:
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
#include <iostream>
#include <cmath>
#include <string>
#include <windows.h>
 
 
using namespace std;
 
class Money {
    int one = 0;         // 1 рубль
    int two = 0;         // 2 рублей
    int five = 0;        //  5 рублей
    int ten = 0;          //  10 рублей
    int fifty = 0;        //  50 рублей
    int hundread = 0;       //  100 рублей
    int FiveHundread = 0;    // 500 рублей
    int OneThousand = 0;    //   1000 рублей
    int FiveThousand = 0;    //  5000 рублей
    double OneKopeck = 0.0;    //    1 копейка
    double FiveKopeck = 0.0;    //    5 копеек
    double TenKopeck = 0.0;     //    10 копеек
    double FiftyKopeck = 0.0;   //    50 копеек
        public:
bool init( int o, int twoo, int f, int t, int ffy, int h, int FH, int OThs, int FThs, double OK, double FK, double TK, double FfyK )
 {
    if ( (o < 0) || (twoo < 0) || (five < 0) || (ten < 0) || (fifty < 0) || (hundread < 0) || (FiveHundread < 0) || (OneThousand < 0) || (FiveThousand < 0) || (OneKopeck < 0) || (FiveKopeck < 0) || (TenKopeck < 0) || (FiftyKopeck < 0))
        {
         return false; //  неправильные агрументы - не инициализировать поля
        }
 
    else                // аргументы правильные инициализировать поля
    {
        one = o;
        two = twoo;
        five = f;
        ten = t;
        fifty = ffy;
        hundread = h;
        FiveHundread = FH;
        OneThousand = OThs;
        FiveThousand = FThs;
        OneKopeck = OK;
        FiveKopeck = FK;
        TenKopeck = TK;
        FiftyKopeck = FfyK;
        return true;
    }
}
double TotalSumm()
{
    return ( one * 1 + two * 2 + five * 5 + ten * 10 + fifty * 50 + hundread * 100 + FiveHundread * 500 + OneThousand * 1000 + FiveThousand * 5000 + OneKopeck / 100 + FiveKopeck * 5 / 100 + TenKopeck * 10 / 100 + FiftyKopeck * 50 / 100 );
}
void read();
void display();
double add(Money &, Money &);
double sub(Money &, Money &);
bool comparison(Money &, Money&);
};
void Money::read()
{
    int one, two, five, ten, fifty, hundread, FiveHundread, OneThousand, FiveThousand;
    double OneKopeck, FiveKopeck, TenKopeck, FiftyKopeck;
    do
    {
        cout<<"-------------------РУБЛИ--------------------"<<endl;
        cout<<"Введите количество купюр номиналом 1 рубль: "; cin>>one;
        cout<<"Введите количество купюр номиналом 2 рубля: "; cin>>two;
        cout<<"Введите количество купюр номиналом 5 рублей: "; cin>>five;
        cout<<"Введите количество купюр номиналом 10 рублей: "; cin>>ten;
        cout<<"Введите количество купюр номиналом 50 рублей: "; cin>>fifty;
        cout<<"Введите количество купбр номиналом 100 рублей: "; cin>>hundread;
        cout<<"Введите количество купюр номиналом 500 рублей: "; cin>>FiveHundread;
        cout<<"Введите количество купюр номиналом 1000 рублей: "; cin>>OneThousand;
        cout<<"Введите количество купюр номиналом 5000 рублей: "; cin>>FiveThousand;
        cout<<"------------------КОПЕЙКИ--------------------"<<endl;
        cout<<"Введите количество копеек номиналом 1: "; cin>>OneKopeck;
        cout<<"Введите количесвто копеек номиналом 5: "; cin>>FiveKopeck;
        cout<<"Введите количесвто копеек номиналом 10: "; cin>>TenKopeck;
        cout<<"Введите количество копеек номиналом 50: "; cin>>FiftyKopeck;
    } while (!init(one, two, five, ten, fifty, hundread, FiveHundread, OneThousand, FiveThousand, OneKopeck, FiveKopeck, TenKopeck, FiftyKopeck));
 
 
}
 
void Money::display()
{
 
    cout<<"---------------------------"<<endl;
    cout<<"Сумма купюр номиналом 1 рубль: "<< one << endl;
    cout<<"Сумма купюр номиналом 2 рублей: "<< two * 2 << endl;
    cout<<"Сумма купюр номиналом 5 рублей: "<< five * 5 << endl;
    cout<<"Сумма купюр номиналом 10 рублей: "<< ten * 10 << endl;
    cout<<"Сумма купюр номиналом 50 рублей: "<< fifty * 50 << endl;
    cout<<"Сумма купюр номиналом 100 рублей: "<< hundread * 100 << endl;
    cout<<"Сумма купюр номиналом 500 рублей: "<< FiveHundread * 500 << endl;
    cout<<"Сумма купюр номиналом 1000 рублей: "<< OneThousand * 1000 << endl;
    cout<<"Сумма купюр номиналом 5000 рублей: "<< FiveThousand * 5000 << endl;
    cout<<"Сумма копеек номиналом 1: "<< OneKopeck / 100 << endl;
    cout<<"Сумма копеек номиналом 5: "<< FiveKopeck * 5 / 100 << endl;
    cout<<"Сумма копеек номиналом 10: "<< TenKopeck * 10 / 100 << endl;
    cout<<"Сумма копеек номиналом 50: "<< FiftyKopeck * 50 / 100 << endl;
    cout<<"---------------------------"<<endl;
    cout<<"Сумма по номиналам: "<<TotalSumm()<<endl;
}
 
double Money::add(Money &a, Money&b)
{
    return ( a.TotalSumm() + b.TotalSumm());
}
 
double Money::sub(Money &a, Money&b)
{
    if(a.TotalSumm() > b.TotalSumm()) return ( a.TotalSumm()- b.TotalSumm() );
        else if (a.TotalSumm() < b.TotalSumm()) return ( b.TotalSumm() - a.TotalSumm() );
            else return 0;
}
 
bool Money::comparison(Money &a, Money &b)
{
    if( a.TotalSumm() > b.TotalSumm() ) cout <<  "A > B" << endl;
        else if ( a.TotalSumm() < b.TotalSumm() ) cout << "A < B" << endl;
            else if ( a.TotalSumm() == b.TotalSumm() ) cout << "A = B" << endl;
    else return 0;
}
 
int main()
{
    Money pragma;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Money a, b, sht;
    cout << "Тест неправильных значений: " << endl;
    cout << "При отрицательных количествах купюр, результат: " << endl;
    if ( !sht.init(-1,-2,-3,-4,-5,-6,-7,-8,-9,-1,-2,-3,-4)) cout << "Неправильные данные!!!" << endl;
    else { sht.read(); sht.TotalSumm();}
    cout << "---------------------------------------" << endl;
    cout << "Тест при правильных значениях: " << endl;
    if ( !sht.init(5,2,6,3,5,4,3,6,4,2,3,4,5)) cout << "Неправильные данные!!!" << endl;
    else { sht.read(); cout << "Сумма равна: " << sht.TotalSumm() << endl;}
    cout << "---------------------------------------" << endl;
    cout << "ТЕПЕРЬ ВВОДИТЕ СВОИ ДАННЫЕ: " << endl;
    cout << "Ввод суммы A: " << endl;
    a.read();
    a.TotalSumm();
    cout << "-----------------------------------------" << endl;
    cout << "Ввод cсуммы B: " << endl;
    b.read();
    b.TotalSumm();
    cout << "---------------------------------------" << endl;
    cout << "Вывод сумм и номиналов: " << endl;
    a.display();
    b.display();
    cout << "----------------------------------------" << endl;
    cout << "A + B = " << sht.add( a, b) << endl;
    cout << "----------------------------------------" << endl;
    cout << "A - B = " << sht.sub( a, b) << endl;
    cout << "----------------------------------------" << endl;
    cout << "Сравнение : ";
    cout << sht.comparison( a, b) << endl;
    system( " pause " );
}
Этот код надо переделать с использованием перегрузки операторов ввода( void Money::read() ) и вывода( void Money::display() ). Я пытался ссделать но не получается, вот код:
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
180
#include <iostream>
#include <cmath>
#include <string>
#include <windows.h>
 
 
using namespace std;
 
class Money {
    int one;         // 1 рубль
    int two;         // 2 рублей
    int five;        //  5 рублей
    int ten;          //  10 рублей
    int fifty;        //  50 рублей
    int hundread;       //  100 рублей
    int FiveHundread;    // 500 рублей
    int OneThousand;    //   1000 рублей
    int FiveThousand;    //  5000 рублей
    double OneKopeck;    //    1 копейка
    double FiveKopeck;    //    5 копеек
    double TenKopeck;     //    10 копеек
    double FiftyKopeck;   //    50 копеек
        public:
bool init( int o, int twoo, int f, int t, int ffy, int h, int FH, int OThs, int FThs, double OK, double FK, double TK, double FfyK )
 {
    if ( (o < 0) || (twoo < 0) || (five < 0) || (ten < 0) || (fifty < 0) || (hundread < 0) || (FiveHundread < 0) || (OneThousand < 0) || (FiveThousand < 0) || (OneKopeck < 0) || (FiveKopeck < 0) || (TenKopeck < 0) || (FiftyKopeck < 0))
        {
         return false; //  неправильные агрументы - не инициализировать поля
        }
 
    else                // аргументы правильные инициализировать поля
    {
        one = o;
        two = twoo;
        five = f;
        ten = t;
        fifty = ffy;
        hundread = h;
        FiveHundread = FH;
        OneThousand = OThs;
        FiveThousand = FThs;
        OneKopeck = OK;
        FiveKopeck = FK;
        TenKopeck = TK;
        FiftyKopeck = FfyK;
        return true;
    }
}
Money(int o = 0, int twoo = 0, int f = 0, int t = 0, int ffy = 0, int h = 0, int FH =0, int OThs = 0, int FThs = 0, double OK = 0, double FK = 0, double TK = 0, double FfyK = 0)
{
    if (!init(o, twoo, f, t, ffy, h, FH, OThs, FThs, OK, FK, TK, FfyK))
        throw "Конструктору не понравились ваши данные!!!";
}
double TotalSumm()
{
    return ( one * 1 + two * 2 + five * 5 + ten * 10 + fifty * 50 + hundread * 100 + FiveHundread * 500 + OneThousand * 1000 + FiveThousand * 5000 + OneKopeck / 100 + FiveKopeck * 5 / 100 + TenKopeck * 10 / 100 + FiftyKopeck * 50 / 100 );
}
friend istream& operator>>(istream &t, Money &r);
friend ostream& operator<<(ostream &t, const Money &r);
double add(Money &, Money&);
double sub(Money &, Money &);
bool comparison(Money &, Money &);
};
double Money::add(Money &a, Money &b)
{
 
    return (a.TotalSumm() + b.TotalSumm());
}
double Money::sub(Money &a, Money&b)
{
 
    if(a.TotalSumm() > b.TotalSumm()) return ( a.TotalSumm()- b.TotalSumm() );
        else if (a.TotalSumm() < b.TotalSumm()) return ( b.TotalSumm() - a.TotalSumm() );
            else return 0;
}
bool Money::comparison(Money&a, Money&b)
{
    if( a.TotalSumm() > b.TotalSumm() ) cout <<  "A > B" << endl;
        else if ( a.TotalSumm() < b.TotalSumm() ) cout << "A < B" << endl;
            else if ( a.TotalSumm() == b.TotalSumm() ) cout << "A = B" << endl;
    else return 1;
}
 
istream & operator>>(istream &t, Money &r)
{
    int one, two, five, ten, fifty, hundread, FiveHundread, OneThousand, FiveThousand;
    double OneKopeck, FiveKopeck, TenKopeck, FiftyKopeck;
    do
    {
        cout<<"-------------------РУБЛИ--------------------"<<endl;
        cout<<"Введите количество купюр номиналом 1 рубль: "; cin>>one;
        cout<<"Введите количество купюр номиналом 2 рубля: "; cin>>two;
        cout<<"Введите количество купюр номиналом 5 рублей: "; cin>>five;
        cout<<"Введите количество купюр номиналом 10 рублей: "; cin>>ten;
        cout<<"Введите количество купюр номиналом 50 рублей: "; cin>>fifty;
        cout<<"Введите количество купбр номиналом 100 рублей: "; cin>>hundread;
        cout<<"Введите количество купюр номиналом 500 рублей: "; cin>>FiveHundread;
        cout<<"Введите количество купюр номиналом 1000 рублей: "; cin>>OneThousand;
        cout<<"Введите количество купюр номиналом 5000 рублей: "; cin>>FiveThousand;
        cout<<"------------------КОПЕЙКИ--------------------"<<endl;
        cout<<"Введите количество копеек номиналом 1: "; cin>>OneKopeck;
        cout<<"Введите количесвто копеек номиналом 5: "; cin>>FiveKopeck;
        cout<<"Введите количесвто копеек номиналом 10: "; cin>>TenKopeck;
        cout<<"Введите количество копеек номиналом 50: "; cin>>FiftyKopeck;
    } while (!r.init(one, two, five, ten, fifty, hundread, FiveHundread, OneThousand, FiveThousand, OneKopeck, FiveKopeck, TenKopeck, FiftyKopeck));
        r.one = one;
        r.two = two;
        r.five = five;
        r.ten = ten;
        r.fifty = fifty;
        r.hundread = hundread;
        r.FiveHundread = FiveHundread;
        r.OneThousand = OneThousand;
        r.FiveThousand = FiveThousand;
        r.OneKopeck = OneKopeck;
        r.FiveKopeck = FiveKopeck;
        r.TenKopeck = TenKopeck;
        r.FiftyKopeck = FiftyKopeck;
        return t;
}
 
ostream & operator<<(ostream &t, const Money &r)
{
    t << "---------------------------" << endl;
    t << "Сумма купюр номиналом 1 рубль: " << r.one << endl;
    t << "Сумма купюр номиналом 2 рублей: " << r.two * 2 << endl;
    t << "Сумма купюр номиналом 5 рублей: " << r.five * 5 << endl;
    t << "Сумма купюр номиналом 10 рублей: " << r.ten * 10 << endl;
    t << "Сумма купюр номиналом 50 рублей: " << r.fifty * 50 << endl;
    t << "Сумма купюр номиналом 100 рублей: " << r.hundread * 100 << endl;
    t << "Сумма купюр номиналом 500 рублей: " << r.FiveHundread * 500 << endl;
    t << "Сумма купюр номиналом 1000 рублей: " << r.OneThousand * 1000 << endl;
    t << "Сумма купюр номиналом 5000 рублей: " << r.FiveThousand * 5000 << endl;
    t << "Сумма копеек номиналом 1: " << r.OneKopeck / 100 << endl;
    t << "Сумма копеек номиналом 5: " << r.FiveKopeck * 5 / 100 << endl;
    t << "Сумма копеек номиналом 10: " << r.TenKopeck * 10 / 100 << endl;
    t << "Сумма копеек номиналом 50: " << r.FiftyKopeck * 50 / 100 << endl;
    t << "---------------------------" << endl;
 
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Money a, b, sht;
    try
    {
        
        Money a;
        cout<<a<<";"; cout<< a.TotalSumm()<<endl;
    } catch (const char *s) {cout<<s<<endl;}
    cout << "Тест неправильных значений: " << endl;
    cout << "При отрицательных количествах купюр, результат: " << endl;
    if ( !sht.init(-1,-2,-3,-4,-5,-6,-7,-8,-9,-1,-2,-3,-4)) cout << "Неправильные данные!!!" << endl;
    else { cout<<sht; sht.TotalSumm();}
    cout << "---------------------------------------" << endl;
    cout << "Тест при правильных значениях: " << endl;
    if ( !sht.init(5,2,6,3,5,4,3,6,4,2,3,4,5)) cout << "Неправильные данные!!!" << endl;
    else { cout<<sht; cout << "Сумма равна: " << sht.TotalSumm() << endl;}
    cout << "---------------------------------------" << endl;
    cout << "ТЕПЕРЬ ВВОДИТЕ СВОИ ДАННЫЕ: " << endl;
    cout << "Ввод суммы A: " << endl;
    cout<<a;
    a.TotalSumm();
    cout << "-----------------------------------------" << endl;
    cout << "Ввод cсуммы B: " << endl;
    cout<<b;
    b.TotalSumm();
    cout << "---------------------------------------" << endl;
    cout << "Вывод сумм и номиналов: " << endl;
    cout << "----------------------------------------" << endl;
    cout << "A + B = " << sht.add( a, b) << endl;
    cout << "----------------------------------------" << endl;
    cout << "A - B = " << sht.sub( a, b) << endl;
    cout << "----------------------------------------" << endl;
    cout << "Сравнение : ";
    cout << sht.comparison( a, b) << endl;
    system( " pause " );
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2018, 17:41
Ответы с готовыми решениями:

Создать класс Money для работы с денежными суммами
Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки...

создать класс Money для работы с денежными суммами
1. Определение класса. Оценивается полнота и корректность определения класса (объявление его полей...

Создать класс Money для работы с денежными суммами
Проблемы с задачей, а точнее, её полное не понимание. Надеюсь на вашу помощь.

Создать класс Money для работы с денежными суммами
Помогите решить:-[ Создать класс Money для работы с денежными суммами. Число должно быть...

13
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
13.10.2018, 18:35 2
В конце перегрузки оператора
C++
1
ostream & operator<<(ostream &t, const Money &r)
добавьте
C++
1
return t;
У Вас сильно перегружен конструктор (на мой взгляд). Лучше будет по одному добавлять количество купюр/монет (опять-таки имхо).
0
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 541
13.10.2018, 19:06  [ТС] 3
Не работает все равно
0
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 541
14.10.2018, 07:41  [ТС] 4
...
0
(80 / 20 || 50 / 50) = x
1686 / 1153 / 440
Регистрация: 16.08.2014
Сообщений: 4,843
Записей в блоге: 1
14.10.2018, 07:56 5
all_this_pain, у тебя поля достоинств в приватном секторе, добавь в класс гетеры сетеры и через них присваивай значения полям.

Добавлено через 3 минуты
или функцию operator<< сделай другом класса Money, но это не есть хорошо.
0
sourcerer
14.10.2018, 07:58
  #6
 Комментарий модератора 
cherc, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).
0
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 541
14.10.2018, 17:44  [ТС] 7
Так в классе эта функция уже определена как дружественная

Добавлено через 26 минут
Выдает ошибку: terminate called after throwing an instance of 'char const*'

Добавлено через 6 часов 21 минуту
....
0
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 541
15.10.2018, 14:27  [ТС] 8
...
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
17.10.2018, 18:30 9
cherc, вопрос все еще актуален?
0
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 541
17.10.2018, 20:21  [ТС] 10
all_this_pain, да. Почему то если две суммы одинаковые то при их вычитании получается не 0 а какое то другое число
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
17.10.2018, 23:03 11
Лучший ответ Сообщение было отмечено cherc как решение

Решение

Что-то такое:
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
#include <iostream>
#include <iomanip>
#include <locale>
#include <Windows.h>
 
 
using namespace std;
 
class Money {
private:
    size_t rub_1, rub_2, rub_5, rub_10, rub_50, rub_100, rub_500, rub_1k, rub_5k;
    size_t kop_1, kop_5, kop_10, kop_50;
public:
    Money() : rub_1(0), rub_2(0), rub_5(0), rub_10(0), rub_50(0), rub_100(0), rub_500(0), rub_1k(0), rub_5k(0),
        kop_1(0), kop_5(0), kop_10(0), kop_50(0) 
    {
        cout.setf(cout.fixed);
        setlocale(LC_ALL, "rus");
    }
 
    double get_sum() const;
    double operator+ (Money &mon) const { return get_sum() + mon.get_sum(); }
    double operator- (Money &mon) const { return get_sum() - mon.get_sum(); }
    double operator/ (Money &mon) const { return get_sum() / mon.get_sum(); }
    double operator/ (double val) const { return get_sum() / val; }
    double operator* (double val) const { return get_sum() * val; }
    double operator== (Money &mon) const { return get_sum() == mon.get_sum(); }
    double operator> (Money &mon) const { return get_sum() > mon.get_sum(); }
    double operator< (Money &mon) const { return get_sum() < mon.get_sum(); }
    friend istream& operator>>(istream &stream, Money &mon);
    friend ostream& operator<<(ostream &stream, Money &mon);
};
 
double Money::get_sum() const{
    return rub_1 + rub_2 * 2 + rub_5 * 5 + rub_10 * 10 + rub_50 * 50 + rub_500 * 500 +
        rub_1k * 1000 + rub_5k * 5000 + kop_1 * 0.01 + kop_5 * 0.05 + kop_10 * 0.1 + kop_50 * 0.5;
}
 
istream& operator>>(istream &stream, Money &mon) {
    cout << "-------------------РУБЛИ--------------------" << endl;
    cout << "Введите количество купюр номиналом 1 рубль: "; stream >> mon.rub_1;
    cout << "Введите количество купюр номиналом 2 рубля: "; stream >> mon.rub_2;
    cout << "Введите количество купюр номиналом 5 рублей: "; stream >> mon.rub_5;
    cout << "Введите количество купюр номиналом 10 рублей: "; stream >> mon.rub_10;
    cout << "Введите количество купюр номиналом 50 рублей: "; stream >> mon.rub_50;
    cout << "Введите количество купбр номиналом 100 рублей: "; stream >> mon.rub_100;
    cout << "Введите количество купюр номиналом 500 рублей: "; stream >> mon.rub_500;
    cout << "Введите количество купюр номиналом 1000 рублей: "; stream >> mon.rub_1k;
    cout << "Введите количество купюр номиналом 5000 рублей: "; stream >> mon.rub_5k;
    cout << "------------------КОПЕЙКИ--------------------" << endl;
    cout << "Введите количество копеек номиналом 1: "; stream >> mon.kop_1;
    cout << "Введите количесвто копеек номиналом 5: "; stream >> mon.kop_5;
    cout << "Введите количесвто копеек номиналом 10: "; stream >> mon.kop_10;
    cout << "Введите количество копеек номиналом 50: "; stream >> mon.kop_50;
    return stream;
}
 
ostream& operator<<(ostream &stream, Money &mon) {
    stream << "---------------------------" << endl;
    stream << "Сумма купюр номиналом 1 рубль: " << mon.rub_1 << endl;
    stream << "Сумма купюр номиналом 2 рублей: " << mon.rub_2 * 2 << endl;
    stream << "Сумма купюр номиналом 5 рублей: " << mon.rub_5 * 5 << endl;
    stream << "Сумма купюр номиналом 10 рублей: " << mon.rub_10 * 10 << endl;
    stream << "Сумма купюр номиналом 50 рублей: " << mon.rub_50 * 50 << endl;
    stream << "Сумма купюр номиналом 100 рублей: " << mon.rub_100 * 100 << endl;
    stream << "Сумма купюр номиналом 500 рублей: " << mon.rub_500 * 500 << endl;
    stream << "Сумма купюр номиналом 1000 рублей: " << mon.rub_1k * 1000 << endl;
    stream << "Сумма купюр номиналом 5000 рублей: " << mon.rub_5k * 5000 << endl;
    stream << "Сумма копеек номиналом 1: " << setprecision(3) << mon.kop_1 * 0.01 << endl;
    stream << "Сумма копеек номиналом 5: " << setprecision(3) << mon.kop_5 * 0.05 << endl;
    stream << "Сумма копеек номиналом 10: " << setprecision(3) << mon.kop_10 * 0.1 << endl;
    stream << "Сумма копеек номиналом 50: " << setprecision(3) << mon.kop_50 * mon.kop_50 * 0.5 << endl;
    stream << "---------------------------" << endl;
    stream << "Сумма по номиналам: " << mon.get_sum() << endl;
    return stream;
}
 
int main() {
    Money a, b;
 
    cout << "Ввод суммы a: " << endl;
    cin >> a;
    cout << endl << "Значение суммы a:" << endl << a << endl;
 
    cout << "Ввод суммы b: " << endl;
    cin >> b;
    cout << endl << "Значение суммы b:" << endl << b << endl;
 
    if (a == b) {
        cout << "a == b" << endl;
    }
    else if (a > b) {
        cout << "a > b" << endl;
    }
    else {
        cout << "a < b" << endl;
    }
 
    double n;
    cout << "a / b = " << a / b << endl;
    cout << "Введите число для деления суммы: ";
    cin >> n;
    cout << "a / " << n << " = " << a / n << endl;
    cout << "Введите число для умножения суммы: ";
    cin >> n;
    cout << "a * " << n << " = " << a * n << endl;
 
    system("pause");
    return 0;
}
Добавлено через 25 минут
вот это:
C++
1
2
3
double operator== (Money &mon) const { return get_sum() == mon.get_sum(); }
double operator> (Money &mon) const { return get_sum() > mon.get_sum(); }
double operator< (Money &mon) const { return get_sum() < mon.get_sum(); }
заменить на:
C++
1
2
3
bool operator== (Money &mon) const { return get_sum() == mon.get_sum(); }
bool operator> (Money &mon) const { return get_sum() > mon.get_sum(); }
bool operator< (Money &mon) const { return get_sum() < mon.get_sum(); }
1
916 / 618 / 291
Регистрация: 26.02.2015
Сообщений: 2,826
17.10.2018, 23:23 12
cherc, у тебя преподаватель поехавший, я бы не ходил к нему на пары с такими заданиями.
0
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 541
18.10.2018, 17:07  [ТС] 13
Nishen, это еще упрощенный вариант задания.

Добавлено через 1 минуту
all_this_pain, не понял что на что заменить?
0
45 / 30 / 16
Регистрация: 25.02.2017
Сообщений: 103
18.10.2018, 18:29 14
C++
1
stream << "Сумма копеек номиналом 50: " << setprecision(3) << mon.kop_50 * mon.kop_50 * 0.5 << endl;
в 72-й строке ошибка. mon.kop_50 два раза умножвется.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2018, 18:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создать структуру Money для работы с денежными суммами
Люди, помогите, пожалуйста! Есть задача: Создать структуру Money для работы с денежными суммами....

Создать класс Money для работы с денежными суммами
 Создать проект CLR – консольное приложение. Создать класс Money для работы с денежными суммами....

Создать класс money для работы с денежными суммами
Создать класс money для работы с денежными суммами. Денежная сумма должна быть представлена двумя...

Создать класс Money для работы с денежными суммами
Нужно создать класс Money для работы с денежными суммами. Число должно быть представлено двумя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.