Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > помогите с Perl |
Автор: bolt13 26.12.2007, 21:15 |
помогите пожалуйста написать скрипт !!!!!!!!!!!!!!!!!!! Написать скрипт, заменяющий текстовое написание числительного (в любом падаже) на цифровое написание. Ограничиться двузначными числами. |
Автор: Sadok 26.12.2007, 23:01 |
ггг. "один" и "одна" - падеж один и тот же... (это намек) |
Автор: bolt13 27.12.2007, 02:09 |
нет вот именно что подежи могут быть разные!!!!!!!!!!!! ![]() |
Автор: vadiml 27.12.2007, 22:10 | ||
вообще достаточно просто подумать вот из моих первых опытов на перле (вызывать dig2str):
при желании можно улучшить -- здесь есть куда ![]() |
Автор: shamber 28.12.2007, 14:41 |
vadiml, я думаю это не понадобиться, судя по посту |
Автор: WERT 27.10.2008, 15:18 |
Мой вариант для сумм в рублях до 20000 руб, вызывать num2str, там мини-тест на синтаксис проверял ![]() sub semantic {$ost=$_[0]; $out=""; if($ost >= 100) {$jkl = $ost / 100; $out.=$hang[$jkl]; $ost= $ost%100; } if($ost >= 20){ $jkl = $ost / 10; $out.=$des[$jkl]; $ost= $ost%10; } if($ost>0) {$out.=$_1_19[$ost]; if ($ost==1){$out.=$namerub[1];} elsif ($ost<5){$out.=$namerub[2];} else {$out.=$namerub[3];} } else {$out.=$namerub[3];} } sub num2str{ $L=$_[0]; $s=""; $_1_2[1]="одна "; $_1_2[2]="две "; $_1_19[1]="один "; $_1_19[2]="два "; $_1_19[3]="три "; $_1_19[4]="четыре "; $_1_19[5]="пять "; $_1_19[6]="шесть "; $_1_19[7]="семь "; $_1_19[8]="восемь "; $_1_19[9]="девять "; $_1_19[10]="десять "; $_1_19[11]="одиннацать "; $_1_19[12]="двенадцать "; $_1_19[13]="тринадцать "; $_1_19[14]="четырнадцать "; $_1_19[15]="пятнадцать "; $_1_19[16]="шестнадцать "; $_1_19[17]="семнадцать "; $_1_19[18]="восемнадцать "; $_1_19[19]="девятнадцать "; $des[2]="двадцать "; $des[3]="тридцать "; $des[4]="сорок "; $des[5]="пятьдесят "; $des[6]="шестьдесят "; $des[7]="семьдесят "; $des[8]="восемдесят "; $des[9]="девяносто "; $hang[1]="сто "; $hang[2]="двести "; $hang[3]="триста "; $hang[4]="четыреста "; $hang[5]="пятьсот "; $hang[6]="шестьсот "; $hang[7]="семьсот "; $hang[8]="восемьсот "; $hang[9]="девятьсот "; $namerub[1]="рубль "; $namerub[2]="рубля "; $namerub[3]="рублей "; $nametho[1]="тысяча "; $nametho[2]="тысячи "; $nametho[3]="тысяч "; if($L >=20000){return "Сумму не удалось рассчитать, она слишком большая"} if($L >= 1000) {$ost=$L%1000; $L=$L/1000; if ($L<3){$s.=$_1_2[$L].$nametho[$L];} elsif ($L<5){$s.=$_1_19[$L].$nametho[2];} else {$s.=$_1_19[$L].$nametho[3];} if ($ost==0){$s.="рублей ";} else {$s.=semantic($ost);} } else {$s.=semantic($L);} return $s."00 копеек"; } for ($i=0;$i<20;$i++) {$per=int(rand(9999)); print $per."!!".num2str($per)."\n"; } |