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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
NewMoon
Сообщений: n/a
#1

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

16.08.2010, 16:06. Просмотров 1649. Ответов 9
Метки нет (Все метки)

Люди, помогите, пожалуйста!
Есть задача:
Создать структуру 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++
Помогите решить:-[ Создать класс Money для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для...

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

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

Создание класса для работы с денежными суммами - C++
Создать класс Money для работы с денежными суммами. Сумма должна быть представлена массивом, каждый элемент которого - десятичная цифра....

Определить абстрактный класс для работы с денежными суммами - C++
Ребят, тут такое дело, завис над задачей: Определить абстрактный класс Сurrency для работы с денежными суммами. Определить в нем методы...

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

9
easybudda
Модератор
Эксперт CЭксперт С++
9663 / 5612 / 952
Регистрация: 25.07.2009
Сообщений: 10,775
16.08.2010, 16:28 #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;
}
0
NewMoon
Сообщений: n/a
16.08.2010, 16:38 #3
мне нужно именно через структуру
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
16.08.2010, 16:44 #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;
    }
};
1
half-node
21 / 18 / 3
Регистрация: 12.08.2010
Сообщений: 206
16.08.2010, 16:59 #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;
    }
    
}
1
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
16.08.2010, 17:01 #6
Цитата Сообщение от half-node Посмотреть сообщение
Я, конечно, могу ошибаться, но структура не позволяет внутри себя писать методы. Или нет?
В любом случае, у тебя больше на класс похоже.
Так было в Си. В С++ различия между ними исчерпываются моим предыдущим постом.

Не по теме:

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

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

Создать структуру для работы с массивом - C++
пробую написать программу с использованием структуры.. Создать структуру для работы с массивом. Данные структуры: массив N(10)....

Создать структуру окружность и методы для работы с ней - C++
Создайте структуру Окружность с элементами х0, у0- координаты центра, R -радиус. Для N окружностей вычислить длину каждой окружности и...

Создать структуру Абитуриент и написать программу для работы с ней - C++
Прошу помочь с решением задачи. Опишите,используя структуру записи,конкурс на поступление(фамилия абитуриента и кол-во набранных...

Класс Money, перегрузка арифметических операций для работы с денежным форматом - C++
//Ñîçäàéòå êëàññ Money, â êîòîðîì ïåðåãðóçèòå àðèôìåòè÷åñêèå //îïåðàöèè äëÿ ðàáîòû ñ äåíåæíûì ôîðìàòîì. Ïåðåãðóçèòå äâà îïåðàòîðà ...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
13.12.2013, 14:56
Ответ Создать тему
Опции темы

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