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

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

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

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

05.06.2014, 12:31. Просмотров 450. Ответов 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 минут
хелп, ребят
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2014, 12:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись числа прописью, нужна доработка (C++):

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

Найти сумму двух денежных сумм заданных прописью, ответ вывести прописью - C++
Приветствую форумчан, прошу момочь с задачей : Сложить две денежные суммы в рублях и копейках, заданные прописью. Результат вывести также...

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

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

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

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

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

Дана строка. Определить, представляет ли она собой запись целого числа или запись дробного числа - C++
Дана строка.Необходимо определить ,представляет ли она собой запись целого числа,записать дробного числа.Считайте ,что дробная часть...

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

. Дана строка, изображающая десятичную запись целого положительного числа. Вывести строку, изображающую двоичную запись этого же числа - C++
срочно помогите пожалуйста

Определить, представляет ли строка собой запись целого числа, запись дробного числа - C++
Выполните задания с использованием библиотечного класса string. Дана строка. Необходимо определить, представляет ли она собой запись...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.06.2014, 15:15
Ответ Создать тему
Опции темы

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