Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.09.2010, 18:30
Новичок

Отправить личное сообщение для Volmond Посмотреть профиль Найти все сообщения от Volmond
 
Регистрация: 05.09.2010
Сообщений: 5

Вычисление четности для произвольной недели в году
Задача:
есть некоторая дата например 1 сентября 2010 года. надо получить все оставшиеся недели года соотвествено нечетная или четная относительно этой даты.
Я написал следующий код:
function chet ($ye,$mon,$d)
{
$titles = Array("нечетная", "четная");
$startStamp = mktime(0,0,0,9,1,$ye);
$dayOfWeek = date("w", $startStamp);
if($dayOfWeek == 0)
{
$dayOfWeek = 7;
}

$dst = intval(1-$dayOfWeek);
$todayDate = date("j",mktime(0,0,1,$mon,$d,$ye));
$todayDay = date("w",mktime(0,0,1,$mon,$d,$ye));
if($todayDay == 0)
{
$todayDay = 7;
}

$monday = $todayDate - $todayDay;
$week = $monday - $dst;
$parity = $week%2;
return $titles[$parity];
}

для сентября она работает на ура, а вот например для ноября вместо того чтобы выдать что 1 ая неделя ноября будет четная она выдает что она нечетная(((((((((
И следовательно возникает вопрос как исправить код чтобы чередование нечетных и четных недель было верным

Или хотя бы подскажите как выглядит правильный алгоритм если кто знает!
  #2  
Старый 05.09.2010, 19:00
гость

 
Сообщений: n/a

шо значит четная/нечетная "относительно этой даты"?

1 сентября и вся эта неделя - четная, следующая неделя - нечетная, дальше четная и т.д. - это что-ли имеется ввиду?

Тогда вычисляешь для 1 сентября и своей даты UNIX-время, скажем, 12:00 понедельника соответствующих недель, считаешь разницу между этими числами, делиш ее на 7*24*60*60 и получаешь сколько недель между ними прошлл, берешь ее % 2.
  #3  
Старый 05.09.2010, 20:18
Новичок

Отправить личное сообщение для Volmond Посмотреть профиль Найти все сообщения от Volmond
 
Регистрация: 05.09.2010
Сообщений: 5

В том что вы предложили есть маленький касяк
дело в том что недели не всегда начинаются с понедельника
например 1 сентября это среда => происходит некорректное вычисление
и понедельник на след неделе остается нечетным вместо того чтобы быть четным(((((((((((
  #4  
Старый 05.09.2010, 20:48
гость

 
Сообщений: n/a

Сообщение от Volmond Посмотреть сообщение
В том что вы предложили есть маленький касяк
дело в том что недели не всегда начинаются с понедельника
да, бля, именно про это я и говорю - вычисли структуру с днем недели, месяцем и прочей фигней, и отмотай до предыдущего понедельника, впиши время 00:00 (или любое другое) и вызови mktime или что там в твоем пхп чтобы получть unix время. Это надо сделать для обоих дат.
  #5  
Старый 05.09.2010, 21:26
Новичок

Отправить личное сообщение для Volmond Посмотреть профиль Найти все сообщения от Volmond
 
Регистрация: 05.09.2010
Сообщений: 5

решил
$sdvig=2;
if (!($month==9)) {$sdvig=(7 - ($spacesNum + $i) % 7) % 7 + 1;}
держит
тока терь проблема если месяц январь сбивается опять чет и нечет(

Последний раз редактировалось Volmond, 05.09.2010 в 21:42.
  #6  
Старый 05.09.2010, 21:57
гость

 
Сообщений: n/a

нихера не понял что ты там решил.
  #7  
Старый 05.09.2010, 21:59
Новичок

Отправить личное сообщение для Volmond Посмотреть профиль Найти все сообщения от Volmond
 
Регистрация: 05.09.2010
Сообщений: 5

я разобрался со сдвигами для одного года но если
сдвиг на несколько лет то календарь уже не состыкуется
  #8  
Старый 05.09.2010, 22:05
Новичок

Отправить личное сообщение для Volmond Посмотреть профиль Найти все сообщения от Volmond
 
Регистрация: 05.09.2010
Сообщений: 5

кароче я просто обнуляю год
если год будет больше скажем чем 2010 то текуший год равен новому году и все пашет
  #9  
Старый 05.09.2010, 22:17
гость

 
Сообщений: n/a

нихера не понял что там за сдвиги

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


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление площади произвольной фигуры методом Монте-Карло Skinny Вычислительная геометрия 4 05.10.2010 13:51
ищу алгоритм вращения вектора вокруг произвольной оси в пространстве. незарегистрированный Реализация, исходники, языки 3 19.05.2010 00:47
Поворот точки вокруг произвольной прямой в 3-мерном пространстве. TrinitroTZ Вычислительная геометрия 8 22.03.2009 20:58
Проверка на четности. гость Математические алгоритмы (другое) 12 23.01.2009 20:51
ищу алгоритм вращения вектора вокруг произвольной оси в пространстве. незарегистрированный Вычислительная геометрия 1 28.03.2007 14:23