1 | ||||||
Обмен опытом или как бы это сделали бы Вы!!07.01.2011, 05:09. Показов 2086. Ответов 17
Метки нет (Все метки)
Здравствуйте уважаемые форумчане!
Дана задача: Создайте класс ,напишите метод для преобразования числа типа long double денежную строку представляющее это число.Для начала Вам нужно проверить , что значение long double не очень большое. Мы предполагаем что Вы не будите пытаться преобразовать число , больше чем 9 999 999 999 999 990.00 !Затем преобразуем long double в строку (без знака $ и запятых), хранящуюся в памяти , используя объект ostrstream . Получившаяся строка должна быть помещена в буфер, называющийся допустим ustring. Затем Вам нужно создать другую строку , начинающуюся с $, далее копируем цифру за цифрой из строки ustring , начиная с лева и вставляя запятые сначала сразу после первой далее каждые три цифры!Так же вам надо подавлять нули в начале строки.Например Вы должны вывести $1,123,43.67, а не $0 000 000 112 343.67. Напишите функцию main() для тестирования методов класса путем многократного ввода пользователем чисел типа long double и вывода результата в виде денежной строки! ///////////////////////////////////////////////////////////////////////////////////////////////// Я её сделал но на мой взгляд не очень красиво!Вот код:
Как бы это сделали бы Вы!ТОЛЬКО БОЛЬШАЯ ПРОСЬБА я ещё только учусь и для решения этой задачи я пришёл только лишь со знаниями о классах, массивах,функциях.Указатели, потоки, перегрузки и тд еще не изучал! Если можно пишите тоже по простому!Да кстати код полностью рабочий, писал на оболочке С++ 6.0
0
|
07.01.2011, 05:09 | |
Ответы с готовыми решениями:
17
Обмен опытом или просто диалог с программистом Как бы вы сделали обмен между потоками для СОМ порта Как это сделали? Как это они так сделали? |
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
|
||||||
07.01.2011, 13:34 | 2 | |||||
Сообщение было отмечено как решение
Решение
Класс еще хранит некую очередь из лонг-даблов?
Вам надо серьезно поработать над стилем. Имейте в виду, что крайне полезно разделять ввод данных и обработку данных. Например, не стоит делать класс, который использует ввод/вывод данных, если этот класс не предназначен именно для ввода/вывода данных. Не стоит использовать метки по огромному количеству причин, например, потому, что это затрудняет чтение программы. Условных переходов всегда достаточно. Если абстрагироваться от указанных технологий, я бы реализовал задачу совсем по-другому.
3
|
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
|
||||||
07.01.2011, 15:42 | 3 | |||||
1
|
07.01.2011, 16:53 [ТС] | 4 |
Большое спасибо что вы посмотрели эту тему! Но есть маленькая просьба Я ЖЕ ПРОСИЛ РЕАЛИЗОВЫВАТЬ КОД НА С++! Раньше как я слышал в институтах перед изучением С++ изучали С! Но теперь этого не делают так как С++ обошел С по многим параметрам и возможностям(хотя иногда проигрывает по скорости выполнения)! В итоге мне не известно для чего вы перед конструктором пишете explicit!Так же я писал в самом начале что не изучал ещё указатели!Если Вам не трудно пожалуйста напишите программу чисто не С++
без смешивания языков!(Заместо #define const ну и так далие) ДА К СТАТИ КЛАСС ДОЛЖЕН ХРАНИТЬ ЗНАЧЕНИЕ НЕ ИЗ LONG DOUBLE А ИЗ УЖЕ ПЕРЕВЕДЕНОГО ЗНАЧЕНИЯ В CHAR MAS[]
0
|
37 / 36 / 4
Регистрация: 08.08.2010
Сообщений: 162
|
|
07.01.2011, 17:06 | 5 |
Это и есть С++
excplict гарантирует неиспользование конструктора в качестве оператора приведения типа. Это чисто C++ная фишка. Дефайн это тоже C++
1
|
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
|
|||||||||||
07.01.2011, 17:17 | 6 | ||||||||||
Препроцессорные директивы в C/C++ (#include, #define и прочее)
И как вы собираетесь использовать динамический массив без указателей? Или хотите сразу создать длиной в 24 символа ?
1
|
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
|
|
07.01.2011, 17:52 | 7 |
Я писал для С++ стандарта 99 года. ) На чистом С классов нет совсем.
Это указание компилятору не использовать такой конструктор для конвертации типов. Без смешивания языков никак. Создатель языка С++ сам определяет свое детище как "лучший С" (better C). Большая часть языка C++ есть и в С. Да, я думал о варианте кэширования переменной в виде посимвольного представления числа, но решил, что подобный выпендреж вам будет не понятен. ) И да, там бы я тоже использовал динамическое выделение памяти. Вообще, если не брать С++ модуль strings, без указателей и динамической памяти в такой программе обойтись довольно сложно. Кстати, в вашем коде указатели используются. Не по теме: Что за звездочки в цитате кода?!
1
|
07.01.2011, 17:54 [ТС] | 8 |
Дефайн это тоже C++[/QUOTE] Ну не знаю допустим Лафоре пишет
константы можно определять с помошью директивы процессора #difine , не смотря на то что такой способ не рекомендуется употреблять в С++ . Деректива #difine не делает различий между числами и символьными строками.Такая конструкция долгое время была популярна в языке С . Однако отсутствие типа у подобных переменных может привести к некорректной работе программы , и по этому даже в С был предложен способ, использующий слово const.
0
|
vx5
|
07.01.2011, 17:56
#9
|
0
|
07.01.2011, 18:10 [ТС] | 10 |
Да вы правы используется указатель для того чтобы можно было вывести русский
но это нам дали в институте но пока мы не проходили сами указатели как таковые!Это просто готовый код который я еще не знаю. Добавлено через 10 минут Да и ещё один вопрос как например предотвратить выход за приделы допустимых значений переменных!? Например пользователь вводит число любого типа (double,int long double) а я должен проверить не указал ли пользователь число которое больше диапазона допустимых значений! Если это double то не вышел ли он за приделы 1.7*10^-308 точность 15?Есть ли встроенные функции для этих целей?
0
|
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
|
|||||||||||
07.01.2011, 18:19 | 11 | ||||||||||
по мне единственное неудобство, которое может быть от дефайна в больших программах связано с отладкой.
Определяя переменную вы определяете ей ячейку в памяти, а здесь вы даете инструкцию компилятору. Это разные вещи и каждый из этих способов имеет право на существование З.Ы: Хотя в С++ глобальные константы, кажется, реализуются тоже без выделения памяти. Добавлено через 4 минуты и если уж пошло про смесь языков, то это скорее у вас:
0
|
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
|
|
07.01.2011, 18:35 | 13 |
0
|
07.01.2011, 18:45 [ТС] | 14 | |||||
это смотря какие методы класса string вы использовали. Вот например
0
|
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
|
|
07.01.2011, 18:53 | 15 |
у меня все работает
0
|
191 / 175 / 12
Регистрация: 04.09.2010
Сообщений: 656
|
|
07.01.2011, 18:59 | 17 |
видимо у вас проблема в настройке форточки как видите, на линуксе все прекрасно работает, даже без перегрузки оператора.
Добавлено через 52 секунды я просто скопировал ваш код и вырезал из него виндосовскую ересь и на картиночку можно нажать - она увеличится
1
|
07.01.2011, 19:02 [ТС] | 18 |
спасибо буду знать!
0
|
07.01.2011, 19:02 | |
07.01.2011, 19:02 | |
Помогаю со студенческими работами здесь
18
Как такое сделали и насколько это законно Каждую секунду по 1-3 пользователю - как они это сделали? А как это вот так сделали ? (ресурс подчиненный XAML, скриншот) Обмен опытом об iptables Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |