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

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

Войти
Регистрация
Восстановить пароль
 
DMGR-
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 101
#1

Запись числа прописью, нужна доработка - C++

05.06.2014, 12:31. Просмотров 438. Ответов 3
Метки нет (Все метки)

Добрый день, дана задача: запись числа прописью
Помогите доработать её, нужно вводить числа с клавиатуры и вывести результат в консоли
Также нужно выводить копейки , пример 600.20 = шестьсот рублей двадцать копеек

Вот код с чтением из файлов:

Код:

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <fstream>
using namespace std;
 
 
const string name_penz[3] = {"копейка","копейки" ,"копеек"};
const string name_ruble[3] = {"рубль","рубля" ,"рублей"};
const string hundreds[9] = {"сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"};
const string dozens[8] = {"двадцать","тридцать","сорок","пидесят","шесдесят","семьдесят","восемьдесят","дявяносто"};
const string unit[9] = {"один","два","три","четыре","пять","шесть","семь","восемь","девять"};
const string unit_penz[9] = {"одна","две","три","четыре","пять","шесть","семь","восемь","девять"};
const string dozens_one[10] = {"одинадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестьнадцать","семьнадцать","восемьнадцать","девятьнадцать",""};
int main()
{
    char s[6];
    string out;
    fstream file,file2;
 
    file.open("output.txt",ios::out);
    cout.rdbuf(file.rdbuf());
 
    file2.open("input.txt", ios::in);
    cin.rdbuf(file2.rdbuf());
    file2 >>s;
    int len = strlen(s);
    int end = 1;
    int number = len;
    for (int j = 0; j < len; j++)
    {
        if(s[j] == ',')
        {
            number = j;
        }
        end = 2;
    }
 
    
    int i = 0;
    if(number == 2 && s[0] == '1')
    {
            string tmp;
        tmp.push_back(s[0]);
        tmp.push_back(s[1]);
        out = dozens_one[atoi(tmp.c_str())- 10 - 1];
        end = 2;
        out += " ";
    }
 
    else
    {
        
        if(number == 3)
        {
            out += hundreds[s[i] - '0' - 1]  ;
            out += " ";
            i++;
        }
        if(number >= 2)
        {
            out += dozens[s[i] - '0' - 2];
            out += " ";
            i++;
        }
        if(number >= 1)
        {
            out += unit[s[i] - '0' - 1];
            out += " ";
            i++;
        }
        int end_c = s[i - 1] - '0';
        if (end_c == 1)
        {
            end = 0;
        }
        else if (end_c == 1 ||  end_c == 2 || end_c == 3 || end_c == 4 )
        {
            end = 1;
        }
        else
        {
            end = 2;
        }
        
    }
    out += name_ruble[end];
    out += " ";
///////////////////////////////////////////////////////////
    i = number+1;
    number = len - i ;
    if (number <= 0);
    else if(number == 2 && s[i-1] == '1')
    {
        string tmp;
        tmp.push_back(s[i-1]);
        tmp.push_back(s[i]);
        out = dozens_one[atoi(tmp.c_str())- 10 - 1];
 
    }
 
    else
    {
 
        if(number == 3)
        {
            out += hundreds[s[i] - '0' - 1]  ;
            out += " ";
            i++;
        }
        if(number >= 2)
        {
            out += dozens[s[i] - '0' ];
            out += " ";
            i++;
        }
        if(number >= 1)
        {
            out += unit_penz[s[i] - '0' - 1];
            out += " ";
            i++;
        }
        int end_c = s[i - 1] - '0' ;
        if (end_c == 1)
        {
            end = 0;
        }
        else if (end_c == 1 ||  end_c == 2 || end_c == 3 || end_c == 4 )
        {
            end = 1;
        }
        else
        {
            end = 2;
        }
    
        out += name_penz[end];
        out += " ";
        
    }
 
    cout << out.c_str();
 
    system("pause");
    return 0;
}
Добавлено через 10 часов 45 минут
хелп, ребят
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2014, 12:31     Запись числа прописью, нужна доработка
Посмотрите здесь:

Массив структур. Нужна доработка:) - C++
1.Запрос сразу нескольких заказов.(с горем пополам я сделала этот пункт и поняла ,что абсолютно не понимаю массивы и структуры, а работу...

Вывод числа прописью - C++
Напишите программу, которая выводит на словесную форму числа. Например, 143= «Сто сорок три», 10= «Десять».

Вывод числа прописью - C++
Составить программу, которая читает натуральное число N в десятичном представлении (N &lt; 10000), а на выходе выдает это же число в...

Вывод числа прописью - C++
Разработать приложение, позволяющее при вводе '352', выводить — 'три пять два'. Не понимаю в С++, прошу помощи.

Матрица NxM. Упорядочить. Есть код, нужна доработка. - C++
Дан массив NxM. Упорядочить по возрастанию. Есть код, нужна доработка.

Программа, выводящая прописью чётные числа массива. - C++
В синтаксисе ошибок нет. При вводе кол-ва элементов выдаёт: &quot;Необработанное исключение в &quot;0x5561d2f3 (msvcr100d.dll)&quot; в &quot;test5.exe&quot;:...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ogniel
24 / 24 / 1
Регистрация: 30.05.2011
Сообщений: 127
05.06.2014, 13:17     Запись числа прописью, нужна доработка #2
есть ли ограничение на количество знаков в водимом числе?
просто во время учебы была похожая задачка. решал я её через cause, предварительно разбив число на сотни/десятки/единицы
8-BITOV
535 / 477 / 86
Регистрация: 05.05.2014
Сообщений: 1,101
05.06.2014, 14:32     Запись числа прописью, нужна доработка #3
Цитата Сообщение от DMGR- Посмотреть сообщение
хелп, ребят
Поищи по форуму. Задача решалась неоднократно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2014, 15:15     Запись числа прописью, нужна доработка
Еще ссылки по теме:

Вывести остаток от деления натурального числа на пять прописью - C++
1. Задано натуральное число. Определить остаток от деления на пять и вывести на экран запись вида «Остаток равен …», подставив на место …...

составить программу для представления введённого действительного числа прописью - C++
составить программу для представления введённого действительного числа прописью. Максимальное количество разрядов –6, Максимальное...

Нужна програма, определяющая корни числа - C++
Нужна програма штоб добивать корени из числа

Запись числа в массив - C++
Доброе время суток. Помогите пожалуйста решить задачку. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int...

Запись числа в массив - C++
Есть массив ac; Нужно записать число интовое число в массив, как это сделать? :wall:

Запись числа дробью - C++
Добрый день! Работаю с FreeFem++ для решения задач методом конечных элементов. Оно работает на ядре C++. В одной из предложенных программ...


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

Или воспользуйтесь поиском по форуму:
DMGR-
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 101
05.06.2014, 15:15  [ТС]     Запись числа прописью, нужна доработка #4
не более 2 знаков после десятичной точки
Yandex
Объявления
05.06.2014, 15:15     Запись числа прописью, нужна доработка
Ответ Создать тему
Опции темы

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