Разминка для мозгов: правильная дата
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Предлагаю очередную простенькую задачку для разминки мозгов.
Необходимо написать функцию, прототип которой выглядит так:
В качестве аргументов функция получает три целых числа в диапазоне 1..99.
Функция должна возвращать строку следующего содержания:
Високосные года во внимание не принимать.
Проверку аргументов на принадлежность диапазону 1..99 не делать.
Можно использовать все возможности языка C++ и STL.
Задача может быть решена разными способами. Поэтому, если кто-то уже опубликовал свой вариант, попробуйте найти другое, желательно лучшее, решение. Краткость и эффективность приветствуются.
Наивная реализация (високосный год учитывается):
http://rextester.com/DNTTKS53050
Croessmah, високосность у тебя проверяется неправильно (см. признаки високосности).
Кстати, хорошей разминкой для мозгов было бы написать класс для работы с датами (
DateTime
).С возможностью вычитать даты друг из друга (получать разницу), прибавлять с дате определенное количество дней, месяцев и т.п.
Посоветовал бы тебе не писать таких конструкций, т.к. они сложны для восприятия (проходится напрягать мозг, чтобы понять, что тут происходит).
Если привести это к нормальной форме, то будет гораздо лучше:
Спасибо за совет, конечно, но я в курсе. Это код для форума, а не для нормальной программы.
В каком месте? Если делится на 4, то високосный. На 100 и на 400 нет смысла проверять — число от 1 до 99.
При таком подходе :
Лучше вообще time_point или boost::date_time
Что мне нравится в Croessmah, так это хорошее знание STL. Мысль про std::next_permutation мне даже в голову не пришла.
Только во дату ты неправильно форматируешь. По условию задачи сепаратор — прямой слэш, а у тебя — точка.
А «НЕ-наивную реализацию» покажешь? ;-)
Да, косяк ))) Как по мне, так лучше вообще воспользоваться локалью.
Возможно, но не сегодня. Тыкаю в БП паяльником, так что особо некогда )))
Да, кстати, если дата в формате dd/mm/YY — как будет выглядеть 2015 год в этом случае? А 1988?
Тогда смысл задания полностью теряется. Задача как раз самому реализовать подобный функционал. Написание велосипедов — это очень хорошо для обучения.
Ну это всё-таки тренировочная задача, а не кусок реального проекта ))