RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2424892 views

evp,
я имел ввиду написать более подробно, разложив по полочкам для людей БЕЗ образования в области программирования… ну примерно как вы и сделали под конец всё таки…) Вроде бы я всё понял - но на деле надо проверять, смогу ли я всё правильно выстроить в код, вот мой камень преткновения… :rolleyes: к слову - я очень долго въезжал - почему, если вы говорите, что начинается отсчёт 16го - у вас 17го идёт уже 2421540-й Юлианский день… :rolleyes: :lol: только вчитавшись в текст пару раз понял свою ошибку… буду пробывать… спасибо…

evp,

Код прошел проверки как теоретические на предмет превышения разрядности в разумных диапазонах дат, так и практические. И он на 100% работает, обеспечивая точность, какую может обеспечить нынешний Григорианский календарь.

Это здорово. В таком случае, сегодня я проверю его сам, и добавлю в раздел “Как сделать?”.

Спасибо, что поделился формулами. Я когда-то искал подходящие алгоритмы календаря, но они все были слишком сложные.

Nex уже исправил ошибку втихоря

Конечно исправил опечатку, зачем на форуме будет ошибочный код?

Nex,
мммм… Когда добавишь такой код в раздел - сообщи тут… думаю многие скажут спасибо… включая меня))

Этот алгоритм хорошо работает на датах от 1 г. н.э. и дальше. Но если вы хотите его использовать для отображения дат до нашей эры, то рекомендую добавить вот это:

$year = iif (year < 1, '<<-year+1>> г. до н.э.', '<<year>> г.'))

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

evp:

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

Счет дат, используя Юлианские дни, был предложен еще в 1849 году Гершелем. Соответственно, алгоритм, который я привел, появился еще тогда.

Когда я учился в школе, мы изучали астрономию, а в рамках этой дисциплины нам преподали и базовые знания о календарях и системах счета времени. В эти базовые знания были включены, наряду с информацией о других календарях, также сведения о системе счета Юлианских дней, как наиболее распространенной системе счета времени в астрономии.

Кроме того, в современной информатике различные алгоритмы счета времени имеют своей основой именно этот алгоритм счета по Юлианским дням, даже если это не очевидно с первого взгляда. Хотя бы потому, что для различных систем счета, будь то UNIX-time, ANSI дата или других, очевидна необходимость представления дат в привычном для людей виде - в виде дат Григорианского календаря.

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

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

Один вопрос. Только нафиг вам это надо? :/

SneakBug8, если это ко мне, то, простите - не понял вопроса.

evp:

SneakBug8, если это ко мне, то, простите - не понял вопроса.

Зачем вам нужны грегорианские календари? Пользуйтесь обычным.

Григорианский это и есть обычный.
wikipedia/Григорианский_календарь

Axil, вот это - то, о чем я писал.

Больше того, даже на Википедии по вашей ссылке скрипт неправильно определяет сегодняшнюю дату - он говорит, что сегодня 1 июня 2015. <рука-лицо> А я-то думал, почему у них в статье, посвященной Юлианским дням, в таблице сегодняшний JDN расходится с реальным на 2 дня?

Раз уж про календари и время рассказывают, тогда и я спрошу:
1. Сделал время не через локацию-счетчик, а проверяя #time. Герой ложится спать и просыпается через 8 часов и время у него 28:22. Чтобы этого избежать, прописал так:

IF hour = 24: hour = 0
IF hour = 25: hour = 1
IF hour = 26: hour = 2
etc.

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

Должно же быть как-то правильно?

Правильно тут.
“Прошло 8 часов” в коде должно записываться так:

время += 8*60

После каждого изменения переменной “время”, ты должен заново пересчитать значения минут, часов и т.д.

Nex,
“Вы опять игнорировали мой вопрос, относительно магнитофона…” (с)
Я делал на основе этого примера, только без учёта дней, т.е. когда hour >= 24: day += 1
Отсюда и растут ноги у 28 часов. Как попало время прибавлять я научился.

if hour >= 24:
:loophour
  day = day + 1
  week = week + 1
  hour = hour - 24
  if hour >= 24: jump 'loophour'
end

Проверка и jump там на всякий случай, мало ли, вы двое суток спали.

Кто-нибудь делал алгоритм поиска пути A* на qsp?
Интересует именно версия по обходу графа, а не двухмерной сетки.
Локации с переходами между ними это же граф.

Log in or Register to post comments.