|
DOMEN.com.ua информационно-технический форум провайдера DOMEN.com.ua
|
THIS SITE IS OUTDATED AND NOT SUPPORTED ANYMORE
PLS USE OUR WIKI INSTEAD
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
bober Завсегдатай
Зарегистрирован: 19.01.2004 Сообщения: 203 Откуда: Lvov
|
Добавлено: Пн Июн 19, 2006 10:56 Заголовок сообщения: Цыфри прописью |
|
|
Где можно найти скрипт который бы писал прописью например 5-пьять |
|
Вернуться к началу |
|
|
outblaze Участник
Зарегистрирован: 17.04.2006 Сообщения: 14
|
|
Вернуться к началу |
|
|
bober Завсегдатай
Зарегистрирован: 19.01.2004 Сообщения: 203 Откуда: Lvov
|
Добавлено: Ср Июн 28, 2006 13:00 Заголовок сообщения: |
|
|
Спасибки Число прописью Код: |
<?
// Скрипт переводит число в т.н. прописной вид.
// Может использоваться для каких-либо актов, где нужно число прописью.
// patricy@bk.ru
// Объявление глобальных массивов с шаблонами
// Основа
$osnova[0]='';
$osnova[1]='од';
$osnova[2]='дв';
$osnova[3]='три';
$osnova[4]='четыр';
$osnova[5]='пят';
$osnova[6]='шест';
$osnova[7]='сем';
$osnova[8]='восем';
$osnova[9]='девя';
//шаблоны
$sh[0]='дцать';
$sh[1]='десят';
$sh[2]='сорок';
$sh[3]='носто';
$sh[4]='сто';
$sh[5]='ести';
$sh[6]='ста';
$sh[7]='еста';
$sh[8]='ьсот';
$sh[9]='тьсот';
$sh[10]='тысяча';
$sh[11]='тысячи';
//-------------------------------------- Подсчёт "троек" -----------------------
/******************************************************************************
Входящие параметры :
********************
$num - число (исходное)
*********************
Результат :
*********************
$count - число троек (округлённое вверх)
******************************************************************************/
function count_triples($num)
{
$dlinna=strlen($num);
$count=ceil($dlinna/3);
return $count;
}
//------------------------------------- Разбиваем на "тройки" ------------------
/******************************************************************************
Входящие параметры :
********************
$num - число (исходное)
$count - число троек (округлённое вверх)
*********************
Результат :
*********************
$triple - тройка разрядов
******************************************************************************/
function explode_by_triples($num,$count)
{
for($i=$count;$i>0;$i--)
{
$triple[$i]=substr($num,-3,3);
$num=substr($num,0,-3);
}
for ($i=1;$i<$count;$i++)
{
echo $triple[$i]." ";
}
echo $triple[$count];
return $triple;
}
//----------------------------------- Правило для 1 разряда тройки ------------
/******************************************************************************
Входящие параметры :
********************
$value - число (3 разряд(правый, единицы))
*********************
Результат :
*********************
$stroka - разряд прописью
******************************************************************************/
function rule1($value,$i,$count)
{
global $sh,$osnova;
switch ($value)
{
case '0':$stroka=$osnova[0];
break;
case'1':if (($count-$i)==1)
{
$stroka=$osnova[1].'на';
} else {$stroka=$osnova[1].'ин'; }
break;
case'2':if (($count-$i)==1)
{
$stroka=$osnova[2].'е';
} else {$stroka=$osnova[2].'а'; }
break;
case'3':$stroka=$osnova[3];
break;
case'4':$stroka=$osnova[4].'е';
break;
case'5':$stroka=$osnova[5].'ь';
break;
case'6':$stroka=$osnova[6].'ь';
break;
case'7':$stroka=$osnova[7].'ь';
break;
case'8':$stroka=$osnova[8].'ь';
break;
case'9':$stroka=$osnova[9].'ть';
break;
}
return $stroka;
}
//----------------------------------- Правило для 2 разряда тройки ------------
/******************************************************************************
Входящие параметры :
********************
$value - число (2 разряд(средний, десятки))
*********************
Результат :
*********************
$stroka - разряд прописью
******************************************************************************/
function rule2($value)
{
global $sh,$osnova;
switch ($value)
{
case '0':$stroka='';
break;
case'1':$stroka='';
break;
case'2':$stroka=$osnova[2].'а'.$sh[0];
break;
case'3':$stroka=$osnova[3].$sh[0];
break;
case'4':$stroka=$sh[2];
break;
case'5':$stroka=$osnova[5].'ь'.$sh[1];
break;
case'6':$stroka=$osnova[6].'ь'.$sh[1];
break;
case'7':$stroka=$osnova[7].'ь'.$sh[1];
break;
case'8':$stroka=$osnova[8].'ь'.$sh[1];
break;
case'9':$stroka=$osnova[9].$sh[3];
break;
}
return $stroka;
}
//----------------------------------- Правило для 3 разряда тройки ------------
/******************************************************************************
Входящие параметры :
********************
$value - число (3 разряд(левый, сотни))
*********************
Результат :
*********************
$stroka - разряд прописью
******************************************************************************/
function rule3($value)
{
global $sh,$osnova;
switch ($value)
{
case '0':$stroka='';
break;
case'1':$stroka='сто';
break;
case'2':$stroka=$osnova[2].$sh[5];
break;
case'3':$stroka=$osnova[3].$sh[6];
break;
case'4':$stroka=$osnova[4].$sh[7];
break;
case'5':$stroka=$osnova[5].$sh[8];
break;
case'6':$stroka=$osnova[6].$sh[8];
break;
case'7':$stroka=$osnova[7].$sh[8];
break;
case'8':$stroka=$osnova[8].$sh[8];
break;
case'9':$stroka=$osnova[9].$sh[9];
break;
}
return $stroka;
}
//----------------------------------- Правило для 1 и 2 разряда тройки (10-19)
/******************************************************************************
Входящие параметры :
********************
$value - число (2 правых разряда, если от 10 до 19)
*********************
Результат :
*********************
$stroka - разряд прописью
******************************************************************************/
function rule1019($value)
{
global $sh,$osnova;
switch ($value)
{
case '10':$stroka='';
break;
case'11':$stroka=$osnova[1].'инна'.$sh[0];
break;
case'12':$stroka=$osnova[2].'ена'.$sh[0];
break;
case'13':$stroka=$osnova[3].'на'.$sh[0];
break;
case'14':$stroka=$osnova[4].'на'.$sh[0];
break;
case'15':$stroka=$osnova[5].'на'.$sh[0];
break;
case'16':$stroka=$osnova[6].'на'.$sh[0];
break;
case'17':$stroka=$osnova[7].'на'.$sh[0];
break;
case'18':$stroka=$osnova[8].'на'.$sh[0];
break;
case'19':$stroka=$osnova[9].'на'.$sh[0];
break;
}
return $stroka;
}
//------------------------------------- анализ "тройки"
/******************************************************************************
Входящие параметры :
********************
$chislo - тройка разрядов
$i - её порядковый номер
$count - общее кол-во троек
*********************
Результат :
*********************
$final_triple_str - тройка прописью
******************************************************************************/
function triple_analis($chislo,$i,$count)
{
//разбиваем тройку на разряды
switch (strlen($chislo))
{
case 1: $tretiy_razrad="0";
$vtoroy_razrad="0";
break;
case 2: $tretiy_razrad="0";
$vtoroy_razrad=substr($chislo,0,1);
break;
case 3: $tretiy_razrad=substr($chislo,0,1);
$vtoroy_razrad=substr($chislo,1,1);
break;
}
$pervy_razrad=substr($chislo,-1,1);
//обрабатываем 3 разряд
$first_substr=rule3($tretiy_razrad);
///////////////////////////////////////////////////////////
//обрабатываем 2 и 1 разряд
$dvuh_znach=substr($chislo,-2,2);
//если двухзначное в конце 10..19 - обработать по правилу 1019
if (($dvuh_znach>=10)&&($dvuh_znach<=19))
{
$second_substr=rule1019($dvuh_znach);
$final_triple_str=$first_substr." ".$second_substr;
}
else
{
//обрабатываем 2 разряд
$second_substr=rule2($vtoroy_razrad);
//////////////////////////////////////////////////////////
//обрабатываем 1 разряд
$third_substr=rule1($pervy_razrad,$i,$count);
//////////////////////////////////////////////////////////
$final_triple_str=$first_substr." ".$second_substr." ".$third_substr;
}
return $final_triple_str;
}
//--------------- Прибавляем названия старших троек (тысячи, миллионы,...)
/******************************************************************************
Входящие параметры :
********************
$stroka - число прописью (тройка разрядов)
$count - общее число троек разрядов
$i - текущая тройка
*********************
Результат :
*********************
$final - число прописью (тройка разрядов) c добавленым названием старших троек
(тысячи, миллионы,...)
******************************************************************************/
function add_big_num($stroka,$i,$count)
{
// массив с названиями старших троек разрядов
// здесь возможны неточности :)
// массив можно продолжить (для параноиков)
$tro[1]="тысяч";
$tro[2]="миллион";
$tro[3]="миллиард";
$tro[4]="квадрильон";
$tro[5]="квинтильон";
$tro[6]="сикстильон";
$tro[7]="септильон";
$tro[8]="октильон";
$tro[9]="нантильон";
$tro[10]="гвинтильон";
$tro[11]="хуельон";
for ($j=1;$j<$count;$j++)
{
$tr[$j]=$tro[$count-$j];
}
$last_symb=substr($stroka,-1);
$stroka=$stroka." ".$tr[$i];
if (($count-$i)==1) //для тысяч
{
switch ($last_symb)
{
case 'а':$ending='а'; //однА тысячА
break;
case 'е':$ending='и'; //двЕ тысячИ
break;
case 'и':$ending='и'; //3 тысячИ
break;
case 'е':$ending='и'; //4 тысячИ
break;
case 'ь':$ending=''; //5-9 тысяч
break;
}
} else
{
switch ($last_symb)
{
case 'н':$ending=''; //1 миллион миллард
break;
case 'а':$ending='а'; // 2 А
break;
case 'и':$ending='а'; // 3 А
break;
case 'е':$ending='а'; // 4 А
break;
case 'ь':$ending='ов'; // 5 - 9 ов
break;
}
}
$final=$stroka.$ending;
return $final;
}
// ------------------ Перевод числа в текстовое (прописью) представление
/******************************************************************************
Входящие параметры :
********************
$num - число из формы
*********************
Результат :
*********************
нет (вывод на экран результата - $stroka)
******************************************************************************/
function trans_num($num)
{
global $tr;
//подсчитываем кол-во троек в числе
$count=count_triples($num);
//разбиваем на тройки
$triple=explode_by_triples($num,$count);
for ($i=1;$i<=$count;$i++) //($imax=первая тройка, потом тысячи...
{
$stroka=$stroka." ".triple_analis($triple[$i],$i,$count);
if ($i<$count) $stroka=add_big_num($stroka,$i,$count);
}
echo "<br>".$stroka;
}
//--------------------------------- Форма для входных параметров
/******************************************************************************
Входящие параметры :
********************
нет
*********************
Результат :
*********************
нет (вывод на экран формы для числа)
******************************************************************************/
function input_form()
{
echo "<form name='InputForm' action='$_SERVER[PHP_SELF]' method='post'>";
echo "Введите число (только цифры):";
echo "<input name='num' type='text'>";
echo "<input type='submit' value='перевести в пропись'>";
echo "</form>";
}
//------------------------ Здесь должна быть проверка на правильность вводимого
//------------------------ пользователем числа.
if (isset($_POST[num]))
{
if (!ereg("[:digit:]",$_POST[num] )) {
trans_num($num);
}
}
input_form();
?>
|
|
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|