Русское сообщество по скриптингу

Правильные окончания слов после чисел

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Правильные окончания слов после чисел

Сообщение Mr. Frost » 05 ноя 2011, 09:22

Автор: Mr. Frost

Хочу представить небольшой сниппет, который может пригодиться в разных случаях.
Суть:
Думаю все согласятся, что строки вида "30 аммопаков", "21 игрок" читаются приятнее, чем "Аммопаки: 30", "21 игроков(а)". Как добиться, чтобы при изменении числа в плагине изменялось и слово после него по смыслу?
Допустим у нас есть слово "игроки" и число X. Сначала нужно слово превратить в три вида:
A. мн. число, род. п. — "игроков"
B. нач. форма — "игрок"
C. ед. число, род. п. — "игрока"
...а затем узнать последние цифры числа X. Для этого мы узнаём остаток от деления на 10 и на 100:
Код: Выделить всё
new num100 = X % 100
new num10  
= X % 10

Теперь у нас два числа. Как мы будем их использовать? Мы будем их сравнивать с помощью условных операторов.
Код: Выделить всё
 new num100 = X %100, // Узнаём остаток от деления числа на 100
num10 = X % 10; // Узнаём остаток от деления числа на 10
 
// Если 5 ≤ num100 ≤ 20 или num10 = 0 или 5 ≤ num10 ≤ 9...
if(num100 >= 5 && num100 <= 20 || num10 == 0 || num10 >=&& num10 <= 9)
    // ...то возвращаем "игроков"
    return A;
 
// Если num10 = 1...
else if(num10 == 1)
    // ...то возвращаем "игрок"
    return B;
 
// Если 2 ≤ num10 ≤ 4...
else if(num10 >= 2 && num10 <= 4)
    // ...то возвращаем "игрока"
    return C;


Для примера, в прикреплениях код плагина, который делает рестарт через некоторое время, после смены карты и выводит в HUD время, оставшееся до рестарта.

Update #1
Добавил include в аттачи. С ним можно просто использовать функцию:
Код: Выделить всё
#include <wordending>
 
// ...
 
new str
[512];
get_ending(
    n, //Число
    "first ending", // мн. число, род. п
    "second ending", // нач. форма
    "third ending", // ед. число, род. п
    sizeof str-1, // длина
    str // переменная, в которую будет записывать нужное окончание
);

Хочу отметить, что в переменную будет записывать только нужное слово, без самого числа.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Mr. Frost 07 дек 2016, 21:59, всего редактировалось 7 раз(а).
Скупе: b-boy_frost

Мои плагины:
Team Select Menu Customizer 0.1.2beta — изменяем/добавляем персонажей в меню выбора команд.
Buy Menu Management 2.0 — добавляем Extra Items в меню закупок на классик-сервер.
Аватара пользователя
Mr. Frost
 
Сообщения: 368
Зарегистрирован: 06 апр 2011, 19:32
Откуда: Антлантида
Благодарил (а): 16 раз.
Поблагодарили: 73 раз.
Языки программирования: Тамагочи

Re: Правильные окончания слов после чисел

Сообщение DJ_WEST » 22 дек 2011, 11:18

num объявлена? И запятая в конце зачем?
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Re: Правильные окончания слов после чисел

Сообщение CL0NE » 21 янв 2012, 00:11

Fedcomp писал(а):как жаль что amxmodx не поддерживает плюрализацию.

кому нужно - тот добавит, не так ли? ;)

Вы должны зарегистрироваться, чтобы видеть ссылки., но весьма полезная по сабжу.
OMG, что стряслось с amx-x.ru за 4 года?

[align=right]Флудер[/align]
Аватара пользователя
CL0NE
 
Сообщения: 16
Зарегистрирован: 09 июн 2010, 19:59
Откуда: UA-IX
Благодарил (а): 21 раз.
Поблагодарили: 5 раз.
Языки программирования: HTML за еду

Re: Правильные окончания слов после чисел

Сообщение ck001ru » 28 июл 2013, 20:32

Подскажите,а можно сделать,чтобы подставить правильное окончание к слову,где всего два окончания ?
Т.е.: 1 раз, 2 раза, 3 раза, 4 раза, 5 раз, 21 раз, 22 раза, 24 раза ?
Аватара пользователя
ck001ru
 
Сообщения: 74
Зарегистрирован: 05 мар 2013, 03:28
Откуда: Россия, Тольятти
Благодарил (а): 15 раз.
Поблагодарили: 18 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Правильные окончания слов после чисел

Сообщение BACK » 29 июл 2013, 08:55

по остаткам от деления на 10.
Если они равны 0, 1, 5, 6, 7, 8, 9 то будет "раз"
В остальных случаях (если остаток равен 2, 3, 4) то будет "раза"

Добавлено спустя 3 минуты 21 секунду:
Если заметить, то числа 2, 3 , 4 заканчиваются на гласный звук.
А 0, 1, 5, 6, 7, 8, 9 оканчиваются на "Ь" и на согласный звук.
[ ICQ ] - 601991424
[ STEAM ] - ksv741
[ SKYPE ] - krylovserega_

[spoiler]MY PLUGINS:
Default Name Kicker - борьба с плохими никами игроков[/spoiler]
Аватара пользователя
BACK
 
Сообщения: 377
Зарегистрирован: 28 мар 2013, 16:31
Откуда: Magnitogorsk
Благодарил (а): 4 раз.
Поблагодарили: 74 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Пред.

Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5