← Назад к вопросам

Склонение слова программист

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 программистов

Этот подход позволяет переиспользовать функцию для других слов и легко расширить функциональность.