IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> даты, разница между двумя датами
compiler
сообщение 20.02.2007 13:58
Сообщение #1


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Существуют две даты. Необходимо учитывая высокосные года найти разницу (в днях).
Идей нет. В ЧаВо ничего не нашел.

Заранее благодарен.


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.02.2007 14:10
Сообщение #2


Гость






Идей совсем нет? Ну, тогда попробуй найти номер дня в текущем году для каждой даты (это было в FAQ-е), и количество високосных лет между заданными годами. Дальше догадаешься?
 К началу страницы 
+ Ответить 
compiler
сообщение 20.02.2007 15:07
Сообщение #3


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(volvo @ 20.02.2007 13:10) *

Идей совсем нет?

В Фаранове написано так
Цитата

Предлагаемый алгоритм подсчета количества дней заключается в вычислении количества дней от даты рождения до конца месяца, а затем и года рождения, количества дней, от начала текущего года до текущего месяца и текущей даты, а также - в подсчете количества полных лет, разделяющих обе даты. Количество лет затем легко пересчитывается в количество дней с учетом длины года (365 дней для обычных и 366 дней для високосных лет). Это очень прямолинейный алгоритм, но, откровенно говоря, мне не пришло в голову ничего другого. Возможно, существует более изящный способ подсчета и Вы его знаете, тогда программная реализация будет другой.

Вот я и подумал может действительно есть более изящный способ...


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 20.02.2007 16:15
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(compiler @ 20.02.2007 15:07) *

Вот я и подумал может действительно есть более изящный способ...

Было уже:
Класс календаря.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.02.2007 16:16
Сообщение #5


Гость






Цитата
может действительно есть более изящный способ
FPC + DateUtils = более изящно... Просто в одну строку...
 К началу страницы 
+ Ответить 
compiler
сообщение 20.02.2007 17:32
Сообщение #6


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Malice
Цитата(Malice @ 20.02.2007 15:15) *

Было уже: Класс календаря.

ты имееш ввиду эту функцию
function days (y,m,d:integer):longint;
begin
if m<3 then begin dec (y); inc (m,12); end;
days:=round(int (y*365.25)+int ((m+1)*30.601)+d-int(y/100)+int (y/400));
end;

А не могла бы ты ее обьяснить...

volvo
Цитата(volvo @ 20.02.2007 15:16) *

FPC + DateUtils = более изящно... Просто в одну строку...

а по подробней... (может ссылочка есть или так расскажеш)

Сообщение отредактировано: compiler - 20.02.2007 17:38


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 20.02.2007 18:02
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(compiler @ 20.02.2007 17:32) *

ты имееш ввиду эту функцию
А не могла бы ты ее обьяснить...

А чего объяснять, работает и слава богу smile.gif
Примерно так:
*365.25 раз в 4 года из 0.25 накопится 1-ца и получится 366..
-int(y/100) - если год делится на 100 убрали ту накопившуюся 1-цу
+int (y/400) - упс, вернули обратно..
+int ((m+1)*30.601) - тоже что-то копится и округляется в нужный момент.
+d - тупо прибавили дни..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 20.02.2007 18:08
Сообщение #8


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(Malice @ 20.02.2007 17:02) *

А чего объяснять, работает и слава богу smile.gif

как в анекдоте про программера, сына, и солнце...
Цитата(Malice @ 20.02.2007 17:02) *

+int ((m+1)*30.601) - тоже что-то копится и округляется в нужный момент.- а что?



--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 20.02.2007 18:11
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(compiler @ 20.02.2007 18:08) *

а что ?

Количество дней в месяце m вестимо..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 20.02.2007 18:13
Сообщение #10


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(Malice @ 20.02.2007 17:11) *

Количество дней в месяце m вестимо..

как то не нравится мне всё это... да еще и округление...


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Malice
сообщение 20.02.2007 18:20
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(compiler @ 20.02.2007 18:13) *

как то не нравится мне всё это... да еще и округление...

А вам шашечки или ехать ? В принципе, не нравится - сделай как фаронов сказал. Хотя и это работает нормально, куда уж изящнее..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 20.02.2007 18:26
Сообщение #12


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(Malice @ 20.02.2007 17:20) *

Хотя и это работает нормально, куда уж изящнее..

наверняка есть колизии ведь тут применяется округление...


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.02.2007 21:41
Сообщение #13


Гость






Цитата(compiler @ 20.02.2007 16:32)
а по подробней... (может ссылочка есть или так расскажеш)

А чего рассказывать?
uses sysutils, dateutils;
begin
writeln('diff = ', daysbetween(strtodate('12/02/2007'), strtodate('10/02/2007')));
end.
Изобретаем велосипед дальше?
 К началу страницы 
+ Ответить 
Bard
сообщение 24.02.2007 14:19
Сообщение #14


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

Репутация: -  3  +


pomoqite reshit' ili nayti alqoritm zadachi na datu.
dayetsa segonyashniy den' nedeli i data(toest' den,mesyats i qod).eshe dayetsa data svoyeqo dnya rojdeniya(toest' den,mesyats i qod). nayti den' nedeli svoyeqo rojdeniya.
cool.gif


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.02.2007 14:23
Сообщение #15


Гость






Вот тут есть все функции, необходимые для решения:
Задачи связанные с календарем.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 25.04.2024 4:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"