Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 08.04.2015
Сообщений: 1

Записать число, заданное словами, в виде цифр

08.04.2015, 08:47. Показов 1591. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет помогите плиз переделать вот этот код, нужно чтобы при вводе числа буквами показывало цифрами
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
//---------------------------------------------------------------------------
 
#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;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.04.2015, 08:47
Ответы с готовыми решениями:

Напечатать число, заданное словами
Как на с# написать программу Задано число n (n &lt; 1000), записанное русскими словами. Напечатать это слово цифрами. Например, 123 –...

Записать число словами
Добрый день, сделал тестовое задание от одной компании, нужно конвертировать числа в строчный вид. Например. 1901 - &quot;одна тысяча...

Записать число словами
Всем доброго времени суток!Имею один вопрос: Как заменить цифры буквами,т.е смотрите: Число 60.Будет выводить сообщение - шестьдесят ...

7
08.04.2015, 16:45

Не по теме:

Ага, если юзер написал "АДЫН МИЛЬЕН" программа должна понять, что надо показать 1000000, так?

0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
09.04.2015, 09:30
Цитата Сообщение от D1973 Посмотреть сообщение
Ага, если юзер написал "АДЫН МИЛЬЕН" программа должна понять, что надо показать 1000000, так?
Да..., и "тристО", "четырестО", "сем(Ь)десят" etc - это так по новым методичкам Минобразин??

Добавлено через 50 минут
А по существу, - я бы не переделывал ваш текст, а поступил по другому: применяя списки. Вот примерно таким образом (в эдит1 - десятки, в эдит2 - единицы, в эдит3 - число от 11 до 19):
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TForm1::Button1Click(TObject *Sender)
{        //  #include <vector>
    std::auto_ptr<TStringList> deci(new TStringList),digi(new TStringList),osob(new TStringList) ;
    deci->CommaText="ДЕСЯТЬ ДВАДЦАТЬ ТРИДЦАТЬ СОРОК ПЯТЬДЕСЯТ ШЕСТЬДЕСЯТ СЕМЬДЕСЯТ ВОСЕМЬДЕСЯТ ДЕВЯНОСТО";
    digi->CommaText="ОДИН ДВА ТРИ ЧЕТЫРЕ ПЯТЬ ШЕСТЬ СЕМЬ ВОСЕМЬ ДЕВЯТЬ";
    osob->CommaText="ОДИННАДЦАТЬ ДВЕНАДЦАТЬ ТРИНАДЦАТЬ ЧЕТЫРНАДЦАТЬ ПЯТНАДЦАТЬ ШЕСТНАДЦАТЬ СЕМНАДЦАТЬ ВОСЕМНАДЦАТЬ ДЕВЯТНАДЦАТЬ";
    int def, summa = 0;
    if((def=deci->IndexOf(Edit1->Text.UpperCase()))>=0) summa += 10*(1+def) ;
    if((def=digi->IndexOf(Edit2->Text.UpperCase()))>=0) summa += 1+def ;
    if((def=osob->IndexOf(Edit3->Text.UpperCase()))>=0) summa  = 11+def ;
    Label1->Caption = summa; 
}
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
09.04.2015, 09:30
Желательно составить некое симантическое ядро по словарю, чтобы учесть все возможные слова.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
09.04.2015, 09:42
Цитата Сообщение от Почтальен Посмотреть сообщение
учесть все возможные слова
Половина дофига.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
09.04.2015, 09:46
Цитата Сообщение от Почтальен Посмотреть сообщение
Желательно составить некое сЕмантическое ядро по словарю
Думаю, для простого задания это излишне.

Добавлено через 2 минуты
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Половина дофига

Не по теме:

... "полста" ещё используют :)

0
2 / 2 / 3
Регистрация: 01.03.2015
Сообщений: 131
23.04.2015, 00:31
Цитата Сообщение от nick42 Посмотреть сообщение
std::auto_ptr<TStringList> deci(new TStringList),digi(new TStringList),osob(new TStringList) ;
не подскажите почему ругается на эту строчку?
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
23.04.2015, 05:26
NextGen25,
C++
1
#include <memory>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2015, 05:26
Помогаю со студенческими работами здесь

Записать число словами
У меня такой вопрос: Как целое число до 10 000 записать словами??? например вводим с клавиатуры 123 а она выводит &quot;сто двадцать...

Записать введенное число словами
Здравствуйте. Задача такова: Мы вводим число N (N&lt;=10000), и на выходе мы должны увидеть сообщение типа &quot;9 - девять&quot;,...

Записать число русскими словами
Задано натуральное число n (n&lt;=20). Записать это число русскими словами (семнадцать, три, десять) и т. д.

Число до 1000 записать словами
Составьте программу,которая по числу &lt;1000,написанному арабскими цифрами,формирует его название.

Записать число русскими словами
Дано натуральное число n (n &lt;= 1000). Записать это число русскими словами (семнадцать, двести пятьдесят три, тысяча и т. д. ). ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru