Список форумов DOMEN.com.ua DOMEN.com.ua
информационно-технический форум провайдера DOMEN.com.ua
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

THIS SITE IS OUTDATED AND NOT SUPPORTED ANYMORE
PLS USE OUR WIKI INSTEAD

Цыфри прописью

 
Начать новую тему   Ответить на тему    Список форумов DOMEN.com.ua -> Вопросы программирования
Предыдущая тема :: Следующая тема  
Автор Сообщение
bober
Завсегдатай


Зарегистрирован: 19.01.2004
Сообщения: 203
Откуда: Lvov

СообщениеДобавлено: Пн Июн 19, 2006 10:56    Заголовок сообщения: Цыфри прописью Ответить с цитатой

Где можно найти скрипт который бы писал прописью например 5-пьять
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
outblaze
Участник


Зарегистрирован: 17.04.2006
Сообщения: 14

СообщениеДобавлено: Пт Июн 23, 2006 08:50    Заголовок сообщения: Ответить с цитатой

http://www.google.com.ua/search?hl=ru&ie=windows-1251&q=%F6%E8%F4%F0%FB+%EF%F0%EE%EF%E8%F1%FC%FE+%ED%E0+PHP&btnG=%CF%EE%E8%F1%EA+%E2+Google&meta=
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
bober
Завсегдатай


Зарегистрирован: 19.01.2004
Сообщения: 203
Откуда: Lvov

СообщениеДобавлено: Ср Июн 28, 2006 13:00    Заголовок сообщения: Ответить с цитатой

outblaze писал(а):
http://www.google.com.ua/search?hl=ru&ie=windows-1251&q=%F6%E8%F4%F0%FB+%EF%F0%EE%EF%E8%F1%FC%FE+%ED%E0+PHP&btnG=%CF%EE%E8%F1%EA+%E2+Google&meta=

Спасибки Число прописью
Код:

<?
// Скрипт переводит число в т.н. прописной вид.
// Может использоваться для каких-либо актов, где нужно число прописью.
// 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();
?>


Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов DOMEN.com.ua -> Вопросы программирования Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Anti Bot Question MOD - МОД для phpBB против Спамботов