Постановка задачи:Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки представить как 0.01 (1 копейка), 0.05 (5 копеек), 0.1 (10 копеек), 0.5 (50 копеек). Создать класс Money для работы с денежными суммами. Сумма должна быть представлена полями-номиналами, значениями которых должно быть количество купюр данного достоинства. Реализовать сложение сумм, вычитание сумм, деление сумм, деление суммы на дробное число, умножение на дробное число и операции сравнения. Дробная часть (копейки) при выводе на экран должна быть отделена от целой части запятой.
Тип данных реализуется как класс с закрытыми полями. Операции реализуются как методы
класса. Методы класса реализовать вне класса. Методы класса не должны модифицировать поля класса
(кроме специальных методов изменения полей).
Во всех заданиях, помимо указанных в задании операций, обязательно должны быть реализованы
следующие методы:
метод инициализации Init;
ввод с клавиатуры Read;
вывод на экран Display;
преобразование в строку toString.
Методы Init и toString реализовать внутри структуры; методы Read и Display – вне структуры. В
классе должно быть реализовано не менее двух методов Init: один метод принимает в качестве параметров
данные для полей, второй – объект своего класса. Метод toString должен выдавать строку,
представляющую собой число прописью (преобразование в числитеольное).
Для демонстрации работы с объектами нового типа во всех заданиях требуется написать главную
функцию. В программе обязательно должны быть продемонстрированы различные способы создания
объектов и массивов объектов. Программа должна демонстрировать использование всех функций и
методов. Программа должна выводить на экран размер класса в режиме #pragma pack(1) и без него.
Происходит зацикливание(при 1 запуске кода зацикливания может не быть но при повторном запуске опять зацикливается работаю в кодблокс) в
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
| 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))
{
cout<<"Аргументы должны быть больше 0!\n";
return 1; // неправильные агрументы - не инициализировать поля
}
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 0;
}
} |
|
Вот весь код:
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
| #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 копеек
double summ;
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))
{
cout<<"Аргументы должны быть больше 0!\n";
return 1; // неправильные агрументы - не инициализировать поля
}
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 0;
}
}
double TotalSumm()
{
summ = 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 ;
return 0;
}
void read();
void display();
void add(Money &);
void sub(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)==1);
}
void Money::add(Money & a)
{
one = one + a.one;
two = two + a.two;
five = five + a.five;
ten = ten + a.ten;
fifty = fifty + a.fifty;
hundread = hundread + a.hundread;
FiveHundread = FiveHundread + a.FiveHundread;
OneThousand = OneThousand + a.OneThousand;
FiveThousand = FiveThousand + a.FiveThousand;
OneKopeck = OneKopeck + a.OneKopeck;
FiveKopeck = FiveKopeck + a.FiveKopeck;
TenKopeck = TenKopeck + a.TenKopeck;
FiftyKopeck = FiftyKopeck + a.FiftyKopeck;
}
void Money::sub(Money & b)
{
one = one - b.one;
two = two - b.two;
five = five - b.five;
ten = ten - b.ten;
fifty = fifty - b.fifty;
hundread = hundread - b.hundread;
FiveHundread = FiveHundread - b.FiveHundread;
OneThousand = OneThousand - b.OneThousand;
FiveThousand = FiveThousand - b.FiveThousand;
OneKopeck = OneKopeck - b.OneKopeck;
FiveKopeck = FiveKopeck - b.FiveKopeck;
TenKopeck = TenKopeck - b.TenKopeck;
FiftyKopeck = FiftyKopeck - b.FiftyKopeck;
}
void Money::display()
{ cout<<"---------------------------"<<endl;
cout<<"Сумма по номиналам: "<<summ<<endl;
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;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Money a, b;
cout<<"Ввод количества номиналов № 1: " << endl;
a.read();
a.TotalSumm();
cout<<"---------------------------------------" << endl;
cout<<"Ввод количества номиналов № 2: " << endl;
b.read();
b.TotalSumm();
cout<<"---------------------------------------" << endl;
cout<<"Вывод сумм и номиналов: " << endl;
a.display();
b.display();
cout<<"----------------------------------------" << endl;
cout<<"Сложение сумм: " << endl;
a.add(b);
a.TotalSumm();
cout<<"-----------------------------------------" << endl;
cout<<"Итог сложения сумм: " << endl;
a.display();
cout<<"Вычитание сумм: " << endl;
a.sub(b);
a.TotalSumm();
cout<<"-----------------------------------------" << endl;
cout<<"Итог вычитания: " << endl;
a.display();
system("pause");
return 0;
} |
|