Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 08.01.2012, 15:46   #1
Заблокирован
 Разведчик
Аватар для GAHIK
 
GAHIK вызывает надежду
Регистрация: 15.04.2010
Сообщений: 11
Популярность: -15
Сказал(а) спасибо: 23
Поблагодарили 8 раз(а) в 6 сообщениях
 
По умолчанию Как реализовать сумму прописью на С++

Как реализовать сумму прописью на С++
Пример на C
Цитата:
{
if (in == " ") return "";
if (in == "000") return "";
AnsiString out = "";
AnsiString sotni[9] =
{"сто", "двести", "триста", "четыреста", "пятьсот",
"шестьсот", "семьсот", "восемьсот", "девятьсот"};
AnsiString dubl[10] =
{"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать",
"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"};
AnsiString des[8] =
{"двадцать", "тридцать", "сорок", "пятьдесят",
"шестьдесят", "семьдясят", "восемьдясят", "девяносто"};
AnsiString ed[9] = {"один", "два", "три", "четыре", "пять", "шесть","семь", "восемь", "девять"};
AnsiString edj[9] = {"одна", "две", "три", "четыре", "пять", "шесть","семь", "восемь", "девять"};
AnsiString ind[5] = {"", " тысяч", " миллион", " миллиард", " триллион"};
AnsiString post;
if (in[1] != \' \') if (in[1] != \'0\')
{ out = out + sotni[StrToInt(in[1])-1]; }
if (in[2] == \'1\')
{ out = out + " " + dubl[StrToInt(in[3])]; }
if (in[2] != \'1\') if (in[2] != \' \') if (in[2] != \'0\')
{ out = out + " " + des[StrToInt(in[2])-2]; }
if (in[3] != \'0\') if (in[2] != \'1\')
{
if (tn == 1)
out = out + " " + edj[StrToInt(in[3])-1];
if (tn != 1)
out = out + " " + ed[StrToInt(in[3])-1];
}
if (tn>0) if (in[2] != \'1\')
{
if (tn==1) switch (in[3])
{
case \'1\': post = ind[tn] + "а"; break;
case \'2\': post = ind[tn] + "и"; break;
case \'3\': post = ind[tn] + "и"; break;
case \'4\': post = ind[tn] + "и"; break;
default : post = ind[tn] + ""; break;
}
if ((tn==2)||(tn==3)||(tn==4)) switch (in[3])
{
case \'1\': post = ind[tn] + ""; break;
case \'2\': post = ind[tn] + "а"; break;
case \'3\': post = ind[tn] + "а"; break;
case \'4\': post = ind[tn] + "а"; break;
default : post = ind[tn] + "ов"; break;
}
}
else
{
switch (tn)
{
case 1 : post = ind[tn]; break;
default : post = ind[tn] + "ов"; break;
}
}
out = out + post;
return out;
}
AnsiString summa(AnsiString in)
{
AnsiString out;
AnsiString trs[5];
AnsiString tro[5];
AnsiString buf;
int n,s;
div_t dr;


while (in.Length() < 15)
{
in = " " + in;
}
for (n=0;n<5;n++) trs[n] = in;
trs[0] = trs[0].Delete(1,in.Length()-3);
trs[1] = trs[1].Delete(1,in.Length()-6).Delete(4,4);
trs[2] = trs[2].Delete(1,in.Length()-9).Delete(4,6);
trs[3] = trs[3].Delete(1,in.Length()-12).Delete(4,9);
trs[4] = trs[4].Delete(1,in.Length()-15).Delete(4,12);

for (n=0;n<5;n++)
{
tro[n] = triada(trs[n],n);
}
out = " "+tro[4]+" "+tro[3]+" "+tro[2]+" "+tro[1]+" "+tro[0]+" ";
out = out.Trim();
return out;
}
//--------------------------------------------------------------------------------------
// / summa.h

Работает так:
Цитата:
AnsiString s = summa("123");

  Ответить с цитированием
Старый 09.01.2012, 02:28   #2
 Пехотинец
Аватар для daff26
 
daff26 на правильном пути
Регистрация: 06.02.2011
Сообщений: 69
Популярность: 49
Сказал(а) спасибо: 102
Поблагодарили 54 раз(а) в 31 сообщениях
 
По умолчанию Re: Как реализовать сумму прописью на С++

Вот посмотри я тут у себя нарыл , Попробуй красным я выделил, должно помочь.Читай код внимательно.
Цитата:
#include <vcl.h>
#include <SysUtils.hpp>

#include "Num2Str.h"

const char *m1[]
={"один ","два ","три ","четыре ","пять ","шесть ","семь ","восемь ","девять "};
const char *f1[]
={"одна ","две ","три ","четыре ","пять ","шесть ","семь ","восемь ","девять "};
const char *n10[]
={"десять ","двадцать ","тридцать ","сорок ","пятьдесят ","шестьдесят ",
"семьдесят ","восемьдесят ","девяносто "};
const char *first10[]
={"одиннадцать ","двенадцать ","тринадцать ","четырнадцать ","пятнадцать ",
"шестнадцать ","семнадцать ","восемнадцать ","девятнадцать "};
const char *n100[]
= {"сто ","двести ","триста ", "четыреста ","пятьсот ","шестьсот ","семьсот ",
"восемьсот ","девятьсот "};

const char *kop[] = {"тийин","тийин","тийин"};
const char *rub[] = {"сум ","сум ","сум "};
const char *tsd[] = {"тысяча ","тысячи ","тысяч "};
const char *mln[] = {"миллион ","миллиона ","миллионов "};
const char *mrd[] = {"миллиapд ","миллиаpдa","миллиapдoв "};
const char *cnt[] = {"тысяча ","тысячи ","тысяч "};

const char *cent[] = {"цент США","цента США","центов США"};
const char *doll[] = {"доллар ","доллара ","долларов "};

AnsiString Triada(unsigned int I, unsigned int n, bool k,bool usd)
{
unsigned int a,gender,sfx;
AnsiString Result = "";
sfx=3;
if(n==2) gender = 0;
else gender = 1;

a = I / 100;
if (a > 0)
{
Result += n100[a-1];
I -= a*100;
}

if (I>19)
{
a = I / 10;
if (a>0)
{
Result += n10[a-1];
I -= a*10;
if (I>0)
{
if (k) gender = 0;
if (gender==1) Result += m1[I-1];
else Result += f1[I-1];

switch(I) {
case 1: sfx=1; break;
case 2:
case 3:
case 4: sfx=2; break;
case 5:
case 6:
case 7:
case 8:
case 9: sfx=3;break;
}
}
}
}
else {
switch(I) {
case 1:
if (k) gender=0;
if (gender==1) Result += m1[I-1];
else Result +=f1[I-1] ;
sfx=1;
break;
case 2: case 3: case 4:
if (k) gender = 0;
if (gender==1) Result += m1[I-1];
else Result += f1[I-1];
sfx=2;
break;
case 5: case 6: case 7: case 8: case 9:
if (k) gender=0;
if (gender==1) Result += m1[I-1];
else Result += f1[I-1];
sfx=3;
break;
case 10:
Result += n10[0];
sfx=3;
break;
case 11: case 12: case 13: case 14: case 15: case 16:
case 17: case 18: case 19:
Result += first10[I-11];
sfx=3;
break;;
}
}
switch(n) {
case 1:
if (!k) {
if (usd)
Result += doll[sfx-1];
else
Result += rub[sfx-1];
}
else {
if (usd)
Result += cent[sfx-1];
else
Result +=kop[sfx-1];
}
break;

case 2:
if (!k)
Result += tsd[sfx-1];
else {
if (usd)
Result += cent[sfx-1];
else
Result +=kop[sfx-1];
}
break;
case 3:
if (!k)
Result += mln[sfx-1];
else {
if (usd)
Result += cent[sfx-1];
else
Result += kop[sfx-1];
}
break;
case 4:
if (!k)
Result += mrd[sfx-1];
else {
if (usd)
Result += cent[sfx-1];
else
Result += kop[sfx-1];
}
break;
}
return Result;
}


AnsiString TriadaK(unsigned int I, bool kpk, bool usd)
{
AnsiString Result;
unsigned int sfx,H;
if (kpk)
{
Result = "";
sfx=3;
H=(I % 10);
switch(H) {
case 1: sfx=1; break;
case 2: case 3: case 4: sfx=2; break;
}
if ((I >= 11) && (I <= 19)) sfx=3;
if (usd)
{
if (I<10) Result = "0"+IntToStr(I)+" "+cent[sfx-1];
else Result = IntToStr(I)+" "+cent[sfx-1];
}
else
{
if (I<10) Result ="0"+IntToStr(I)+" "+kop[sfx-1];
else Result=IntToStr(I)+" "+kop[sfx-1];
}
}
else
{
if (I==0)
{
if (usd)
Result = "00 центов США";
else
Result = "00 тийин";
}
else
Result = Triada(I,1,true,usd);
}

return Result;
}

AnsiString MoneyToString(double S, bool kpk, bool usd)
{
unsigned int I,H;
AnsiString V;
AnsiString f,l;
double s1;

AnsiString Result;

V="";
s1=S;
H=1000000000;
I=S/H;
if (I>0)
{
V = Triada(I,4,false,usd);
int tmp = S/H;
S -= tmp*H;
}

H=1000000;
I=S/H;
if (I>0)
{
V += Triada(I,3,false,usd);
int tmp = S/H;
S -= tmp*H;
}

H=1000;
I=S/H;
if (I>0)
{
V += Triada(I,2,false,usd);
int tmp = S/H;
S -= tmp*H;
}

H=1;
I=(S/H);
if (I>0)
{
V += Triada(I,1,false,usd);
int tmp = S/H;
S -= tmp*H;
}
else {
if (usd)
V += doll[2];
else
V += rub[2];
}
I = S*100;
AnsiString s = S * 100;
V += s + " тийин";
if (s1 < 1) V = "ноль " + V;
f = AnsiUpperCase(V.SubString(1,1));
l = V.SubString(2,256);
V = f+l;
Result = V;

return Result;
}

  Ответить с цитированием
Старый 09.01.2012, 02:49   #3
Заблокирован
 Разведчик
Аватар для GAHIK
 
GAHIK вызывает надежду
Регистрация: 15.04.2010
Сообщений: 11
Популярность: -15
Сказал(а) спасибо: 23
Поблагодарили 8 раз(а) в 6 сообщениях
 
По умолчанию Re: Как реализовать сумму прописью на С++

Нет не помогло
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть идея,не знаю как реализовать,help! akimkaakimka Архив 13 05.03.2012 15:48
[Помогите!] Как реализовать в C++ builder информацию с сайта Supergun777 Вопросы и ответы, обсуждения 0 01.11.2009 16:30

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 19:15.

Пишите нам: forum@zhyk.ru
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net