С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/79: Рейтинг темы: голосов - 79, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36

Создать класс Money

21.03.2014, 07:35. Показов 16695. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
Создать класс Money для работы с денежными суммами.Число должно быть представлено двумя полями: типом long для рублей и типом unsigned char - для копеек. дробная часть(копейки) при выводе на экран должна быть отделена от целой части запятойю реализовать сложение,вычитание, деление сумм, деление суммы на дробное число, умножение на дробное число и операцию сравнения.

В чем требуется помощь:
1.Написать функцию, которая бы после выполнения операции корректно перевела копейки в рубли(если будет большая сумма копеек, выходящая за рамки копеек) и прибавила их к рублям
2.Помочь с операциями деление сумм, деление суммы на дробное число, умножение на дробное число и операцию сравнения.
3. Помочь разобраться с методом toString

Мой вариант
Програмка в вот такой форме

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
23
#include "money.h"
#include<iostream>
#include<string>
#include<sstream>
 
using namespace std;
 
int main()
{
    money A, B;
 
        std::cout << "\nEnter first summ in format 'roubles'.'copecks':\t";
        std::cin >> A;
        std::cout << "Enter second summ in format 'roubles'.'copecks'':\t";
        std::cin >> B;
        std::cout << "Sum:\t\t" << (A+B) << std::endl;
        std::cout << "Raznost:\t\t" << ( A - B ) << std::endl;
        std::cout << "Delenien:\t\t" << ( A / B ) << std::endl;
 
cout << " to str: " << A.toString() << endl;
 
       return 0;
}
money.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
#ifndef MONEY
#define MONEY
#include <iostream>
 
using namespace std;
class money
{
  long roubles;
  unsigned int copecks;
 
 
public:
 std::string toString() const;
    friend istream &operator >>(istream &in,money &A); //Ввод
    friend ostream &operator <<(ostream &out,money A);  //Вывода
    friend money operator+(money A,money B);   //Сложение
    friend money operator-(money A,money B);   //Вычитание
    friend money operator/(money A,money B);
    string operator!();  //в строку
 
    //money add(money& other);
 
};
#endif
money.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
#include "money.h"
#include<iostream>
#include<string>
#include<sstream>
#include<cmath>
#include <iostream>
#include <iomanip>
#include <limits>
using namespace std;
 
   //Вводим данные
istream &operator>>(istream &in,money &A) {
    in >> A.roubles >> A.copecks;
    return in;
}
//Выводим
ostream &operator<<(ostream &out, money A) {
    out<<"Roubles: "<< A.roubles <<"; Copecks: "<<A.copecks<<endl;
    return out;
 
}
    //Складываем
        money operator+(money B, money A)
        { money temp;
            temp.copecks=A.copecks+B.copecks;
            temp.roubles=(A.roubles+B.roubles);
            return temp;
                }
 
             //Вычитаем
              money operator-(money A, money B)
            { money temp;
                temp.copecks=B.copecks-A.copecks;
                temp.roubles=(B.roubles-A.roubles);
                return temp; }
 
 
            std::string money::toString() const {
    std::ostringstream oss;
    oss<<"Roubles: "<<roubles<<"; Copecks: "<<copecks<<endl;
    return oss.str();
}
 
 
 
            //Делим
                money operator/(money A, money B)
                {     money temp;
                    if(A.roubles!=0 && A.copecks!=0)
                    {
                        temp.copecks=B.copecks/A.copecks;
                        temp.roubles=B.roubles/A.roubles;
                    }
                return temp;}
Добавлено через 3 часа 12 минут
Поможете?

Добавлено через 10 часов 23 минуты
Up =))))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2014, 07:35
Ответы с готовыми решениями:

Создать базовый класс - Array и производный класс - Money для работы денежной суммы
ПОМОГИТЕ, ПОЖАЛУЙСТА, С ЗАДАЧЕЙ Создать базовый класс - Array и производный класс - Money для работы денежной суммы

Создать класс Money
Создать класс Money, содержащий следующие члены класса: 1. Поля: int nominal - номинал купюры int amount - количество купюр 2....

Создать класс Money
здравствуйте, нужно создать мини программку,на с++. Я учусь на первом курсе, к сожалению не очень сильно понимаю программирование, буду...

17
2393 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
21.03.2014, 11:04
Цитата Сообщение от Slight Посмотреть сообщение
Написать функцию, которая бы после выполнения операции корректно перевела копейки в рубли(если будет большая сумма копеек, выходящая за рамки копеек) и прибавила их к рублям
C++
1
2
3
4
5
void transform(unsigned int fullcopecs)
{
    roubles = fullcopecs / 100;
    copecs = fullcopecs % 100;
}
1
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
21.03.2014, 11:26
Slight, Концепция класса не верная, перепишите его используя идею John Prick, все действия производите с переменной (private) fullcopecs, а на печать рубли/копейки выводите как показал John Prick. Тогда Ваш класс должен содержать будет 3 конструктора.
1
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
21.03.2014, 11:58  [ТС]
Помогите с реализацией, мне нужно оформить программу по такому типу с перегрузкой операторов, ну их вроде перегрузил
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
21.03.2014, 16:42
Лучший ответ Сообщение было отмечено Slight как решение

Решение

Я переделал слегка идеологию и не только исправил деление (там по новому стало, читайте комментарии):
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
#include<iostream>
#include<string>
#include<sstream>
#include<cmath>
#include <iostream>
#include <iomanip>
#include <limits> 
 
using namespace std;
class money
{
private:
int fullcopecs;
 
 
public:
 std::string toString() const;
    money() {fullcopecs=0;}
    money(unsigned int a){fullcopecs=a;}
    money(unsigned int r, unsigned int c){fullcopecs=r*100+c;}
    friend istream &operator >>(istream &in,money &A); //Ввод
    friend ostream &operator <<(ostream &out,money A);  //Вывода
    friend money operator+(money A,money B);   //Сложение
    friend money operator-(money A,money B);   //Вычитание
    friend int operator/(money A,money B); //Если делишь кучку денег на кучку денег, то по идеи должно получиться число кучек (а не новая кучка)
    friend money operator/(money A,int B); //Если делишь кучку денег на число кучек, то по идеи должна получиться новая кучка
    string operator!();  //в строку
 
    //money add(money& other);
 
};
 
 
using namespace std;
 
   //Вводим данные
istream &operator>>(istream &in,money &A) {
    unsigned int roubles, copecks;
    in >>roubles >> copecks;
    A.fullcopecs =roubles*100+copecks;
    return in;
}
//Выводим
ostream &operator<<(ostream &out, money A) 
{
    unsigned int roubles, copecks;
    roubles=A.fullcopecs/100;
    copecks=A.fullcopecs%100;
    out<<"Roubles: "<< roubles <<"; Copecks: "<<copecks<<endl;
    return out;
 
}
    //Складываем
money operator+(money B, money A)
{ 
    money temp;
    temp.fullcopecs =A.fullcopecs+B.fullcopecs; 
    return temp;
}
 
             //Вычитаем
money operator-(money A, money B)
{
    money temp;
    temp.fullcopecs= A.fullcopecs-B.fullcopecs; 
    return temp; 
}
 
 
string money::toString() const 
{
    ostringstream oss;
    unsigned int roubles, copecks;
    roubles=fullcopecs/100;
    copecks=fullcopecs%100;
    oss<<"Roubles: "<<roubles<<"; Copecks: "<<copecks<<endl;
    return oss.str();
}
 
 
 
            //Делим
int operator/(money A, money B)
{   
    unsigned int temp=0;
    if(B.fullcopecs!=0) temp=A.fullcopecs /B.fullcopecs;
    return temp;
}
 
money operator/(money A, int B)
{   
    money temp;
    if(B!=0) temp.fullcopecs =A.fullcopecs/B;
    return temp;
}
 
int main()
{
    money A, B;
 
        cout << "\nEnter first summ in format 'roubles'.'copecks':\t";
        cin >> A;
        cout << "Enter second summ in format 'roubles'.'copecks'':\t";
        cin >> B;
        cout << "Sum:\t\t" << (A+B) << endl;
        cout << "Raznost:\t\t" << ( A - B ) <<endl;
        cout << "Delenien:\t\t" << ( A / B ) <<" chasti" << endl;
        cout << "Delenien na 4 chasti:\t\t" << ( A / 4 ) <<" chasti" << endl;
        cout << " to str: " << A.toString() << endl;
        system ("pause");
       return 0;
}
Добавлено через 2 часа 23 минуты
Цитата Сообщение от Slight Посмотреть сообщение
2.Помочь с операциями деление сумм, деление суммы на дробное число, умножение на дробное число и операцию сравнения.
3. Помочь разобраться с методом toString
Учтите это я не правил.... Я лишь поправил подход, ну а с этим разберетесь по аналогии
1
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
21.03.2014, 18:48  [ТС]
Сделал, спасибо. Просто неправильно понял задачу
Хотелось бы еще спросить насчет сравнения. как я его должен использовать.
C++
1
2
bool money::operator==(const money& that) const {
    return (fullcopecs == that.fullcopecs);}
перегрузил
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
21.03.2014, 19:08
Да, правильно понимаете, аналогично реализуйте != а также:
C++
1
2
3
4
5
6
7
8
friend money operator*(money A,int B);
 
money operator*(money A, int B)
{   
    money temp;
     temp.fullcopecs =A.fullcopecs*B;
    return temp;
}
Добавлено через 29 секунд
Цитата Сообщение от mustimur Посмотреть сообщение
Помочь разобраться с методом toString
Я так и до конца не понял что надо

Добавлено через 6 минут
Цитата Сообщение от Slight Посмотреть сообщение
как я его должен использовать
Тоже не понял что вы хотели спросить?
0
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
03.04.2014, 08:46  [ТС]
Что я должен сделать если добаляется условие
Номиналы российских рублей могут принимать значения 1, 2, 5, 10, 50, 100, 500, 1000, 5000. Копейки представить как 0.01 (1 копейка), 0.05 (5копеек), 0.1 (10 копеек), 0.5 (50 копеек). Создать класс Money для работы с денежными суммами.

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

как я должен переписать конструктор, чтобы представить сумму данным образом?

Добавлено через 1 час 20 минут
Если я правильно понял суть того что необъодимо дополнительно реализовать, то это функцию, которая бы делила сумму на номинал из массива money [13]={5000,1000,500,100,50,10,5,2,1,0.5,0,1, 0.05,0.01} и записывала их в другой созданный массив
0
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 11:47  [ТС]
Помогите, похалуйста
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
05.04.2014, 15: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
#include<iostream>
#include<string>
#include<sstream>
#include<cmath>
#include <iostream>
#include <iomanip>
#include <limits> 
 
using namespace std;
const int dcup[14]={500000,100000,50000,10000,5000,1000,500,200,100,50,10,5,2,1};
 
class money
{
private:
int fullcopecs;
 
 
public:
 std::string toString() const;
    money() {fullcopecs=0;}
    money(unsigned int a){fullcopecs=a;}
    money(unsigned int r, unsigned int c){fullcopecs=r*100+c;}
    friend istream &operator >>(istream &in,money &A); //Ввод
    friend ostream &operator <<(ostream &out,money A);  //Вывода
    friend money operator+(money A,money B);   //Сложение
    friend money operator-(money A,money B);   //Вычитание
    friend int operator/(money A,money B); //Если делишь кучку денег на кучку денег, то по идеи должно получиться число кучек (а не новая кучка)
    friend money operator/(money A,int B); //Если делишь кучку денег на число кучек, то по идеи должна получиться новая кучка
    string operator!();  //в строку
    const int* GetCup ();
    //money add(money& other);
 
};
 
 
using namespace std;
 
 //Вводим данные
istream &operator>>(istream &in,money &A) {
    unsigned int roubles, copecks;
    in >>roubles >> copecks;
    A.fullcopecs =roubles*100+copecks;
    return in;
}
//Выводим
ostream &operator<<(ostream &out, money A) 
{
    unsigned int roubles, copecks;
    roubles=A.fullcopecs/100;
    copecks=A.fullcopecs%100;
    out<<"Roubles: "<< roubles <<"; Copecks: "<<copecks<<endl;
    return out;
 
}
    //Складываем
money operator+(money B, money A)
{ 
    money temp;
    temp.fullcopecs =A.fullcopecs+B.fullcopecs; 
    return temp;
}
 
             //Вычитаем
money operator-(money A, money B)
{
    money temp;
    temp.fullcopecs= A.fullcopecs-B.fullcopecs; 
    return temp; 
}
 
 
string money::toString() const 
{
    ostringstream oss;
    unsigned int roubles, copecks;
    roubles=fullcopecs/100;
    copecks=fullcopecs%100;
    oss<<"Roubles: "<<roubles<<"; Copecks: "<<copecks<<endl;
    return oss.str();
}
const int* money::GetCup ()
{
int *cup=new int[14];
int fc;
fc=fullcopecs;
for (int i=0;i<13;++i)
{
    cup[i]=fc/dcup[i];
    fc-=cup[i]*dcup[i];
}
cup[14]=fc;
return cup;
}
 
 
            //Делим
int operator/(money A, money B)
{   
    unsigned int temp=0;
    if(B.fullcopecs!=0) temp=A.fullcopecs /B.fullcopecs;
    return temp;
}
 
money operator/(money A, int B)
{   
    money temp;
    if(B!=0) temp.fullcopecs =A.fullcopecs/B;
    return temp;
}
 
int main()
{
    money A, B;
 
        cout << "\nEnter first summ in format 'roubles'.'copecks':\t";
        cin >> A;
      cout << "Enter second summ in format 'roubles'.'copecks'':\t";
        cin >> B;
        cout << "Sum:\t\t" << (A+B) << endl;
        cout << "Raznost:\t\t" << ( A - B ) <<endl;
        cout << "Delenien:\t\t" << ( A / B ) <<" chasti" << endl;
        cout << "Delenien na 4 chasti:\t\t" << ( A / 4 ) <<" chasti" << endl;
        cout << " to str: " << A.toString() << endl;
        const int *cup;
        cup=A.GetCup();
        cout << A<<" Moget bit' slogena iz:"<<endl;
        for (int i=0; i<14;i++)
        {
            if (cup[i]>0)
            {
                if (dcup[i]>=100) 
                    cout<<cup[i]<<" kupur po "<<dcup[i]/100<<" rubley"<< endl; 
                else 
                    cout<<cup[i]<<" monet po "<<dcup[i]<<" kop."<< endl;
 
            }
        }
        system ("pause");
 
       return 0;
}
Это нужно?

Добавлено через 15 минут
Цитата Сообщение от Slight Посмотреть сообщение
как я должен переписать конструктор, чтобы представить сумму данным образом?
Хотя я вообще не понял это... Я лишь переделал класс чтоб он говорил как эту сумму собрать
1
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 16:26  [ТС]
Спасибо

Добавлено через 24 минуты
А если это перегрузить?
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
05.04.2014, 16:32
Цитата Сообщение от Slight Посмотреть сообщение
А если это перегрузить?
Не понял задачи
0
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 16:36  [ТС]
ну мы получается вызываем разделение только первой суммы на купюры.
Для того чтобы мы вторую сумму делили на купюры надо переписывать аналогичную функцию?

Или можно как-то компактное сделать - к примеру перегрузкой, чтобы мы могли вызывать функцию одновременно для двух сумм
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
05.04.2014, 16:40
функция const int* money::GetCup () возвращает набор купюр для любого класса.. замените
C++
1
cup=A.GetCup();
на
C++
1
cup=B.GetCup();
0
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 16:44  [ТС]
А если необходимо одновременно для двух сумм?
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
05.04.2014, 16:54
Ну можно организовать вывод внутри класса, но так лучше не делать.. (хотя вы так уже ряд функций реализовали)
0
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 36
05.04.2014, 17:14  [ТС]
просто этот вывод мне необходим для следующей задачи, связанной с банкоматом - реализация с использованием представления суммы из этого класса. Нужно чтобы все было грамотно
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
05.04.2014, 17:21
GetCup() Возвращает массив элементов с количеством купюр или монет:
[0]-5000р [1]-1000р ....[13]-1 коп и используйте их, для манипуляций и расчетов.. Это функция возвращает массивы купюр для всех классов money
а вывод на экран в рамках программы а не класса делать надо...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2014, 17:21
Помогаю со студенческими работами здесь

Создать класс Money, содержащий следующие элементы
Создать класс Money, содержащий следующие элементы: - поле «валюта» char* Currency; - поле «сумма» long Sum; - метод получения ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru