|
|||||||
Алгоритм склонения существительных после числительных
Время создания: 09.10.2010 12:56
Текстовые метки: алгоритм, язык
Раздел: Компьютер - Программирование - Алгоритмы
Запись: xintrea/mytetra_syncro/master/base/0000001623/text.html на raw.github.com
|
|||||||
|
|||||||
Алгоритм склонения существительных после числительных В первой части Терминатора™ Рис Кайл рассказывает о том, как круто роботы научились маскироваться под людей. Что сейчас у них настоящие кожа и волосы, они потеют и т. п. Про предыдущие же модели он говорил, что их легко было отличить по резиновой коже. Думаю, что ещё более ранние модели отличались совсем просто — они говорили: «Солдат Крис Катарн, убил 10 враг, потратил 342 патрон, получил 0 ранение» и т. п., чем сразу палились. Ведь до сих пор, несмотря на развитие веба, на многих сайтах можно встретить «50 пользователи», «1 комментарии», «0 сообщения» и т. п. А ведь насколько приятней, когда сайт говорит с тобой на человеческом языке и правильно спрягает слова по числам. И ведь сделать это совсем несложно. Ниже приведены простые готовые функции, которые позволяют решить эту проблему на PHP и Javascript. Они настолько просты, что не составит труда перенести их на любой другой язык. В функцию передаётся число сущностей, для которого нужно подобрать окончания, и массив слов (или окончаний для слов) для чисел 1, 4 и 5. Например ['устрица', 'устрицы', 'устриц']. PHP: /** * Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний * @param $number Integer Число на основе которого нужно сформировать окончание * @param $endingsArray Array Массив слов или окончаний для чисел (1, 4, 5), * например array('яблоко', 'яблока', 'яблок') * @return String */ function getNumEnding($number, $endingArray) { $number = $number % 100; if ($number>=11 && $number<=19) { $ending=$endingArray[2]; } else { $i = $number % 10; switch ($i) { case (1): $ending = $endingArray[0]; break; case (2): case (3): case (4): $ending = $endingArray[1]; break; default: $ending=$endingArray[2]; } } return $ending; } JavaScript: /** * Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний * @param iNumber Integer Число на основе которого нужно сформировать окончание * @param aEndings Array Массив слов или окончаний для чисел (1, 4, 5), * например ['яблоко', 'яблока', 'яблок'] * @return String */ function getNumEnding(iNumber, aEndings) { var sEnding, i; iNumber = iNumber % 100; if (iNumber>=11 && iNumber<=19) { sEnding=aEndings[2]; } else { i = iNumber % 10; switch (i) { case (1): sEnding = aEndings[0]; break; case (2): case (3): case (4): sEnding = aEndings[1]; break; default: sEnding = aEndings[2]; } } return sEnding; } Не забудьте отдельно обработать случай, для числа 0. Просто написать, например, «0 записей» не достаточно. Нужно как минимум написать «Записей нет» или изменить дизайн, скрыв вообще пустой блок с записями. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|