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

Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Конвертер текстового файла http://www.cyberforum.ru/cpp-beginners/thread439174.html
Добрый день!!! Простите за наглость... Помогите пожалуйста написать программу-конвертер текстовых файлов из dos в windows и обратно. С командной строки должно вводится направление /d или /w. Я очень мало в этом понимаю. Заранее спасибо!!!
C++ Проблема с libmms - ошибка при компиляции. Здравствуйте. Уже который день не могу разобраться с упомянутой в заголовке библиотекой, а именно: пишу примерно такой тестовый код #include <iostream> #include <libmms/mms.h> int main() { mms_t *stream; char mms_link="mms://audio.rfn.ru/radiorus/audio/710/90.asf"; stream=mms_connect(0, 0, mms_link, 128); http://www.cyberforum.ru/cpp-beginners/thread439169.html
C++ Привет. Как можна найти с даного примера умножение элементов массива с четными номерами?
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <iostream> using namespace std; int main(int argc, _TCHAR* argv)
C++ Начало DEV С++
Здравствуйте, подскажите где ошибка? Задание Даны действительные числа х, у . Если х, у отрицательные то каждое значение заменить его модулем; если отрицательное только одно из них, то оба значения увеличить на 0.5; если оба значения не отрицательные и ни одно из них не принадлежат отрезку , то оба значения уменьшить в 10 раз; в остальных случаях х, у оставить без изменения. Решение ...
C++ Запись текста в файл http://www.cyberforum.ru/cpp-beginners/thread439138.html
Нужно составить прогрумма которая создает файл и записывает в него текст. Программа не записывает в файл текст после пробела, помогите пожалуйста. char name; char text; cout<<"vvedite put' i im9 faila:\n"; cin>>name; ofstream out(name); cout<<"vvedite text:\n"; cin>>text; out<<text; out.close();
C++ allocator std::map Подскажите вопрос, есть тестовое задание: Написать allocator для std::map, располагающий элементы контейнера последовательно в памяти. Подскажите где про это почитать и разъясните по-возможности, что это вообще такое (std::map я вкурсе что это контейнер и как с ним работать) в ступор вводит allocator подробнее

Показать сообщение отдельно
reisal78
 Аватар для reisal78
603 / 516 / 119
Регистрация: 28.04.2013
Сообщений: 1,451
24.08.2013, 17:34     Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++"
Мой вариант решения Глава 7, упражнение 7.
7. Одним из недостатков С++ является отсутствие для бизнес-программ встроенного типа для денежных значений, такого, как $173 698 001,32. Такой денежный тип должен иметь возможность для хранения числа с фиксированной десятичной точкой точностью около 17 знаков, которого было бы достаточно для хранения национального долга в долларах и центах. К счастью, встроенный тип С++ long double имеет точность 19 цифр, поэтому мы можем использовать его как базисный для класса money, даже используя плавающую точку. Однако нам нужно будет добавить возможность ввода и вывода денежных значений с предшествующим им знаком доллара и разделенными запятыми группы по 3 числа; так проще читать большие числа. Первым делом при разработке такого класса напишем метод mstold(), который принимает денежную строку, то есть стоку, представляющую собой некоторое количество денег типа «$1,234,567,890,123.99» в качестве аргумента и возвращает эквивалентное ее значению число типа long double.
Вам нужно будет обработать денежную строку как массив символов и, просматривая ее символ за символом, скопировать из нее только цифры (0-9) и десятичную точку в другую строку. Игнорируя все остальное, включая знак $ и запятые. Затем вы можете использовать библиотечную функцию _atold() (заметим, что здесь название функции начинается с символа подчеркивания – заголовочные файлы STDLIB.H или MATH.H) для преобразования новой строки к числу типа long double. Предполагаем, что денежно значение не может быть отрицательным. Напишите функцию main() для проверки метода mstiod(), которая несколько раз получает денежную строку от пользователя и выводит соответствующее число типа long double.
Кликните здесь для просмотра всего текста

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 <iostream>
#include <sstream> // нужен для stringstream
#include <string>
 
using namespace std;
 
class money
{
public:
    money()
    {}
    void getMoney()
    {
        getline(cin, strMoney);
    }
    double mstiod(); 
 
private:
    string strMoney; // строка получаемая от пользователя
    long double dblMoney; // То что должно получиться на выходе ) 
};
 
 
int main()
{setlocale (LC_ALL,"");
 
money Mon;
 
cout << "Введите сумму: ";
Mon.getMoney();
cout << Mon.mstiod() + 100 << endl; // проверка сложением =) 
 
 
    
return 0;
}
double money::mstiod()
{   unsigned int tmp(0);
    tmp = strMoney.find_first_not_of("1234567890."); //ищу номер символа которого не может быть в типе long double..
 
    while (tmp < strMoney.size() ) //повторяю до тех пор, пока ненужные мне символы не закончаться
        {
            strMoney.erase(tmp, 1); // и удалаю его...
            tmp = strMoney.find_first_not_of("1234567890."); // и опять ищу =)
        }
    //Функция _atold() рекомендрванная в книге не работает. Вот такой вариант вполне рабочий.
    stringstream tmpstr(strMoney);
    tmpstr >> dblMoney;
    return dblMoney;
}
 
Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru