Faizan ul Hassan Ответов: 2

Как извлечь день, месяц и год из целого числа (следуя системе дат 1900 года)


Я дал задание, в котором мне даны даты данных в целочисленном формате, например
39083 (= 1/1/2007)

Мне нужно проверить даты одного и того же месяца, чтобы найти среднемесячное значение. Я должен решить ее только с помощью
cmath.h
функции. другой встроенные функции, связанные с датой/временем, не допускаются я использую visual studio.

Что я уже пробовал:

Я не могу придумать логику для этого.

KarstenK

Обратите внимание на високосные годы, ищите полную формулу, потому что есть некоторые изъяны!!!

2 Ответов

Рейтинг:
0

OriginalGriff

Предполагая, что целочисленное значение равно "дням с 1/1/1900", вы должны преобразовать его в дату.
Таким образом, каждый високосный год имеет 366 дней, а каждый невисокосный год-365. Високосные годы-это все те годы, которые делятся на 4 в диапазоне от 1900 до 2099 годов, поэтому я бы создал массив "количество лет"

0, 365, 365+365, 366+365+365, 365+365+365+366 ...
(Потому что 1900 год не был коррекцией конца века високосного года, а 2000 год был коррекцией конца тысячелетия).
Затем я бы использовал это, чтобы проверить номер года, но вычитая каждое значение в массиве из кода даты: это последний год с положительным или нулевым вычитанием.
Значение, которое вы получаете в результате вычитания, - это число дней в году, поэтому просто сделайте то же самое с месяцами (с учетом високосных лет два массива "кумулятивных месяцев" - самый простой способ)
Значение, которое уходит, - это день месяца.


Faizan ul Hassan

Я очень благодарен за ответ. Ваше решение хорошее. Но было бы очень полезно, если бы вы могли предоставить алгоритм или математическую формулу, чтобы получить хотя бы год от целого числа.

OriginalGriff

Я сделал...

Faizan ul Hassan

Вы покончили с массивом. Но я прошу формулу, чтобы получить значение сразу

Рейтинг:
0

Patrice T

Цитата:
Как извлечь день, месяц и год из целого числа (следуя системе дат 1900 года)

Вы не извлекаете, вы вычисляете или конвертируете.
39083 (= 1/1/2007)

Это похоже на кодировку, используемую Excel.
Этот вид кодирования даты просто подсчитывает количество дней между исходной датой и датой, которую вы хотите.
Цитата:
Я не могу придумать логику для этого.

Известно число дней в году, известны правила високосного года, известно число дней в месяце.
вы просто должны применять правила.
Тренируйтесь с листом бумаги и карандашом, решайте Примеры дат вручную, метод, который вы используете, - это ваш алгоритм.

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

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому. И чем скорее, тем лучше.
Когда вы просто просите решение, это похоже на попытку научиться водить машину, обучая кого-то другого.
Создание алгоритма - это в основном поиск математики и необходимая адаптация к вашей реальной проблеме.


Faizan ul Hassan

Дорогой! Я знаю вариант подсчета и применил его. но я думал, что там будет какая-то математическая формула. Однако Спасибо за ваш ответ.

Patrice T

- Я не могу придумать для этого логики."
Затем покажите свой код, попросите оптимизировать.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.