Re: задача для программистов

Zhelev

Help:
Задача: рассчитать возраст человека с точностью до дня. Есть две даты: дата рождения человека и дата, на которую рассчитываем возраст. Даты задаются в обычном формате, например 13.10.1982 (10-месяц)-дата рождения и 15.11.2006 - дата расчета. Необходимо рассчитать возраст человека в формате: X=сколько полных лет прожил человек; Y=сколько полных месяцев прожил человек, Z=сколько полных дней прожил человек.
Интересует сам алгоритм, чтобы его можно было запрограммировать!
Алгоритм для определения точного числа прожитых лет и месяцев уже есть!
Может кто-то уже решал такую задачу?
Можно и код данного алгоритма, если у кого есть!

akkylla

По единичке прибавляй не ошибешься

Zhelev

О-О-О, прямо ты гений!
Нобелевскую премию в студию!

danilov

Хммм... А что значит полных месяцев? Например, родился 2 февраля, Сколько полных месяцев будет 3-го марта этого же года. И дней сколько?

Helga87

Укажи язык, на котором тебе надо решить задачу. Потому что, например, на C# решение для количества дней будет выглядеть так:
 
DateTime from = DateTime.ParseExact("12.04.1961", "dd.MM.yyyy", null);
DateTime to = DateTime.ParseExact("17.11.2006", "dd.MM.yyyy", null);
Console.WriteLineto - from).TotalDays);

Corrector

человек просит алгоритм, а не
ParseExact

Helga87

Алгоритм — последовательность четко определенных действий, выполнение которых ведет к решению задачи. Алгоритм, записанный на языке машины, есть программа решения задачи.
То, что я привел, является алгоритмом. Вопрос лишь в том, набор каких средств доступен автору темы. Его я и задал в своем первом сообщении.

poi1981

пиши псевдокод, не ошибёшься

Helga87

легко. Для того, чтобы на конкретной технологии реализовать алгоритм достаточно написать только функцию number_of_seconds_from_world_beginning:
start = number_of_seconds_from_world_beginning_UTC(date_start);
end = number_of_seconds_from_world_beginning_UTC(date_end);
print truncateend - start) / 86400);

Помогло это автору темы?

buka

это не есть правда

Helga87

где я ошибся?

korsar0156

если между date_start и date_end количество переходов на летнее время больше
количества переходов на зимнее, то твой алгортим один день не посчитает.
если truncate заменить на округление, то всё ок будет.

vall

когда с датами работаешь нельзя быть до конца увереным что всё точно работает.
НАСА решило шатл в новый год на орбите не держать — он сцуко не знает что такое новый год =)

durka82

А зачем вообще учитывать переход на зимнее/летнее время?
Есть же страны, где такого различия вообще нет.
А день вроде бы учитывается високосными годами, а не переводом.
Так что достаточно определить кол-во прошедших дней по известной формуле.
Кол-во лет, а тем более месяцев, вычисляется несколько сложнее, но тоже на основании кол-ва прожитых дней.

slonishka

А зачем вообще учитывать переход на зимнее/летнее время?
Есть же страны, где такого различия вообще нет.
а почему бы и не учесть? есть же страны, где переходят на летнее время...

durka82

Но смена времени не влияет на то, сколько реальных лет/месяцев/дней прожил чел!
Речь ведь не шла про часы?

slonishka

привёл пример такого "влияния".

buka

тут ужо подробно усё расписали
в двух словах можно было сказать так: день (календарная единица) ≠сутки (24 часа)

durka82

Еще раз повторяю вопрос: какой смысл имеет календарное время жизни человека?
Вот какой смысл имеет реальное время жизнь человека - еще более-менее понятно, а вот с календарным как-то не очень
Иначе получается формулировка задачи ради самой задачи, а не ради решения реальной задачи...

slonishka

реальное время жизни человека
это что такое?
смысл календарного времени в том, что нужно его посчитать. а если число переходов на летнее время меньше числа переходов на зимнее за учётный период, то алгоритм может работать некорректно (с ошибкой в один календарный день).

Helga87

если между date_start и date_end количество переходов на летнее время больше
количества переходов на зимнее, то твой алгортим один день не посчитает.
если truncate заменить на округление, то всё ок будет.
забыл сказать. время в алгоритме в UTC (т.е. по Гринвичу). Там нет переходов на летнее/зимнее время.

vall

о! точно, тогда всё правильно.

Helga87

я просто привык жить, что в компе время в UTC считать надо и сначала не понял, почему народ негодует.
Оставить комментарий
Имя или ник:
Комментарий: