//-------------------------------------------------------------------------------------- //summa.h AnsiString triada(AnsiString in, int tn) { 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");
|