0 / 0 / 0
Регистрация: 16.12.2015
Сообщений: 2
1

Лафоре,задача про денежный тип

25.02.2013, 14:09. Показов 2331. Ответов 1
Метки нет (Все метки)

Вот задачка:
Одним из недостатков C++ является отсутствие для бизнес-программ встроенного типа для денежных значений, такого, как $173 698 001,32. Такой денежный тип должен иметь возможность для хранения числа с фиксированной десятичной точкой точностью около 17 знаков, которого было бы достаточно для хранения национального долга в долларах и цен- тах. К счастью, встроенный тип C++ long double имеет точность 19 цифр, поэтому мы можем использовать его как базисный для класса money, даже используя плавающую точку. Однако нам нужно будет добавить возможность ввода и вывода денежных значений с предшествующим им знаком доллара и разделенными запятыми группы по три числа: так проще читать большие числа. Первым делом при разработке такого класса напишем метод mstold(), который принимает денежную строку, то есть строку, представляющую собой некоторое количество денег типа
"$1,234,567,890,123.99"
в качестве аргумента и возвращает эквивалентное ее значению число типа long double.

Собств-но вопрос: пытаюсь сделать первую часть, когда при выводе число будет разделяться на группы по три через запятую, вроде бы все работает, но хотелось бы реализовать через bool(нахождение точки true, иначе false), нашел, что то подобное(тут на форуме) но не разобрался. Как можно все это сделать?не могу понять,как найти эту точку в строке и разделить значения до и после нее(с помощью типа bool),т.к. в том виде что написал код выглядит совсем ужасно.
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
#include "StdAfx.h"
#include <iostream>
#include <string>
class money
{
private:
    long double mone;
    std::string capital;
public:
    money():mone(0),capital("Default")
    {}
    void put_on_money()
    {
        int x=0;
        std::cout << "\nEnter the string: $";
        std::cin >> capital;
        int lenght=capital.length(); // проверяем длину строки
        int dot=capital.find('.'); // ищем точку в строке
        for (int j=dot;j>0;j--)
        {
            x++; // через каждые три числа ставится запятая
            if(!(x%3))
            {
                capital.insert(j-1,",");
            }
        }
        if (!(dot%3)) // если dot%3==0 то ставит запятую в самом начале
        {
            capital.erase(0,1); // убираем ее
        }
        for (int j=dot;j<lenght;j++) // считает 19 знаков после точки
        {
            int max_lenght=dot+19;
            if(j>max_lenght) // все что после 19 знаков, стираем
            {
                capital.erase(j,1); 
            }
        }
    }
    void display()
    { std::cout << "Your string: $" << capital << std::endl; }
};
int main()
{
    money s1;
    s1.put_on_money();
    s1.display();
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2013, 14:09
Ответы с готовыми решениями:

Задача из Лафоре
Для разъяснения действия наших доморощенных указателей мы смоделируем память компьютера с помощью...

Задача из Лафоре
есть задачка из Лафоре -&gt; Модифицируйте класс bMoney из упражнения 12 главы 7 «Массивы и...

Лафоре задача по классам
Задача из книги лафоре по классам №7: нужно написать программу используя классы для ввода и вывода...

Не компилируется задача из Лафоре
Помогите пожалуйста разбораться почему компилятор ругается: 1&gt;L.obj : error LNK2019: unresolved...

1
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
25.02.2013, 23:08 2
Hide, посмотри, может пригодится

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    money( std:: string summ )
    {
        using std:: string; using std:: cout; using std:: find; using std:: remove;   
 
        string:: iterator dot_index = find( summ.begin(), summ.end(), '.' );
        // получаем чистую циферную строку для долларов:
        string dollars( summ.begin(), dot_index ); // взяли все, что до точки
        dollars.erase( remove( dollars.begin(), dollars.end(), ',' ) ); // убираем запятые
 
        string cents = "";
        if( dot_index != summ.end() )   {           
            // получаем чистую циферную строку для центов:
            cents = string( dot_index + 1, summ.end() ); // взяли все, что после точки
        }
        
        std:: cout << dollars << std:: endl;
        std:: cout << cents << std:: endl;
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2013, 23:08
Помогаю со студенческими работами здесь

Лафоре. Глава 11. Задача 2
Решал задачку из учебника - Лафоре. Глава 11. Задача 2. Вот код #include &lt;iostream&gt; #include...

Очередь (задача из Лафоре)
Задача 9 из Лафоре: Надо написать класс queue, имеющий два метода: put() для помещения элемента в...

Задача 7 главы 7 из книги Р. Лафоре. Строки
Добрый день! Недавно начал изучать С++ по, наверное, уже всем поднадоевшему, учебнику Роберта...

Правильное ли решение задачи? Лафоре. 3 глава 9 задача
Представьте, что вы собираетесь пригласить к себе шестерых гостей, но за вашим столом могут...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru