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

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

Восстановить пароль Регистрация
 
DMGR-
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 101
05.06.2014, 12:31     Запись числа прописью, нужна доработка #1
Добрый день, дана задача: запись числа прописью
Помогите доработать её, нужно вводить числа с клавиатуры и вывести результат в консоли
Также нужно выводить копейки , пример 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++
C++ Программа, выводящая прописью чётные числа массива.
Матрица NxM. Упорядочить. Есть код, нужна доработка. C++
. Дана строка, изображающая десятичную запись целого положительного числа. Вывести строку, изображающую двоичную запись этого же числа C++
C++ Дана строка. Определить, представляет ли она собой запись целого числа или запись дробного числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ogniel
 Аватар для Ogniel
24 / 24 / 1
Регистрация: 30.05.2011
Сообщений: 127
05.06.2014, 13:17     Запись числа прописью, нужна доработка #2
есть ли ограничение на количество знаков в водимом числе?
просто во время учебы была похожая задачка. решал я её через cause, предварительно разбив число на сотни/десятки/единицы
8-BITOV
513 / 455 / 83
Регистрация: 05.05.2014
Сообщений: 1,077
05.06.2014, 14:32     Запись числа прописью, нужна доработка #3
Цитата Сообщение от DMGR- Посмотреть сообщение
хелп, ребят
Поищи по форуму. Задача решалась неоднократно.
DMGR-
0 / 0 / 0
Регистрация: 07.10.2012
Сообщений: 101
05.06.2014, 15:15  [ТС]     Запись числа прописью, нужна доработка #4
не более 2 знаков после десятичной точки
Yandex
Объявления
05.06.2014, 15:15     Запись числа прописью, нужна доработка
Ответ Создать тему
Опции темы

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