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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
sus_scorfa
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 18
#1

Вывод числа на экран в словесной форме - C++

06.01.2009, 15:00. Просмотров 2664. Ответов 11
Метки нет (Все метки)

начал изучать учебник

Динман М.И. - C++. Освой на примерах

и там в конце первой главы упражнение

звучит так

"Напишите программу которая выводит на экран словесную форму числа.
Например 143="сто сорок три", 10="десять"."


задача меня оч заинтересовала
но как решить не знаю....

задумка есть только такая:
определять сколько знаков в числе,на основание этого добавлять "словесную форму числа"....понятно что до 20 надо вбить числа вручную....в потом как хз....

уже читал про такие вещи как:

Перечислимые константы вводятся с помощью ключевого слова enum. Это обыч-
ные целые константы, которым приписаны уникальны и удобные для использования
обозначения. Примеры: enum { one=1, two=2, three=3,four=4};
enum {zero,one,two,three} – если в определении перечислимых
констант опустить знаки = и числовые значения, то значения будут приписываться по
умолчанию. При этом самый левый идентификатор получит значение 0, а каждый после-
дующий будет увеличиваться на 1.
enum { ten=10, three=3, four, five, six};
enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Satur-
day} ;

и

" #define - указывает правила замены в тексте.
#define ZERO 0.0
Означает , что каждое использование в программе имени ZERO будет заменяться
на 0.0.
"

подскажите с чего начать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2009, 15:00     Вывод числа на экран в словесной форме
Посмотрите здесь:

Вывод на экран числа от 1 до 5 следующим образом... C++
C++ вывести на экран числа,вот по примеру ,там числа и знаки изменить надо
Вывод числа в 16-ричной форме C++
C++ Разработать функцию, которая формирует стринг, что является словесной записью заданного числа
C++ Представить любое целое число словесной записью
вывод на экран (выводит числа из файла округленными) C++
Выведите массив на экран отводя на вывод каждого числа 6 символов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
06.01.2009, 15:27     Вывод числа на экран в словесной форме #2
а как глава называется? Наверняка имеет значение, ведь это же закрепление изученного
sus_scorfa
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 18
06.01.2009, 15:29  [ТС]     Вывод числа на экран в словесной форме #3
Цитата Сообщение от manfeese Посмотреть сообщение
а как глава называется? Наверняка имеет значение, ведь это же закрепление изученного
в том то и дело что это первая глава

"Основы программирования"
manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
06.01.2009, 15:39     Вывод числа на экран в словесной форме #4
Ну в первую оередь надо выявить словесные константы, например

Код
один
два
три
четыре
пять
шесть
семь
восемь
девять
десять

[B]один[/B] на [I]дцать[/I]
[B]дв[/B]е на [I]дцать[/I]
[B]три[/B] на [I]дцать[/I]
[B]четыр[/B] на [I]дцать[/I]
[B]пят[/B] на [I]дцать[/I]
[B]шест[/B] на [I]дцать[/I]
[B]сем[/B] на [I]дцать[/I]
[B]восем[/B] на [I]дцать[/I]
[B]девят[/B] на [I]дцать[/I]

[B]два[/B] [I]дцать[/I]
[B]три[/B] [I]дцать[/I]
[U]сорок[/U]
[B]пять[/B] [COLOR="Blue"]десят[/COLOR]
[B]шест[/B] [COLOR="Blue"]десят[/COLOR]
[B]сем[/B] [COLOR="Blue"]десят[/COLOR]
[B]восем[/B] [COLOR="Blue"]десят[/COLOR]
[U]девяносто[/U]

[U]сто[/U]
и т.д.

Добавлено через 2 минуты 5 секунд
да ошибся, пят десят
sus_scorfa
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 18
06.01.2009, 15:54  [ТС]     Вывод числа на экран в словесной форме #5
Цитата Сообщение от manfeese Посмотреть сообщение
Ну в первую оередь надо выявить словесные константы, например

Код
один
два
три
четыре
пять
шесть
семь
восемь
девять
десять

[B]один[/B] на [I]дцать[/I]
[B]дв[/B]е на [I]дцать[/I]
[B]три[/B] на [I]дцать[/I]
[B]четыр[/B] на [I]дцать[/I]
[B]пят[/B] на [I]дцать[/I]
[B]шест[/B] на [I]дцать[/I]
[B]сем[/B] на [I]дцать[/I]
[B]восем[/B] на [I]дцать[/I]
[B]девят[/B] на [I]дцать[/I]

[B]два[/B] [I]дцать[/I]
[B]три[/B] [I]дцать[/I]
[U]сорок[/U]
[B]пять[/B] [COLOR="Blue"]десят[/COLOR]
[B]шест[/B] [COLOR="Blue"]десят[/COLOR]
[B]сем[/B] [COLOR="Blue"]десят[/COLOR]
[B]восем[/B] [COLOR="Blue"]десят[/COLOR]
[U]девяносто[/U]

[U]сто[/U]
и т.д.

Добавлено через 2 минуты 5 секунд
да ошибся, пят десят





ну это понятно
делать можно через :

Перечислимые константы вводятся с помощью ключевого слова enum. Это обыч-
ные целые константы, которым приписаны уникальны и удобные для использования
обозначения. Примеры: enum { one=1, two=2, three=3,four=4};
enum {zero,one,two,three} – если в определении перечислимых
констант опустить знаки = и числовые значения, то значения будут приписываться по
умолчанию. При этом самый левый идентификатор получит значение 0, а каждый после-
дующий будет увеличиваться на 1.
enum { ten=10, three=3, four, five, six};
enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Satur-
day} ;


Но...вопрос в том как сделать что бы он определял любое число....

ведь если таким образом делать то можно до бесконечности вбивать словесные константы

может есть какая библиотека или функция....хз
manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
06.01.2009, 15:57     Вывод числа на экран в словесной форме #6
Ну вот самому и надо написать библиотеку. Все равно этим ктото занимается. Возьмись - будешь первым!
sus_scorfa
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 18
06.01.2009, 15:59  [ТС]     Вывод числа на экран в словесной форме #7
аххаха))))))ну ты юморист))))я еще не выехал как простые проги писать а ты говоришь библиотеку писать))))где можно прочесть как писать библиотеки?)))
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
06.01.2009, 17:58     Вывод числа на экран в словесной форме #8
Жестокая книга...
proplayer
6 / 6 / 0
Регистрация: 05.01.2009
Сообщений: 85
06.01.2009, 18:04     Вывод числа на экран в словесной форме #9
ПОчти такое я решал на программировании. Нафиг вам перечисления??? If и Mod вам поможет...
sus_scorfa
0 / 0 / 0
Регистрация: 25.12.2008
Сообщений: 18
06.01.2009, 18:43  [ТС]     Вывод числа на экран в словесной форме #10
подробнее можно...че как...
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.01.2009, 02:06     Вывод числа на экран в словесной форме #11
sus_scorfa нужны строковые литералы (символьные массивы с \0 на конце), strcat, switch старайся не юзать, вместо него if'ы, число можно перевести в символьный вид

Код
    char line[100];

    sprintf(line, "%d", 143);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2009, 05:11     Вывод числа на экран в словесной форме
Еще ссылки по теме:

Напишите программу на языке С++, которая сравнивает 2 числа и выводит на экран наибольшее из них, если числа равны C++
C++ Вывод символов в привычной форме
C++ Вывод мантиссы числа на экран
Вывести на экран сначала числа < 0, затем числа > 0 в порядке их ввода. Использовать очередь C++
C++ Подсчитать общее количество букв в словесной записи чисел от 1 до 1000

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

Или воспользуйтесь поиском по форуму:
GalaX
697 / 569 / 21
Регистрация: 18.11.2008
Сообщений: 2,152
07.01.2009, 05:11     Вывод числа на экран в словесной форме #12
нафигачил тут класс на пхп... си++ незнаю, но задача была интересная, поэтому полез в пхп
написано конечно не сказать что красиво (сам запутался в этом коде), но вроде работает:
PHP
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
$c = new CHISLO;
echo $c->get_chislo( 1151891 );
 
class CHISLO {
    private $arr = array('', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять',
                         'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать',
                         'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать');
    private $arr2 = array('', 'сто', 'двести', 'триста', 'четыреста');
    private $ar = array(
        1=>array('тысяч', 'тысяча', 'тысячи', 'тысячи', 'тысячи', 'тысяч', 'тысяч', 'тысяч', 'тысяч', 'тысяч'),
        array('миллионов', 'миллион', 'миллиона', 'миллиона', 'миллиона', 'миллионов', 'миллионов',
              'миллионов', 'миллионов', 'миллионов'),
        array('миллиардов', 'миллиард', 'миллиарда', 'миллиарда', 'миллиарда', 'миллиардов', 'миллиардов',
              'миллиардов', 'миллиардов', 'миллиардов'),
        array('триллионов', 'триллион', 'триллиона', 'триллиона', 'триллиона', 'триллионов', 'триллионов',
              'триллионов', 'триллионов', 'триллионов')
    );
 
    public function get_chislo($ch) {
        if( $ch<1000 )
            return $this->get_100($ch);
        $ch = preg_split('/(?=(\d{3})+(?!\d))/is', $ch, -1, PREG_SPLIT_NO_EMPTY);
        $ch = array_reverse($ch);
        $result[] = $this->get_100($ch[0]);
        for($i=1; $i<count($ch); $i++) {
            @$result[] = $this->get_100($ch[$i]) .' '. $this->ar[$i]{$ch[$i]%10};
        }
        $result[1] = str_replace('один', 'одна', $result[1]);
        $result[1] = str_replace('два', 'две', $result[1]);
        return join(' ', array_reverse($result));
    }
    private function get_100($ch) {
        $c1 = (int)($ch / 100);
        $c2 = $ch % 100;
        if( $c1<5 )
            $result = $this->arr2[$c1];
        else 
            $result = $this->arr[$c1] . 'сот';
        return @$result .' '. $this->get_10($c2);
    }
    private function get_10($ch) {
        $c1 = (int)($ch / 10);
        $c2 = $ch % 10;
        if( $ch<20 ) {
            $result = $this->arr[$ch];
        } else if( $ch<40 ) {
            $result = $this->arr[$c1] . 'дцать';
        } else if( $ch<50 ) {
            $result = 'сорок';
        } else if( $ch<90 ) {
            $result = substr( $this->arr[$c1], 0, -1 ) . 'десят';
        } else if( $ch<100 ) {
            $result = 'девяносто';
        }
        if( $ch>20 && $c2!=0 )
            $result .= ' ' . $this->arr[$c2];
        return $result;
    }
}
Yandex
Объявления
07.01.2009, 05:11     Вывод числа на экран в словесной форме
Ответ Создать тему
Опции темы

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