![]() |
|
Модераторы: bsa |
![]()
|
|
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Так, например:
Добавлено через 1 минуту и 25 секунд Или так... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Смотрю, энтузиазм угас)))
Вот моё видение программы:
Можно сходить к вечному календарю, провериться... Это сообщение отредактировал(а) feodorv - 4.5.2013, 23:56 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
||||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Не угас
Я не сильно долго сиплюсплюсю, поясните пожалуйста, что за штуки такие в
вот это ещё
Я повыше уже спрашивал, Вы, наверно, не заметили, что такое 0xe0? |
||||
|
|||||
| feodorv |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
С этим ключевым словом подпрограмма встраивается в код в месте вызова (то есть сколько вызовов, столько раз возникает код данной подпрограммы). Замена #define'а в С (хотя в C тоже можно инлайнить). Без инлайна можно, сильно хуже не будет. Не нравится это ключевое слово - удаляйте... Это бесконечный цикл, аналог while(1){ } или Вашего do{ }while(1); Выглядит попроще, вот и предпочитаю его...
Здесь все внутренние выражения можно опустить, остаются одни точки с запятыми, вот и получается for(;;){ }
Это Вы у Microsoft спросите, не меня:
Взято отсюда. Согласно этому описанию и проводится проверка на 0xe0... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||||
|
|||||||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
А можете подробнее рассказать о формулах в dayOfWeek? Тяжело понимается, особенно первая строка внутри скобок
|
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Распишите подробнее:
Что за формула? Вычисляется число дней, прошедших с 1 января 1-го года нашей эры по 1-е число интересующего нас месяца, при том что известно, что 01.01.0001 - это понедельник (сходите в тот же "вечный календарь"). Чему равно число таких дней? Если бы не было поправок на високосность, то просто (year-1)*365 + (число дней от начала года до начала месяца). Потом мы всё равно будем делать %7 (это если, как следует порядочным программистам C/C++, отсчитывать от нуля: 0-понедельник, 1-вторник, ..., 6-воскресенье). Поскольку 365 % 7 = 1, то формула упрощается до безобразия: year-1+yDay (здесь yDay - то самое число дней от начала года до начала интересующего нас месяца, то есть DayForwUniversal[month-1]). (У меня, кстати, неправильно написано year+6 Осталось учесть високосность. Високосным год признаётся, если он без остатка делится на 4, за исключением особых лет, которые делятся на 100, но не делятся на 400 (без остатка). То есть, например, 1600 и 2000 - високосные года, а 1700, 1800, 1900 - не високосные. Сколько же дополнительных високосных дней, случившихся за период с 01.01.0001 по начало текущего года, нужно учесть? Во-первых, високосность текущего года уже учтена, когда определялась переменная DayForwUniversal, следовательно номер текущего года нужно сократить на 1 (например, чтобы для какого-либо месяца 2012 года не учитывать ещё раз високосность этого 2012 года): И уже потом добавим число лет, делящихся на 4 без остатка: Но из этого числа нужно вычесть года, чьи последние две цифры - нули: Однако, делящиеся на 400 нужно оставить, получается полная формула: Ну а потом определяем день недели путём %7 (это в измерении 0-понедельник, 1-вторник, ..., 6-воскресенье). Чтобы перевести это в измерение 1-понедельник, 2-вторник, ..., 7-воскресенье (как у Вас), нужно добавить единицу: Получаем день недели 1-го числа интересующего нас месяца интересующего нас года (из расчёта 1-понедельник, 2-вторник, ..., 7-воскресенье) Добавлять к weekDay значение понедельника (то есть 0) не обязательно))) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Потрясающе, спасибо большое, как прозрел)
А возможно ли как-то реализовать выделение другим цветом праздничных дней? |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Можно, через SetConsoleTextAttribute, но зачем? Тогда придётся придётся и праздничные дни выделять красным, а в России праздники непостоянны... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| zeitgeistz |
|
|||
|
Новичок Профиль Группа: Awaiting Authorisation Сообщений: 36 Регистрация: 23.4.2013 Репутация: нет Всего: нет |
Ладно, закончим на этом, спасибо большое за помощь
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |