За последние 24 часа нас посетили 18168 программистов и 1661 робот. Сейчас ищут 1740 программистов ...

Есть ли у кого-то алгоритм

Тема в разделе "Решения, алгоритмы", создана пользователем ckjet, 30 май 2011.

  1. ckjet

    ckjet Активный пользователь

    С нами с:
    6 апр 2011
    Сообщения:
    172
    Симпатии:
    2
    У меня задача написать скрипт склонений имен существительных. Я ввожу слово в именительном - скрипт выводит его в остальных падежах. Подскажите по каким принципам определяются окончания.
     
  2. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    На тебе smarty-плагин, там есть алгоритм

    PHP:
    1. <?php
    2. /**
    3.  * Smarty plugin
    4.  * @package Smarty
    5.  * @subpackage plugins
    6.  *
    7.  * Формирует строку с нужным окончанием.
    8.  * Пример: 0 комментариев, 1 комментарий, 2 комментария
    9.  * Должны присутствовать три параметра e0, e1, e2, соответственно для окончаний при нуле, единице и двух.
    10.  * Если указан параметр zero, то результирующая строка при нуле примет это значение
    11.  */
    12.  
    13. function smarty_function_number($params, &$smarty)
    14. {
    15.     if (!isset($params['e0']))
    16.     {
    17.         $smarty->trigger_error("eval: missing 'e0' parameter");
    18.         return;
    19.     }
    20.  
    21.     if (!isset($params['e1']))
    22.     {
    23.         $smarty->trigger_error("eval: missing 'e1' parameter");
    24.         return;
    25.     }
    26.  
    27.     if (!isset($params['e2']))
    28.     {
    29.         $smarty->trigger_error("eval: missing 'e2' parameter");
    30.         return;
    31.     }
    32.  
    33.     if (!isset($params['value']))
    34.     {
    35.         if (!isset($params['default']))
    36.         {
    37.             $smarty->trigger_error("eval: missing 'value' parameter");
    38.             return;
    39.         }
    40.         else
    41.         {
    42.             $params['value'] = $params['default'];
    43.         }
    44.     }
    45.  
    46.     $number = $params['value'];    
    47.     $zero = isset($params['zero']) ? $params['zero'] : '';
    48.  
    49.     if ($number == 0 && isset($params['zero']))
    50.     {
    51.         return $zero;
    52.     }
    53.  
    54.     $base = isset($params['base']) ? $params['base'] : '';
    55.     $prefix = isset($params['prefix']) ? $params['prefix'] : '';
    56.     $postfix = isset($params['postfix']) ? $params['postfix'] : '';
    57.  
    58.     $e0 = $params['e0'];
    59.     $e1 = $params['e1'];
    60.     $e2 = $params['e2'];
    61.  
    62.     $ending = '';
    63.     if ($number % 10 == 0)
    64.     {
    65.         $ending = $e0;
    66.     }
    67.     else if ($number % 100 > 10 && $number % 100 < 20)
    68.     {
    69.         $ending = $e0;
    70.     }
    71.     else if ($number % 10 >= 5)
    72.     {
    73.         $ending = $e0;
    74.     }
    75.     else if ($number % 10 == 1)
    76.     {
    77.         $ending = $e1;
    78.     }
    79.     else
    80.     {
    81.         $ending = $e2;
    82.     }
    83.  
    84.     return $prefix . $number . ' ' . $base . $ending . $postfix;
    85. }
    86.  
    87. /* vim: set expandtab: */
    88.  
    89. ?>
    90.  
     
  3. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    tommyangelo
    по-мойму это немного не то, что просил топикстартер

    ckjet
    нужны какие-либо стандартные правила + огромный словарь слов-исключений :)
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Gromo

    Точно, я запарился)

    Тут про склонения, а я про множественное число прислал :)

    Сори)
     
  5. ckjet

    ckjet Активный пользователь

    С нами с:
    6 апр 2011
    Сообщения:
    172
    Симпатии:
    2
    Gromo похоже на то =)
     
  6. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск