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

Вывести число прописью - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подскажите хороший справочник по синтаксису http://www.cyberforum.ru/cpp-beginners/thread83643.html
Подскажите хороший справочник по синтаксису "С", ато во всём, что скачиваю чаще-всего одна "философия" программирования, вместо чётких указаний и формул:rtfm:
C++ Голодная коза на веревке. Есть квадратное поле с травой, сторона квадрата - N. В центре поля привязана веревка длины r. К другому концу веревки привязана коза. Коза поедает всю траву, до которой может дотянуться, при этом ей мешает длина веревки. Ввод: В первой строке файла input содержатся два целых числа N и r через пробел. 1<=N,r<=100 Ограничения: время счета - 1 сек, объем памяти: 16 Mb Вывод: С точностью до... http://www.cyberforum.ru/cpp-beginners/thread83603.html
C++ C# как редактировать word документ?
Привет, есть рутинная работа на MS Word. В сделанной таблице нужно заменять цифры на последовательные для дальнейшей печати например 1111 1112 1113 в следующий раз 1111 заменить на 1114 и тд (естественно эти цифры в ячейках, в каждой ячейке логотип и тд.) Подкажите пожалуйста способ, каким образом сделать, чтобы программа автоматом заменяла, и работала именно в ворде? с макросами не...
C++ atof и atoi
Помогите пожалуйста, разобратся что такое atof, atoi, как работает, что делает?
C++ Связные списки http://www.cyberforum.ru/cpp-beginners/thread83574.html
Написать функцию, удаляющую из исходной строки заданный символ. Например, удаление символа ‘i’ из строки “cabin heating” дает в результате “cabn heatng” Есть код написанный с реализцией классов ,нужно изменить под связные списки. #include <iostream> #include <conio.h> using namespace std; class eraseSymbol {
C++ C++, Помочь разобраться в готовом коде Здравствуйте, я заказала по интернету код программы для решения следующей задачи: В задании курсового проекта необходимо создать программу, которая содержит текущую информацию о книгах в библиотеке. Сведения включают: • Номер УДК • Фамилию и инициалы автора • Название книги • Год издания • Количество экземпляров Программа должна обеспечивать: • Начальное формирование данных обо всех... подробнее

Показать сообщение отдельно
manfeese
 Аватар для manfeese
128 / 127 / 16
Регистрация: 04.01.2009
Сообщений: 415
13.07.2010, 12:43     Вывести число прописью
Не стал заморачиваться в консоли с языками, вот как вариант в ООП:
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
//$$---- Form CPP ----
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    try
    {
        int num = Edit1->Text.ToInt();
        ToText(num);
    }
    catch(...)
    {
 
    }
}
 
String __fastcall ToLowerCase(String str, bool NotUse)
{
    return NotUse ? str : AnsiLowerCase(str);
}
 
void __fastcall TForm1::ToText(int Number)
{
    String Group[4][3] = {{"тысяча ",   "тысячи ",    "тысяч "},
                  {"миллион ",  "миллиона ",  "миллионов "},
                  {"миллиард ", "миллиарда ", "миллиардов "},
                  {"триллион ", "триллиона ", "триллионов "}};
 
    String All[3][10] = {{"", "Один ", "Два ", "Три ", "Четыре ", "Пять ", "Шесть ", "Семь ", "Восемь ", "Девять "},
                 {"", "", "Двадцать ","Тридцать ","Сорок ","Пятьдесят ","Шестьдесят ","Семдесят ","Восемдесят ","Девяносто "},
                 {"","Сто ","Двести ", "Тристо ", "Четыресто ", "Пятьсот ", "Шестьсот ", "Семьсот ","Восемсот ","Девятсот "}};
 
    String El_Nine[10] = { "Десять ",    "Одиннадцать ", "Двенадцать ", "Тринадцать ",   "Четырнадцать ",
                   "Пятнадцать ", "Шестнадцать ", "Семнадцать ", "Восемнадцать ", "Девятнадцать " };
 
    String NumStr = IntToStr(Number); //Number;
    int NumLength = NumStr.Length();
    int Groups = (NumLength-1)/3;
    String str = "";
    for (int i = Groups; i>=0; i--)
    {
        int k = (i==Groups ? NumLength - Groups*3 : 3);
        String NOG_Str = NumStr.SubString(NumLength+1-i*3-k,k);
        String strgr="";
 
        for (int j = 1; j<=k ; j++)
        {
            if (j==k-1 && NOG_Str[j] == '1')
            {
                strgr += ToLowerCase(El_Nine[StrToInt(NOG_Str[k])], i==Groups && j==1);
                break;
            }
            else 
            {
                if (i==1 && j==k && NOG_Str[j] == '1') strgr += ToLowerCase("Одна", i==Groups && j==1);
                else if (i==1 && j==k && NOG_Str[j] == '2') strgr += ToLowerCase("Две", i==Groups && j==1);
                else strgr += ToLowerCase(All[k-j][StrToInt(NOG_Str[j])], i==Groups && j==1);
            }
        }
        String grName = "";
        if (i>0 && NOG_Str.ToInt() > 0) 
        {
            int LOG = NOG_Str.ToInt()%100;
            if (LOG > 10 && LOG < 19 ) grName = Group[i-1][2];
            else if (LOG%10 == 1) grName = Group[i-1][0];
            else if (LOG%10 > 1 && LOG%10 < 5) grName = Group[i-1][1];
            else grName = Group[i-1][2];
        }
        str+=strgr + grName;
    }
        
    Label1->Caption = str;
}
 
//---------------------------------------------------------------------------

Если тип входящей переменной использовать не int, а переделать процедуру под строковый (а также изменить строку 50 кода), тогда расширяя массив Group можно преобразовывать большие числа

Добавлено через 19 часов 12 минут
Расширяем возможности до дробных чисел...

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
//$$---- Form CPP ----
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
    String Currency[2][4] = {{"рубль",   "рубля",   "рублей", "М"},
                 {"копейка", "копейки", "копеек", "Ж"}};
 
    try
    {
        Label1->Caption = ToText(Edit1->Text.ToDouble(), Currency);
    }
    catch(...)
    {
 
    }
}
 
String __fastcall ToLowerCase(String str, bool NotUse)
{
    return NotUse ? str : AnsiLowerCase(str);
}
 
String __fastcall TForm1::ToText(double Number, String Currency[2][4])
{
    String Group[4][3] = {{"тысяча ",   "тысячи ",    "тысяч "},
                  {"миллион ",  "миллиона ",  "миллионов "},
                  {"миллиард ", "миллиарда ", "миллиардов "},
                  {"триллион ", "триллиона ", "триллионов "}};
 
    String All[3][10] = {{"", "Один ", "Два ", "Три ", "Четыре ", "Пять ", "Шесть ", "Семь ", "Восемь ", "Девять "},
                 {"", "", "Двадцать ","Тридцать ","Сорок ","Пятьдесят ","Шестьдесят ","Семдесят ","Восемдесят ","Девяносто "},
                 {"","Сто ","Двести ", "Тристо ", "Четыресто ", "Пятьсот ", "Шестьсот ", "Семьсот ","Восемсот ","Девятсот "}};
 
    String El_Nine[10] = { "Десять ",    "Одиннадцать ", "Двенадцать ", "Тринадцать ",   "Четырнадцать ",
                   "Пятнадцать ", "Шестнадцать ", "Семнадцать ", "Восемнадцать ", "Девятнадцать " };
 
    String str = "";
    String FullStr = FloatToStr(Number);//IntToStr(Number);
    int DecPos = FullStr.Pos('.') > 0 ? FullStr.Pos('.') :
                 FullStr.Pos(',') > 0 ? FullStr.Pos(',') : FullStr.Length()+1;
 
    for (int s = 0; s <= (DecPos<FullStr.Length()); s++)
    {
        String NumStr = (!s ? FullStr.SubString(1,DecPos-1) : FullStr.SubString(DecPos+1,FullStr.Length()));
 
        int NumLength = NumStr.Length();
        int Groups = (NumLength-1)/3;
        for (int i = Groups; i>=0; i--)
        {
            int k = (i==Groups ? NumLength - Groups*3 : 3);
            String NOG_Str = NumStr.SubString(NumLength+1-i*3-k,k);
            String strgr="";
 
            for (int j = 1; j<=k ; j++)
            {
                bool LowerNotFirst = (s==0 && i==Groups && j==1);
                if (j==k-1 && NOG_Str[j] == '1')
                {
                    strgr += ToLowerCase(El_Nine[StrToInt(NOG_Str[k])], LowerNotFirst);
                    break;
                }
                else
                {
                    if ((j==k && NOG_Str[j] == '1') && (i>0 && Group[i-1][3] == "Ж" || Currency[s][3] == "Ж")) strgr += ToLowerCase("Одна ", LowerNotFirst);
                    else if ((j==k && NOG_Str[j] == '2') && (i>0 && Group[i-1][3] == "Ж" || Currency[s][3] == "Ж")) strgr += ToLowerCase("Две ", LowerNotFirst);
                    else strgr += ToLowerCase(All[k-j][StrToInt(NOG_Str[j])], LowerNotFirst);
                }
            }
            String grName = "";
            if (i>0 && NOG_Str.ToInt() > 0)
            {
                int LOG = NOG_Str.ToInt()%100;
                if (LOG > 10 && LOG < 19 ) grName = Group[i-1][2]+" ";
                else if (LOG%10 == 1) grName = Group[i-1][0]+" ";
                else if (LOG%10 > 1 && LOG%10 < 5) grName = Group[i-1][1]+" ";
                else grName = Group[i-1][2]+" ";
            }
            str+=strgr + grName;
        }
        int LOG = NumStr.ToInt()%100;
        if (LOG > 10 && LOG < 19 ) str += Currency[s][2] + " ";
        else if (LOG%10 == 1) str += Currency[s][0]+" ";
        else if (LOG%10 > 1 && LOG%10 < 5) str += Currency[s][1]+" ";
        else str += Currency[s][2]+" ";
    }
    return str;
}
 
//---------------------------------------------------------------------------
 
Текущее время: 13:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru