Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2010, 20:03   #1
L.An.gert
 
Регистрация: 11.03.2010
Сообщений: 5
По умолчанию О ВОСТОЧНОМ КАЛЕНДАРНОМ ЦИКЛЕ

В восточном календаре принят 60-летний цикл, состоящий из 12-летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года вывести его название, если 1984 год был началом цикла – годом зеленой крысы.
Надо создать программный код на языках Си и Паскаль.
Буду благодарна за любую идею алгоритма.

Последний раз редактировалось L.An.gert; 11.03.2010 в 20:07.
L.An.gert вне форума Ответить с цитированием
Старый 11.03.2010, 20:14   #2
L.An.gert
 
Регистрация: 11.03.2010
Сообщений: 5
По умолчанию

Нашла на форуме похожый вопрос - там предлагался вариант написания через switch. В моем случае пришлось бы прописывать 60 раз, т.ч. прошу более интересных идей решения=)
L.An.gert вне форума Ответить с цитированием
Старый 11.03.2010, 20:45   #3
osichev
Форумчанин
 
Регистрация: 18.05.2009
Сообщений: 180
По умолчанию

вряд ли кто тебе напишит код
Программист без пива, как спирт без пробки - выдохнется___________-
osichev вне форума Ответить с цитированием
Старый 11.03.2010, 20:45   #4
osichev
Форумчанин
 
Регистрация: 18.05.2009
Сообщений: 180
По умолчанию

но задача интересная
Программист без пива, как спирт без пробки - выдохнется___________-
osichev вне форума Ответить с цитированием
Старый 11.03.2010, 20:46   #5
L.An.gert
 
Регистрация: 11.03.2010
Сообщений: 5
По умолчанию

а я и не прошу код, я прошу подать идею
L.An.gert вне форума Ответить с цитированием
Старый 11.03.2010, 21:03   #6
osichev
Форумчанин
 
Регистрация: 18.05.2009
Сообщений: 180
По умолчанию

а какой год считать началом цикла
Программист без пива, как спирт без пробки - выдохнется___________-
osichev вне форума Ответить с цитированием
Старый 11.03.2010, 21:03   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
function God(x: word): string;
const
  Color: array[0..4] of string = ('зеленый', 'красный', 'желтый', 'белый', 'черный');
  Zver: array[0..11] of string =
    ('крысы', 'коровы', 'тигра', 'зайца', 'дракона', 'змеи',
     'лошади', 'овцы', 'обезьяны', 'курицы', 'собаки', 'свиньи');
  N = 1984;
var
  k: word;
begin
  k := (60 + (x - N) mod 60) mod 60;
  result := Color[k div 12] + ' ' + Zver[k mod 12]
end;
(x - N) mod 60 даёт смещение в цикле относительно его начала
На случай если смещение отрицательно (для даты ранее 1984 г.), то прибавим один цикл и снова найдём остаток.
Сейчас, например, судя по вышенаписанному, однако год "желтый тигра". Чтобы не было названий типа "белый змея" и т.п. делаем 2 массива цветов, и если (k mod 12) in [номера животных мужского рода в массиве] то цвета из первого массива, иначе из второго.
eoln вне форума Ответить с цитированием
Старый 11.03.2010, 21:03   #8
osichev
Форумчанин
 
Регистрация: 18.05.2009
Сообщений: 180
По умолчанию

1984 ? а концом?
Программист без пива, как спирт без пробки - выдохнется___________-
osichev вне форума Ответить с цитированием
Старый 11.03.2010, 21:04   #9
L.An.gert
 
Регистрация: 11.03.2010
Сообщений: 5
По умолчанию

я подозреваю что 2044
L.An.gert вне форума Ответить с цитированием
Старый 11.03.2010, 21:07   #10
L.An.gert
 
Регистрация: 11.03.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Код:
function God(x: word): string;
const
  Color: array[0..4] of string = ('зеленый', 'красный', 'желтый', 'белый', 'черный');
  Zver: array[0..11] of string =
    ('крысы', 'коровы', 'тигра', 'зайца', 'дракона', 'змеи',
     'лошади', 'овцы', 'обезьяны', 'курицы', 'собаки', 'свиньи');
  N = 1984;
var
  k: word;
begin
  k := (60 + (x - N) mod 60) mod 60;
  result := Color[k div 12] + ' ' + Zver[k mod 12]
end;
(x - N) mod 60 даёт смещение в цикле относительно его начала
На случай если смещение отрицательно (для даты ранее 1984 г.), то прибавим один цикл и снова найдём остаток.
Сейчас, например, судя по вышенаписанному, однако год "желтый тигра". Чтобы не было названий типа "белый змея" и т.п. делаем 2 массива цветов, и если (k mod 12) in [номера животных мужского рода в массиве] то цвета из первого массива, иначе из второго.
ух, ты! я тоже пыталась через mod/div писать, спасибо большое за подсказку, огромнейшее спасибо за решение проблемы с падежами - как раз столкнулась. СПАСИБО ОГРОМНОЕ
L.An.gert вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
цикл в цикле (Си++) ConChita Помощь студентам 2 11.03.2010 09:13
Ошибка в цикле Oleg Romanchuk Помощь студентам 10 17.11.2009 06:34
Нюанс в цикле Superlotles Помощь студентам 9 18.10.2009 13:38
Ошибка в цикле Belokuraya Microsoft Office Excel 11 18.08.2009 15:52