Здравствуйте, Кодт, Вы писали:
К>Помогите с формулой, пожалуйста. Весь день головой об стол стучу, что-то никак.
К>Дано: дата (день,месяц,год).
К>Номер недели по ISO — это число 1..53
К>неделя начинается с понедельника
К>первая неделя должна включать в себя первый четверг года
К>нулевая неделя — это 52 или 53 (т.е. относится к прошлому году)
К>Можно пользоваться WinAPI.
SYSTEMTIME SystemTime1;
SYSTEMTIME SystemTime2;
FILETIME FileTime1;
FILETIME FileTime2;
double dNanoSec;
int iDay;
// Получили текущее системное время
GetLocalTime(&SystemTime1);
SystemTime2 = SystemTime1;
//Задали "1января текущего года"
SystemTime2.wMonth=1; SystemTime2.wDay=1;
SystemTime2.wHour=0; SystemTime2.wMinute=0; SystemTime2.wSecond=0;
//Опред.число Тик с 1601 года
SystemTimeToFileTime(&SystemTime1, &FileTime1);
SystemTimeToFileTime(&SystemTime2, &FileTime2);
//Получаем разницу в тиках 2-х дат
dNanoSec = static_cast<double> ((FileTime1.dwHighDateTime - FileTime2.dwHighDateTime) *
0xFFFFFFFF + (FileTime1.dwLowDateTime - FileTime2.dwLowDateTime));
//Определяем текущий день года
iDay = (int) ((dNanoSec / ((double) 24 * 36000000000)) + 1);
Дальше считай сам...
Мой компьютер прогоняет бесконечный цикл за 9 секунд, но, мне кажется, он мог бы сделать это быстрее...