» TeamX (Архив Форума)«


Форум TeamX » Исследования » Правильные окончания (Из закромов TeamX-Tech)

Переход по темам
<< Пред. След. >>
Единственная страница этой темы

 
Raven
Пользователь

Откуда: Владик
Регистрация: Февр. 2004

Всего: 408 сообщений

Итак, начинаю потихоньку выносить на форум содержимое TeamX-Tech. В хронологическом порядке и с переосмыслением :-) Исследованием это не назовёшь - зато наработка :-)

Сегодняшняя тема: Генерация правильных окончаний при использовании чисел в диалогах.

Предположим, ваш критер должен назвать число - денег, дней - чего угодно. Число генерируется автоматически, не прописано заранее. После числа - наименование подсчитанного объекта: напр., 15 дней.

Скорее всего, вы сделаете это так (пусть get_value - процедура-генератор числа):

display_msg(get_value+" дней");

Неприятность в том, что если get_value вернёт 1, 2, 3, 24, 51 и т.д. вы получите царапающее глаза "1 дней", "24 дней" и т.д.

Для борьбы с этим можно воспользоваться такой вот процедурой:
-------------------------------------
procedure generate_ending(variable num) begin
 variable last_digit;  //последняя цифра
 variable tens_last_digit; //предпоследняя цифра
 
 last_digit:=days%10;
 tens_last_digit:=days%100-last_digit;

 //1 день, 21 день, но 11 *дней*. Т.е. если tens_last_digit==1, то окончание "дней"
 if  last_digit==1 and
  (tens_last_digit>1 or tens_last_digit==0)
  then return days+mstr(100);
 
 //Выбираем окончание
 else if last_digit>=2 and last_digit<=4 and
  (tens_last_digit>1 or tens_last_digit==0)
  then return days+mstr(101);
 
 else return days+mstr(102);
end
-------------------------------------
-------------------------------------
{100}{}{ день}
{101}{}{ дня}
{102}{}{ дней}
-------------------------------------

Меняем первоначальный вариант на:

display_msg(generate_days(get_value));

и всё.

Теперь будет "21 день", "54 дня", "714 дней"и даже  "2567821 день" :-)

Аналогично - для монет, патронов и чего угодно ещё. Для этого не придётся менять ничего, кроме msg-файла.

Отправлено: 10:44 - 25 Янв., 2005
Oleg1969
Пользователь

Откуда: Саратов
Регистрация: Май 2006

Всего: 168 сообщений

Извините, что поднимаю старую тему, но данный скрипт нормально не работает... Попробуйте ему скормить цифирь 14 или 13...

Будет работать тока если заменить на

tens_last_digit:=(days%100-last_digit)/10;

или на

(tens_last_digit>10 or tens_last_digit==0)

тогна нормальное окончание выводит...

-----
За сим прощаюсь, Олег.

Отправлено: 15:45 - 3 Авг., 2006
 

Переход по темам
<< Пред. След. >>
Единственная страница этой темы


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com