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

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

Войти
Регистрация
Восстановить пароль
 
Hide
Сообщений: n/a
#1

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

25.02.2013, 14:09. Просмотров 434. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2013, 14:09     Лафоре,задача про денежный тип
Посмотрите здесь:

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

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

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

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

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

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

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

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

Задача из книги Р.Лафоре содержит ошибки, исправьте пожалуйста - C++
#include &lt;iostream&gt; using namespace std; int main() { int age; for(int j=0;j&lt;4;j++) { cout&lt;&lt;&quot;BBedite Bo3pacT:&quot;; ...

Сокращение программы, приводит к другому результату. Лафоре 3 глава, 3 задача - C++
Добрый день. Столкнулся с непонятным свойством. При сокращении программы, выводится другой результат. Вот программа написанная мной,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 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;
    }
Ответ Создать тему
Опции темы

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