← Назад к вопросам
Склонение слова программист
1.0 Junior🔥 151 комментариев
#PHP Core#Алгоритмы и структуры данных
Условие
Напишите функцию, которая принимает число и возвращает его со словом "программист" в правильном склонении.
Требования
- Функция принимает целое число
- Возвращает строку с числом и правильно склонённым словом
- Учитывать числа от 0 до бесконечности
Примеры
getProgrammers(1); // "1 программист"
getProgrammers(2); // "2 программиста"
getProgrammers(5); // "5 программистов"
getProgrammers(21); // "21 программист"
getProgrammers(22); // "22 программиста"
getProgrammers(25); // "25 программистов"
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Основные правила склонения
В русском языке есть три формы склонения для слова "программист":
- Именительный единственное (программист) - используется с числами, оканчивающимися на 1 (кроме 11)
- Именительный двойственное (программиста) - используется с числами, оканчивающимися на 2, 3, 4 (кроме 12, 13, 14)
- Именительный множественное (программистов) - используется со всеми остальными
Реализация
function getProgrammers(int $count): string {
// Получаем последнюю цифру
$lastDigit = $count % 10;
// Получаем две последние цифры (для проверки 11-19)
$lastTwoDigits = $count % 100;
// Определяем форму слова
if ($lastTwoDigits >= 11 && $lastTwoDigits <= 19) {
// Исключение: 11, 12, 13, 14, 15, 16, 17, 18, 19
$word = программистов;
} elseif ($lastDigit === 1) {
// Оканчивается на 1: 1, 21, 31, 41, ...
$word = программист;
} elseif ($lastDigit >= 2 && $lastDigit <= 4) {
// Оканчивается на 2, 3, 4: 2, 3, 4, 22, 23, 24, ...
$word = программиста;
} else {
// Все остальное: 0, 5, 6, 7, 8, 9, 10, 11, ...
$word = программистов;
}
return "$count $word";
}
Проверка логики
Правило 1 - Числа, оканчивающиеся на 11-19:
getProgrammers(11); // "11 программистов" (исключение, не 11 программист)
getProgrammers(12); // "12 программистов"
getProgrammers(113); // "113 программистов" (113 % 100 = 13)
Правило 2 - Числа, оканчивающиеся на 1 (кроме 11):
getProgrammers(1); // "1 программист"
getProgrammers(21); // "21 программист" (21 % 10 = 1, 21 % 100 = 21)
getProgrammers(101); // "101 программист"
Правило 3 - Числа, оканчивающиеся на 2, 3, 4:
getProgrammers(2); // "2 программиста"
getProgrammers(22); // "22 программиста"
getProgrammers(23); // "23 программиста"
getProgrammers(24); // "24 программиста"
Правило 4 - Остальные (0, 5-10):
getProgrammers(0); // "0 программистов"
getProgrammers(5); // "5 программистов"
getProgrammers(10); // "10 программистов"
getProgrammers(25); // "25 программистов"
Универсальное решение
Для более общего случая можно создать функцию-помощник для любого слова:
function pluralize(int $count, string $one, string $two, string $five): string {
$lastDigit = $count % 10;
$lastTwoDigits = $count % 100;
if ($lastTwoDigits >= 11 && $lastTwoDigits <= 19) {
$word = $five;
} elseif ($lastDigit === 1) {
$word = $one;
} elseif ($lastDigit >= 2 && $lastDigit <= 4) {
$word = $two;
} else {
$word = $five;
}
return "$count $word";
}
// Использование:
echo pluralize(1, программист, программиста, программистов); // 1 программист
echo pluralize(2, программист, программиста, программистов); // 2 программиста
echo pluralize(5, программист, программиста, программистов); // 5 программистов
Этот подход позволяет переиспользовать функцию для других слов и легко расширить функциональность.