Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.12.2009, 19:21
dbtest dbtest вне форума
Прохожий
 
Регистрация: 18.12.2009
Сообщения: 4
Репутация: 10
По умолчанию Синхронизация окончания слова с числом

Добрый день, уважаемые форумчане! У меня проблема следующая:

на основании введенного натурального числа нужно синхронизировать
склонение слова, возьмем любое слово, например УТКА

Проблема в том, что тут бесконечное множество натуральных чисел, диапазон, например if N in [2..4] then, я не могу задавать.

Как я понимаю, нужно сделать что то вроде проверки окончания числа, если оно заканчивается на
1, 21, 31 и т.д то будет "утка",
2, 3, 4 - "утки",
5 - 20 итд уток

Как сие возможно сделать? меня смущают именно эти диапазоны огромные)
Ответить с цитированием
  #2  
Старый 18.12.2009, 19:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

На самом деле, если тв проанализируешь все варианты, тог ты увидишь, что кол-во вариантов не так и велико.
1 утка
2-4 утки
5-20 уток
21 утка
22-24 утки
25-30 уток
31 утка
32-34 утки
35-40 уток
и т.д.

на самом деле у тебя получается:
Код:
1
2
3
4
5
6
If ((N mod 10) = 1) And (N <> 11)
  Then Result := 'утка'
  Else
    If ((N mod 10) In [2..4]) And (Not (N In [12,13,14]))
      Then Result := 'утки'
      Else Result := 'уток';

как-то так.
Ответить с цитированием
  #3  
Старый 18.12.2009, 19:31
dbtest dbtest вне форума
Прохожий
 
Регистрация: 18.12.2009
Сообщения: 4
Репутация: 10
По умолчанию

а мне казалось, с помощью case это реализовать как то лучше будет, нет?)
А если считать, что введенное N натуральное число может быть любым... их же бесконечное множество) типа для любого натурального N найдется натуральное больше него


case N[1]
of '1', '21', '31', : Result := 'Утка';
'2','3','4': Result := 'Утки';
else Result := 'Уток';

Последний раз редактировалось dbtest, 18.12.2009 в 19:33.
Ответить с цитированием
  #4  
Старый 18.12.2009, 19:45
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Через case ты сможешь указать только конечное кол-во вариантов.
Возьми мой код и запусти его в цикле хотя бы до 1000 и проверь результат. Не замучаешься даже до 1000 case расписывать?
Ответить с цитированием
  #5  
Старый 18.12.2009, 19:57
dbtest dbtest вне форума
Прохожий
 
Регистрация: 18.12.2009
Сообщения: 4
Репутация: 10
По умолчанию

замучаюсь...) щас попробую, спасибо
Ответить с цитированием
  #6  
Старый 18.12.2009, 20:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А теперь тоже самое попробуйте для слова - кочерга.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 18.12.2009, 20:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Издеваешься? Я даже не знаю как будет правильно:
5 кочерг или 5 кочергов
Ответить с цитированием
  #8  
Старый 18.12.2009, 20:27
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Сообщение от lmikle
Издеваешься? Я даже не знаю как будет правильно:
5 кочерг или 5 кочергов
И не ты один, в свое время Зощенко очень классно эту тему обыграл.
http://www.ostrovok.de/old/classics/...o/story013.htm
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 18.12.2009, 20:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да, сороковой год, а как пишется - никто до сих пор и не знает
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025