Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перевести число в слово 
:(
    Опции темы
stat007
Дата 12.10.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Помогите плиз с таким вопросиком: Нужно написать программку, которая бы переведила введённые с клавиатуры числа, в слова, т.е. вот примерчик:

Введите число в деопозоне от 1 до 999999:
12985
Перевод:
двенадцать тысяч девятьсот восемьдесят пять
PM MAIL   Вверх
Данкинг
Дата 12.10.2008, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Это не "программка", а серьёзная функция нужна. И не здесь, а "центре помощи".


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmi3ev
Дата 12.10.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



делал нечто подобное на первом курсе, но я делал это в билдере, поэтому придется самому немного постараться, но суть должна быть ясна  smile 
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <myround.h>//моя функция на основе floor и ceil из <math.h>
#pragma hdrstop

#include "money_U.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
AnsiString edk(int bvk)
{
AnsiString res="";//возвращаемое значение
int q, r;//частное и остаток
q=div(bvk, 10).quot;
r=div(bvk, 10).rem;
if (q!=1)
{
 switch (r)
  {
   case 1: res="одна"; break;
   case 2: res="две"; break;
   case 3: res="три"; break;
   case 4: res="четыре"; break;
   case 5: res="пять"; break;
   case 6: res="шесть"; break;
   case 7: res="семь"; break;
   case 8: res="восемь"; break;
   case 9: res="девять"; break;
  }
}
else
 res="";
return (res);
}
//---------------------------------------------------------------------------
AnsiString des (int inp)
{
AnsiString res="";//возвращаемое значение
int q, r;//частное и остаток
q=div(inp, 10).quot;
r=div(inp, 10).rem;
if (q==0) return ("");
switch (q)
 {
  case 1:
  switch (r)
   {
    case 0: res="десять"; break;
    case 1: res="одиннадцать"; break;
    case 2: res="двенадцать"; break;
    case 3: res="тринадцать"; break;
    case 4: res="четырнадцать"; break;
    case 5: res="пятнадцать"; break;
    case 6: res="шестнадцать"; break;
    case 7: res="семнадцать"; break;
    case 8: res="восемнадцать"; break;
    case 9: res="девятнадцать"; break;
   }
  break;
  case 2: res="двадцать"; break;
  case 3: res="тридцать"; break;
  case 4: res="сорок"; break;
  case 5: res="пятьдесят"; break;
  case 6: res="шестьдесят"; break;
  case 7: res="семьдесят"; break;
  case 8: res="восемдесят"; break;
  case 9: res="девяносто"; break;
 }
return (res);
}
//---------------------------------------------------------------------------
AnsiString kop (int bvk)
{
AnsiString res=des(bvk)+" "+edk(bvk);
if (res==" ")
 return("ноль коп.");
else
 return (res+" коп.");
}
//---------------------------------------------------------------------------
AnsiString edr(int bvr)
{
AnsiString res="";//возвращаемое значение
int q, r;//частное и остаток
q=div(bvr, 10).quot;
r=div(bvr, 10).rem;
if (q!=1)
{
 switch (r)
  {
   case 1: res="один"; break;
   case 2: res="два"; break;
   case 3: res="три"; break;
   case 4: res="четыре"; break;
   case 5: res="пять"; break;
   case 6: res="шесть"; break;
   case 7: res="семь"; break;
   case 8: res="восемь"; break;
   case 9: res="девять"; break;
  }
}
else
 res="";
return (res);
}
//---------------------------------------------------------------------------
AnsiString sot (int bvr)
{
AnsiString res="";
int q=div(bvr, 100).quot;
if (q!=0)
 {
  switch (q)
   {
    case 1: res="сто"; break;
    case 2: res="двести"; break;
    case 3: res="триста"; break;
    case 4: res="четыреста"; break;
    case 5: res="пятьсот"; break;
    case 6: res="шестьсот"; break;
    case 7: res="семьсот"; break;
    case 8: res="восемьсот"; break;
    case 9: res="девятьсот"; break;
   }
  return (res+" ");
 }
else
 return ("");
}
//---------------------------------------------------------------------------
AnsiString tis (int bvr)
{
AnsiString res=sot((bvr%1000000)/1000)+des((bvr%100000)/1000)+" "+edk((bvr%100000)/1000);
if (res==" ")
 return("");
else
 return (res+" тыс.");
}
//---------------------------------------------------------------------------
AnsiString rub (int bvr)
{
AnsiString res=tis(bvr)+" "+sot(bvr%1000)+des(bvr%100)+" "+edr(bvr%100);
if (res==" ")
 return("ноль руб.");
else
 return (res+" руб.");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString r, k;
r=k=0;
double bv=(Edit1->Text).ToDouble();//исходное число
int bvr, bvk;//рубли и копейки
bvr=bvk=0;
bvr=int(bv);
double h=0;
h=(bv-int(bv))*100;
bvk=myround(h);
k="";
r=rub(bvr);//рубли
k=kop(bvk);//копейки
Edit2->Text=r+" "+k;
k="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
if ((Key>='0') && (Key<='9'))
 return;
if (Key==DecimalSeparator)
 {
  if ((Edit1->Text).Pos(DecimalSeparator)!=0)
   Key=0;
  return;
 }
if (Key==VK_BACK)
 return;
if (Key==VK_RETURN)
 {
  Button1->SetFocus();
  return;
 }
Key=0;
}
//---------------------------------------------------------------------------



немного через ж..., но тогда я только начал изучать С++, и это была одна из первых моих программ, поэтому прошу не судить строго  smile 
а вот и файл myround.h
Код

#include "math.h"

int myround (double h)
{
if (h>=(int(h)+0.5))
 h=ceil(h);
else
 h=floor(h);
return (h);
}


Добавлено через 1 минуту и 23 секунды
как-то вот так, если надо могу кинуть весь проект на почту или в асю или еще куда  smile 


--------------------

PM MAIL   Вверх
stat007
Дата 12.10.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Ух нифига себе!!
Нет на С++, мне кажется помньше будет она!
Кто может напишите на С++.
PM MAIL   Вверх
susanin
Дата 12.10.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



Цитата(stat007 @  12.10.2008,  23:11 Найти цитируемый пост)
Нет на С++, мне кажется помньше будет она!

это и есть с++....
PM MAIL   Вверх
Данкинг
Дата 12.10.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(stat007 @ 13.10.2008,  00:11)
Ух нифига себе!!
Нет на С++, мне кажется помньше будет она!
Кто может напишите на С++.

 smile  smile  smile 
ЗЫ: Могу код на Дельфи скинуть, пример из ДРКБ. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
stat007
Дата 13.10.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Цитата(Dmi3ev @ 12.10.2008,  21:56)
делал нечто подобное на первом курсе, но я делал это в билдере, поэтому придется самому немного постараться, но суть должна быть ясна  smile 
[code=cpp]

Слушай, а что какие элементы должны быть на форме? Кнопка и 2 Edit или ещё чтото?
PM MAIL   Вверх
Dmi3ev
Дата 14.10.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



больше ничего, только они и все)))

Добавлено через 3 минуты и 17 секунд
на самом деле это делается примерно так, как я написал, короче, может, и получится, но принцип примерно такой (я ведь не говорю, что это идеальный код, но за то он мой личный smile ) Я вот так сделал не глядя ни в какие книги, может где-то и есть более рациональное решение, я даже уверен в том, что оно есть, однако мой мозг на первом курсе дошел только до это))))


--------------------

PM MAIL   Вверх
vinter
Дата 14.10.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 8
Всего: 56



http://forum.ishodniki.ru/index.php/topic,7141.0.html 
диапазон меньше, но есть пространство для самостоятельной работы smile


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.