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

Создать структуру Money для работы с денежными суммами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
NewMoon
Сообщений: n/a
16.08.2010, 16:06     Создать структуру Money для работы с денежными суммами #1
Люди, помогите, пожалуйста!
Есть задача:
Создать структуру Money для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для рублей и типа unsigned int — для копеек. Дробная часть (копейки) при выводе на экран должна быть отделена от целой части запятой. Реализовать сложение сумм.

Вот примерный набросок программки, но во время выполнения выдает ошибку:

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
 
#pragma hdrstop
#pragma argsused
#include <conio.h>
#include <iostream.h>
struct Money{
 long roubles;
      unsigned int copecks;
      float wholeSum;
      };
      void init(Money* arg)
      {
           arg->roubles = (int)arg->wholeSum;
           arg->copecks = (int)((arg->wholeSum - (int)arg->wholeSum) * 100);
      }
             void Read(Money* arg)
             {
             cout<<"vvedite summu ";
                  cin >>arg->wholeSum;
                  init(arg);
             }
             void Display(Money* arg)
             {
                  
                  cout << arg->roubles << ",";
                  if (arg->copecks < 10)
                  {
                              cout << "0";
                  }
                  cout << arg->copecks;
                 
             }
             Money* Sum (Money* cur)
             {
                    Money* arg;
                    Read(arg);
                    Money* temp;
                    temp->wholeSum = cur->wholeSum + arg->wholeSum;
                    init(temp);
                    return temp;
             }
           
int main(int argc, char* argv[])
{
Money* other;
Money* rez;
Read(other);
rez=Sum(other);
Display(rez);
getch();
        return 0;
}
Добавлено через 42 минуты
Не молчите пожалуйста, помогите хоть чем-нить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2010, 16:06     Создать структуру Money для работы с денежными суммами
Посмотрите здесь:

C++ Создать класс Money для работы с денежными суммами
C++ Разработать структуру и функции для работы с шестнадцатиричными числами
C++ Создать структуру для работы с массивом
C++ Создать базовый класс - Array и производный класс - Money для работы денежной суммы
C++ Класс Money, перегрузка арифметических операций для работы с денежным форматом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.08.2010, 16:28     Создать структуру Money для работы с денежными суммами #2
Цитата Сообщение от NewMoon Посмотреть сообщение
Не молчите пожалуйста, помогите хоть чем-нить
Так сойдёт?
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
#include <iostream>
#include <iomanip>
#include <limits>
 
class Money {
    long int m_nRoubles;
    unsigned int m_nCopecks;
    void checkOver(){
        int sign = ( m_nRoubles < 0 ) ? -1 : 1;
        m_nRoubles += m_nCopecks / 100 * sign;
        m_nCopecks %= 100;
    }
 
public:
    Money() : m_nRoubles(0), m_nCopecks(0) {}
    Money(long int r, unsigned int c) : m_nRoubles(r), m_nCopecks(c) {
        checkOver();
    }
    Money operator + (const Money& another) const {
        Money result(*this);
        result.m_nCopecks += another.m_nCopecks;
        result.m_nRoubles += another.m_nRoubles;
        result.checkOver();
        return result;
    }
 
    friend std::ostream& operator << (std::ostream& ost, const Money& m){
        ost << m.m_nRoubles << '.' << std::setfill('0') << std::right << std::setw(2) << m.m_nCopecks;
        return ost;
    }
    friend std::istream& operator >> (std::istream& ist, Money& m){
        ist >> m.m_nRoubles;
        ist.ignore(1);
        ist >> m.m_nCopecks;
        m.checkOver();
        return ist;
    }
};
 
int main(){
    Money a, b;
    char c;
 
    while ( true ){
        std::cout << "\nFirst value:\t";
        std::cin >> a;
        std::cout << "Second value:\t";
        std::cin >> b;
        std::cout << "Sum:\t\t" << ( a + b ) << std::endl;
 
        std::cout << "Continue? (y/n): ";
        std::cin >> c;
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        if ( c != 'y' && c != 'Y' )
            break;
    }
 
    return 0;
}
NewMoon
Сообщений: n/a
16.08.2010, 16:38     Создать структуру Money для работы с денежными суммами #3
мне нужно именно через структуру
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.08.2010, 16:44     Создать структуру Money для работы с денежными суммами #4
Цитата Сообщение от NewMoon Посмотреть сообщение
мне нужно именно через структуру
Класс от структуры отличается только методом доступа по умолчанию к членам:
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
struct Money {
private:
    long int m_nRoubles;
    unsigned int m_nCopecks;
    void checkOver(){
        int sign = ( m_nRoubles < 0 ) ? -1 : 1;
        m_nRoubles += m_nCopecks / 100 * sign;
        m_nCopecks %= 100;
    }
 
public:
    Money() : m_nRoubles(0), m_nCopecks(0) {}
    Money(long int r, unsigned int c) : m_nRoubles(r), m_nCopecks(c) {
        checkOver();
    }
    Money operator + (const Money& another) const {
        Money result(*this);
        result.m_nCopecks += another.m_nCopecks;
        result.m_nRoubles += another.m_nRoubles;
        result.checkOver();
        return result;
    }
 
    friend std::ostream& operator << (std::ostream& ost, const Money& m){
        ost << m.m_nRoubles << '.' << std::setfill('0') << std::right << std::setw(2) << m.m_nCopecks;
        return ost;
    }
    friend std::istream& operator >> (std::istream& ist, Money& m){
        ist >> m.m_nRoubles;
        ist.ignore(1);
        ist >> m.m_nCopecks;
        m.checkOver();
        return ist;
    }
};
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
16.08.2010, 16:59     Создать структуру Money для работы с денежными суммами #5
Я, конечно, могу ошибаться, но структура не позволяет внутри себя писать методы. Или нет?
В любом случае, у тебя больше на класс похоже.
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
struct money
{
  long roubles;
  unsigned int copecks;
};
 
int main()
{
    money rr[100],rsum;
    char ch;
    int n=0;
 
    cout << "Counts: "; cin >> n;
    for (int i=0;i<n;i++)
    {
        cout << "Rubles,copecks: "; 
        cin >> rr[i].roubles >> ch >> rr[i].copecks;
    }
    
    for(int j=0;j<n;j++)
    {
        rsum.copecks += rr[j].copecks;
        //потом тут убираем все лишние копейки превращая их в рубли
        rsum.roubles+=rr[j].roubles;
    }
    
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.08.2010, 17:01     Создать структуру Money для работы с денежными суммами #6
Цитата Сообщение от half-node Посмотреть сообщение
Я, конечно, могу ошибаться, но структура не позволяет внутри себя писать методы. Или нет?
В любом случае, у тебя больше на класс похоже.
Так было в Си. В С++ различия между ними исчерпываются моим предыдущим постом.

Не по теме:

И не у меня, а у easybudd

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.08.2010, 17:37     Создать структуру Money для работы с денежными суммами #7
Цитата Сообщение от NewMoon Посмотреть сообщение
мне нужно именно через структуру
Экий Вы капризный... Ну переделайте... К тому же мой вариант всё равно не правильно считает. Косяк кроется в беззнаковом представлении копеек. Нужно делать, чтобы либо копейки тоже знак имели, либо дополнительное поле sign в структуру добавлять - иначе -1.50 + 0.50 неправильно посчитается...
Unfaze
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 2
13.12.2013, 14:47     Создать структуру Money для работы с денежными суммами #8
easybudda, а не подскажеш как сделать чтоб программа вычитала
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.12.2013, 14:54     Создать структуру Money для работы с денежными суммами #9
Цитата Сообщение от Unfaze Посмотреть сообщение
а не подскажеш как сделать чтоб программа вычитала
Добавить соответствующую функцию или метод класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 14:56     Создать структуру Money для работы с денежными суммами
Еще ссылки по теме:

C++ описать структуру, создать класс, в котором описать 3 поля: два простых типа и массив структур. Создать в классе 4 функции работы с массивом структур
Создать класс Money C++
Создать структуру Абитуриент и написать программу для работы с ней C++

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

Или воспользуйтесь поиском по форуму:
Unfaze
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 2
13.12.2013, 14:56     Создать структуру Money для работы с денежными суммами #10
а поточнее можно?) а то не очень силен в этом)
Yandex
Объявления
13.12.2013, 14:56     Создать структуру Money для работы с денежными суммами
Ответ Создать тему
Опции темы

Текущее время: 20:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru