Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.142.128] |
|
Сообщ.
#1
,
|
|
|
Есть скажем число. Нужно его представить в строковом виде, т-е
1 -> адын 2 -> два 156 -> ... Как бы это оформить покрасивее, потому что я в принципе сделал, но с помощью switch, if-else. Геморно |
Сообщ.
#2
,
|
|
|
гыг \%)
ed[0] = "" ed[1] = "один" ed[2] = "два" .. ed[9] = "девять" des[0] = "" des[1] = "десять" des[2] = "двадцать" .. des[9] = "девяносто" sot[0] = "" sot[1] = "сто" sot[2] = "двести" .. sot[9] = "девятьсот" и т.д. далее: str = sot[кол_во_сот] + des[кол_во_десятков] + des[кол_во_единиц] ;DGrAnd: Забыл скобочку ;D для числа 156 получаем : стопятьдесятшесть -)) только вот надо немного по-другому обработать одиннадцать-девятнадцать ну как? =) |
Сообщ.
#3
,
|
|
|
ага, а если есть _примерно_ так (пишу по памяти);
switch(i) { case 1 : a[i] = "адын"; break; //... etc } if (i ==19) a[i] = "Девятнадцать"; //.... if (i == 156) a[i] = a[100]+a[50]+a[6]; Хотя, наверное твой примерчик поинтереснее будет... thanks & beer for Matrix Club ;) |
Сообщ.
#4
,
|
|
|
|
Сообщ.
#5
,
|
|
|
Не забудьте про числа от11 до 19 ;D ;D ;D
|
Сообщ.
#6
,
|
|
|
И не забудьте про числа > 1000, т.е. чтоб было не
"два тысяча триста двадцать пять" ;D |
Сообщ.
#7
,
|
|
|
Да, для больших чисел придеться еще учесть и падежи.
|
Сообщ.
#8
,
|
|
|
желающим могу прислать несколько вариантов на паскале........и не только для русского языка
|
Сообщ.
#9
,
|
|
|
Кстати с английскихм языком проблем особых не возникает. К счастью все намного проще. ;D ;D ;D
|
Сообщ.
#10
,
|
|
|
Вот еще один сорец на пасе:
---cut here type str3 = string[3]; ind9 = '0'..'9'; tsex = ( _, female, male ); irec = record s:string[12]; sex:tsex end; const k_o : array[tsex,ind9] of string[2] = ( ('','','','','','','','','',''), ('','а','и','и','и','','','','',''), ('ов','','а','а','а','ов','ов','ов','ов','ов') ); k_table : array[1..4] of irec = ( (s:'';sex:_), (s:'тысяч';sex:female), (s:'миллион';sex:male), (s:'миллиард';sex:male) ); _tab : array [0..3,ind9] of string[12] = ( ('десять','одиннадцать','двеннадцать','тринадцать','четырнадцать','пятнадцать', 'шестнадцать','семнадцать','восемнадцать','девятнадцать'), ('','од','дв','три','четыре','пять','шесть','семь','восемь','девять'), ('','десять','двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят','восемьдесят','девяносто'), ('','сто','двести','триста','четыреста','пятьсот','шестьсот','семьсот','восемьсот','девятьсот') ); procedure irecw(b:boolean;k:byte;i:ind9); begin write(' ',k_table[k].s); if b then write(k_o[k_table[k].sex,i]) else if k_table[k].sex=male then write('ов') end; function ireco(b:boolean;k:byte;i:ind9):boolean; begin if b then case i of '1': if k=2 then write('на') else write('ин'); '2': if k=2 then write('е') else write('а'); end; ireco:=b end; procedure tetr(k,o:byte;s:str3); function _tetr(o,i:byte):boolean; begin if boolean(o) then if (o=2) and (s[i]='1') then begin write(' ',_tab[0,s[i+1]]); _tetr:=false end else begin write(' ',_tab[o,s[i]]); _tetr:=_tetr(o-1,i+1); end else _tetr:=true end; begin if s='000' then exit; irecw(ireco(_tetr(o,1),k,s[o]),k,s[o]); end; var i,j,k,o:byte; s:string; s3:str3; begin s:=paramstr(1); if length(s)>12 then begin writeln('число слишком велико'); halt end; for i:=1 to length(s) do if s[i] in [#0..pred('0'),succ('9')..#255] then begin writeln('недопустимый нечисловой символ'); halt; end; while (s[1]='0')and(length(s)>1) do s:=copy(s,2,length(s)-1); if s='0' then write('ноль') else begin k:=length(s) div 3; o:=length(s)-3*k; if o=0 then o:=3 else inc(k); i:=0; j:=1; s3:=''; while j<=length(s) do begin s3:=s3+s[j]; inc(i); inc(j); if i=o then begin i:=0; tetr(k,o,s3); s3:=''; dec(k); o:=3 end; end; end; writeln; end. ---cut here |