Перейти к содержимому

Судебно-медицинский форум forens.ru

Forensic medical forum

Судебно-медицинский форум

Калькулятор для вычисления временных промежутков


Сообщений в теме: 20

#1 myt Отправлено 22 Август 2006 - 22:32

  • tеаm
  • 6 201 сообщений
При работе над алкогольным счетчиком возникла идея обрабатывать временные интервалы программно. То есть не чтобы эксперт сам высчитывал, сколько времени прошло между допустим 12.05 21.08.06 и 03.48 22.08.06, а потом вставлял временной интервал в программу, а программа это сама делела. Загвоздка оказалась в том, что большинство известных программ (тот же эксель) при вычислении промежутков между датами считает, что в каждом месяце 30 дней, а в каждом годе - 360. ПРо учет високаосных лет речь вообще не идет.

Прикрепленный файл  Безимени-1.jpg (16,19К)
Количество загрузок:: 2

В общем, так как код все-равно пришлось писать, то возникла идея сделать отдельную программку. Вводятся две даты и время, выдается ответ в виде недель, дней, часов, минут и секунд в заданнм интервале. Причем программа учитывает реальное количество дней в заданном интервале, так как отличает високосный год от простого, а январь от, нарпимер, апреля. Программа работает с 1756 по 9999 г, так что, хочется надеяться, скоро не устареет :D

реклама

#2 Valerich Отправлено 23 Август 2006 - 07:49

  • смэ
  • 2 985 сообщений
Уважаемые myt, Boroda и Andrey!

Очень рад, что ваш сплоченный авторский коллектив наконец приоткрыл завесу и показал всю амбициозность планов! Думаю, что пока вы доделаете сам счетчки, вы еще пару-тройку программ напишите и еще с десяток запланируете, а там... :?/>
Первым делом я, например, выяснил, что с дня моего рождения прошло уже 9834 дня :?/>
Уверен, что эта программа найдет широкое применение в практике и не только в судебно-медицинской. Так что примите мои поздравления и благодарности за хорошую программу!

Есть и вопрос... Для целей алкогольного счетчика этого, конечно, не нужно, но если использовать программу отдельно, то не стоило ли указать временные промежутки еще и в годах? Например, с моей датой рождения есть только два варианта: или 1404 недели и 6 дней или 9834 дня. А вот если бы еще и ... лет ... недель ... дней, было бы совсем круто. Думаю, это не так сложно сделать, только не уверен нужно ли это...

#3 Boroda Отправлено 23 Август 2006 - 11:47

  • tеаm
  • 1 910 сообщений
Уважаемому myt особая благодарность за программку. Я лично не только при расчётах концентрации алкоголя вынужден часы считать, но и при врачебных делах. Поступил тогда-то, прооперировали первый раз тогда-то и т.д. и т.п.. Так что маленькая программка, но полезная.

#4 myt Отправлено 23 Август 2006 - 13:34

  • tеаm
  • 6 201 сообщений

Valerich сказал:

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

Вроде бы все просто кажется, например:
- между 00.00 31.12.03 и 00.00 01.01.05 - 1 год и 1 день (тоже просто);
- между 00.00 31.12.02 и 00.00 01.01.04 - 1 год и 1 день (тоже вроде просто);
Но... не смотря на то, что в обоих случаях ответы одинаковые, количество дней в заданном промежутке отличается ровно на 1 день (367 и 366 дней).

А с месяцами еще хуже. Ну захотели вы узнеть свой возраст в днях - все понятно - столько то дней. А в годах? Столько то лет + столько-то месяцев + недель + дней. Ответ получили, но... Какие годы в промежутке (365 или 366 дней, и сколько каких)? А месяцы (28,29,30,31 дней и каких сколько)?

Т.е. ответ в месяцах и годах давать можно, но тогда нажо приписывать кучу пояснений (что лень), либо делать ответ, который будет неудобочитаем и сложен в понимании... Например: "в заданном промежутке 45 простых лет + 15 високосных + 5 месяцев (из них столько-то длительностью по 28 дней, 15 месяцев длительностью по 29 дней, столько-то....., ).....

Или берем даты 01.06.03 и 01.07.04. В промежутке:
- 396 дней или
- 56 недель и 4 дня
- или 1 год и 31 день? (а может и 30 дней??) - так как фактического года между датами нет и непонятно, какой год брать 365 или 366...

Точность, в общем, страдает. А так как в эксперитзах и для подсчета промежутков для акушеров (брат у меня программку тут же хватанул :D ) нужны недели или дни, то рашено было на них и остановиться.

#5 Valerich Отправлено 23 Август 2006 - 13:54

  • смэ
  • 2 985 сообщений

myt сказал:

Хотел я так сделать, но встал перед неразрешимой проблемой - проблемой точности результата.

Вот что значит увидеть сразу готовый результат :?/> Нам пользователям это подавай, потом то, а пойди сам сделай - не так все и просто :?/>

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

#6 Boroda Отправлено 23 Август 2006 - 14:58

  • tеаm
  • 1 910 сообщений
Оно конечно с лишними заморочками всем понятно, что не требуется, но если в основе программы лежит реальный грегорианский календарь до 9999 года, то должно быть и решение проблемы месяцев и годов быть.

Опять же ответ, что 20 месяцев по 30, 2 по 28 дней действительно не нужен. Но ведь можно просто тогда 22 месяца вывести. Тоже и с годами. Зачем мне выводить сколько там дней в годах было,достаточно количества самих годов. Я понимаю конечно, что это всё сильно усложнить должно, но для бета версии, когда уже совсем делать нечего будет :D , можно будет ещё и это ввести в программку.

Так что уважаемому Valerich большое спасибо за конструктивные предложения.

Я вот подумал, что если это реальный календарь, то его же можно украсить лет через пять в программной версии 2.0 :wink: и расчётом например дат церковных праздников или дней медиков. В версии 3.0 популярного на планете всей счётчика появятся и ссылки на азиатские календари со всякими аналогами с годами змеи, петухов и прочих зверей :-P Но это уже на пенсии, кстати, сколько дней до неё осталось г-да?

#7 myt Отправлено 23 Август 2006 - 19:17

  • tеаm
  • 6 201 сообщений
Ну, код допустим у меня написан, годы считает, и месяцы. Причем по двум вариантам - общепринятому и моему.

Общепринятый прост - дни делятся на 360, получаем количество лет, остаток от деления делим на 30 - получаем месяцы, в остатке - дни. Но вот беда, за сто лет 5-6 неучитываемых дней года дадут более года разброса. Так что этот вариент я сразу отмел. А если делить на 365, то за 400 лет, допустим, 100 дней лишних набежит за чсет високосных лет. Мне это не нравится... Хотя и работает...

Мой вариант другой. В промежутке между датами годы считаются реальными (календарными). Т.е. берем 01.01.2000 и 31.12.2002.
Между ними 1 год и 364 дня. Проблемы нет.

Но она появляется, если число и месяц раннего года будут меньше числа и месяца позднего года. Т.е. между 01.06.03 и 01.07.05 - 1 год (2004-ый) + еще 396 дней. Тут я пасую, чтобы это было понятно простому пользователю без длинных и нудных моих объяснений (что все наверняка отметили :D ).

Делать же прогу, которая работает приблизительно желания нет, их и так полно.

Впрочем, буду думать, может осенит.

Boroda сказал:

и расчётом например дат церковных праздников или дней медиков.
:D :D Точно... :D И вставить дни рождения разработчиков. Да так, чтобы программа за месяц пользователя начинала извещать: через 30 дней..., через 29 дней... :D Можно и через каждый час, причем чтобы еще комп сама включала, если выключен, но это уже совсем жестоко :D

#8 Andrey Отправлено 24 Август 2006 - 04:18

    хун вен цвинь

  • смэ
  • 3 325 сообщений
Кстати о календарях.
http://calendar.x0.ru/index.php?p=12

вычисление времени (wiki) там далее см. ссылки.
какой-то календарный компонент
http://soft.xyya.ru/...4119/index.html

#9 Valerich Отправлено 24 Август 2006 - 05:59

  • смэ
  • 2 985 сообщений

myt сказал:

Делать же прогу, которая работает приблизительно желания нет, их и так полно.

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

#10 myt Отправлено 25 Август 2006 - 11:22

  • tеаm
  • 6 201 сообщений
Всем огромное спасибо за интерес к теме. Особое спасибо Andrey`ю за ссылки. Благодара им вычислил ошибку в работе программы. Выложенный в первом сообщении темы файл поменял.

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

год високосен (то есть содержит 366 дней), если:
а) его номер делится на 4 и не делится на 100 или
б) его номер делится на 400.

Т.е. предыдущая верся программы правильно работала в промежутке с 1901 по 2099 годы, далее через каждые 400 лет накапливалась ошибка в одни сутки.

Большое спасибо всем за замечания и предложения.

#11 myt Отправлено 26 Август 2006 - 02:28

  • tеаm
  • 6 201 сообщений
По просьбам участников, бэта версия с подсчетом годов и месяцев. Все-таки что-то получилось, и не так уж приблизительно... Просто мне сложно представить, зачем это может понадобиться в счетчике алкоголя? Хотя, если дойдем до "счетчика радионуклидов", то не только годы, века вставлять придется :D .

#12 Boroda Отправлено 26 Август 2006 - 09:09

  • tеаm
  • 1 910 сообщений
Ну вот теперь вообще классно стало. Сейчас пересчитал всё с момента рождения, крещения, окончания школы, института...

Очень забавно! Но предлагаю несколько скучную панель "развеселить". В правом верхнем углу место ещё есть. Так как всё от алкогольного счётчика пошло, то предлагаю программку Эрику Видмарку посвятить и его фото (см в приложении) в правом углу расположить.
Её подписать: Erik Widmark (1989-1945) Father of the formula of the alcoholelimination

Как особую фишку можно ещё внизу время с момента опубликования его формулы в 1922 году выводить. Но не настаиваю, а то ещё побьёте :-P за балдёжный подход к серьёзным проблемам.

#13 myt Отправлено 26 Август 2006 - 11:38

  • tеаm
  • 6 201 сообщений
Я думаю, мы это в алкогольном счетчике реализуем.

#14 Valerich Отправлено 28 Август 2006 - 09:23

  • смэ
  • 2 985 сообщений

Boroda сказал:

Так как всё от алкогольного счётчика пошло, то предлагаю программку Эрику Видмарку посвятить и его фото (см в приложении) в правом углу расположить.

Мне это предложение нравиться, хотя я в разработке не участвовал и права голоса не имею :-P

На сколько я понял, создать такой счетчик было довольно сложно, нужно было учесть массу всяких разных тонкостей. Может быть стоит сделать небольшое описание, открывающееся в отдельном окне. Там описать принципы по которым ведется подсчет в днях, неделях, месяцах и годах, чем эта программа отличается от остальных и т.п. Работа большая, можно и похвастаться :?/> А то сам себя не похвалишь, неделю как оплеванный ходишь! :D

#15 Andrey Отправлено 29 Август 2006 - 01:53

    хун вен цвинь

  • смэ
  • 3 325 сообщений
Несколько соображений.
При первом беглом осмотре программы мне оказалось непонятным наличие нескольких столбцов. После некоторого времени я догадался об их назначении, но не сразу и не интуитивно.

1. Чтобы было интуитивно понятно, думаю, что сожет быть стоит убрать в первом столбце недели?
Когда мы практически представляем временные интервалы, то обычно мы мыслим годами, месяцами и днями. Т.е. 3 года, 5 месяцев и 25 дней.
Это лично я так себе представляю. Может быть кто-то еще и неделями мыслит...

1.1. Может стоит оставить часы, мин и секунды только в последнем столбце? Они все равно не меняются. Хотя это нарушит логику. Вообще нужны они при больших периодах вычисления?

2. Нельзя ли сделать, чтобы дата "to", т.е. "до" которой надо провести отсчет была текущей датой?

3. Month возможно стоит заменить на Months - мн.ч.

4. to на To. Может to заменить на Up to?

#16 myt Отправлено 29 Август 2006 - 09:51

  • tеаm
  • 6 201 сообщений
1. Согласен, выглядит нелогично.
1.1. Над этим я долго мучался, приставал к окружающим с разными вопросами. Например, сколько дней между 2-ыи и 5-ым числами? Ответы: примерно 3/4 опрошенных - 3 дня, 1/8 - 2 дня, 1/8 начинали уточнять, "по 5-ое включительно?". Поняли? Большинство людей, что оказалась для меня новым, эту тему вопринимают абсолютно неосознанно, но по разному.

Первые просто получают разницу путем вычитания из большего меньшего. Вторые - их полные сутки в промежутке интересуют (как правило, это люди, привыкшие работать с табелями, отчетностью и пр.), они же - третьи. Но у первых есть ошибка. Большинство из них про вопрос сколько дней между 3-м и 4-м ответят - 0, а между 3 и 5-ым - 2 дня.

Это я все к чему - к вопросу о часах в программе. Программе этого не объяснишь. Поэтому она считает как первые, если в графах времени оставить нули. Только ошибку со смежеыми числами обходит. А для более продвинутых со временем остается возможность поиграть. Т.е. если в from и to время одинаковое, то программа считает по последние сутки включительно, если в to время несколько ранее, чем во from, то последнеи сутки не учитываются.

2. Сделам. Дейсвительно, как не додумался.
3. Да... Я писал про свой английский... :D
4. Andrey, скажи как лучше, я на слово поверю.

#17 Andrey Отправлено 29 Август 2006 - 09:56

    хун вен цвинь

  • смэ
  • 3 325 сообщений

myt сказал:

4. Andrey, скажи как лучше, я на слово поверю.

Дык. Не уверен, но Up to приятнее звучит и, кажется, имеет смысл "вплоть до" и "включительно"
Но я, пожалуй еще проверю.
Я перевел все тексты про алкогольный счетчик, но тоже нужно проверить с аборигенами. Пытался на словах - не понимают. Думаю надо будет картинки распечатать и показывать им предметно

#18 myt Отправлено 29 Август 2006 - 10:01

  • tеаm
  • 6 201 сообщений
Отлично, пока отпуск не кончился надо доделать.

Последняя версия калкулятора дат - Прикрепленный файл  DTCalk_202.rar (195,65К)
Количество загрузок:: 156

#19 АНТ Отправлено 05 Март 2007 - 22:14

  • team
  • 2 275 сообщений
Я пока в программу myt не вникал. Вспомнил, что не так давно ходил в пенсионный фонд и узнавал данные о страховом стаже. Они тоже пользуются какой-то программой, считающей годы, месяцы и дни во временных промежутках. И программа эта долно быть имеет сертификацию. Можно обменяться опытом.

#20 myt Отправлено 05 Март 2007 - 22:17

  • tеаm
  • 6 201 сообщений

АНТ сказал:

Можно обменяться опытом.
Можно, но вот код программы, чтоб его можно было в свои программы вставлять, они вряд ли дадут.

А у нас цель была именно такой. Калькулятор просто как побочный продукт получился.

#21 GORKOM Отправлено 06 Май 2007 - 22:20

  • участник
  • 9 сообщений
Надо как в армии:
Наберите салаг и пускай деньки считают. :)/>



Сообщество русскоговорящих судебно-медицинских экспертов
Community of Russian-speaking forensic medical experts
© 2006-2018 Forens.ru