FlyFreak

Online => Birtija => Topic started by: Diogen on March 09, 2015, 01:42:07 pm

Title: Kako izračunati.....
Post by: Diogen on March 09, 2015, 01:42:07 pm
Ovo mi se svidja... da ne budem nepristojan i da kažem 'da mi se svidjaš'  ;) ;)
Evo ti i jedan takav problem na kojemu su se mnogi svojevremeno polomili: izračunati točan datum Uskršnjeg ponedjeljka za zadatu godinu (parametar)  ::)
Damir
Title: Odg: Kako izračunati.....
Post by: bozoou on March 09, 2015, 03:57:58 pm
Hehe, hvala. Nisam htio ispasti prehvalisav, ali zaista mislim da spajajući moje znanje i znanje modelara/elektroničara mogu ispasti krasne stvari. Mislim, osvrnemo li se oko sebe, vidimo da je takva budućnost već svuda oko nas...al pravi potencijal je ogroman. Šteta bi bilo samo promatrati taj razvoj i ne biti dio toga :)


Quote
Evo ti i jedan takav problem na kojemu su se mnogi svojevremeno polomili: izračunati točan datum Uskršnjeg ponedjeljka za zadatu godinu (parametar)
Iskreno, ne vidim problem  :)
Istina, ovdje već puno pomaže ugrađena klasa new Date() koja je dio programskog jezika Javascript, nešto slično imamo i u PHP-u, a vrjerujem da i ostali objektno orijentirani jezici nekako rade s vremenom. Poanta je da se vrijeme vodi u milisekundama od 1970 g. kad se valjda krenulo s računalnim brojanjem vremena. I sad te klase znaju za svaku vrijednost milisekundi, koja je to godina, mjesec, dan, sat, min , sec. Kad želimo skakat s jednog datuma+N dana, onda samo dodajemo taj vremenski interval kao vrijednost milisekundi na datum od kojeg krećemo.
Tipa danas u milisekundama je: 1425912200227 (to je zaista točan broj, hehe)
I želimo dodati na danas jedno 41 dan, to bi bilo: 1425912200227 + 41*24*60*60*1000
Iz dobivene vrijednosti u milisekundama opet putem spomenute klase lako očitamo godinu, mjesec, dan...
Naravno klasa nudi i inverz, da iz godine, dana, mjeseca...isčitamo vrijednost toga datuma u milisekundama.
S takvim alatom (klasom), gornji problem je lako rješiv. Glavna caka je znači prvo napraviti takav alat ukoliko ga programski jezik nebi nudio. Ako krenemo iz nekog poznatog dana u prošlosti, to je više manje čista matematika uzimajući u obzir da je svaka četvrta godina prijestupna....i koliko koji mjesec ima dana..

Kako bi to pomoglo u gornjem problemu. Uskšnji ponedjeljak je prvi ponedjeljak u četvrtom mjesecu (valjda to ne griješim :) )
Uzeli bi znači datum 1.4. proizvoljne godine....konvertirali to u milisekunde. Osim milisekundi, klasa nam može reći i koji je to dan u tjednu, brojevima od 0-6. Sad iz toga vidimo koliko imamo dana do ponedjeljka. Ako imamo recimo 5 dana do ponedjeljka...radimo gore spomenuto zbrajanje datuma u milisekudnama. Iako ovdje možemo i direktno zbrojiti samo dane, jer nam je jasno da sigurno nećemo preskočiti u idući mjesec...




Bemu, vidim sad da nemam pojma kad pada Uskrs :) . Koliko vidim to je prva nedjelja nakon prvog punog mjeseca nakon 21.3.  ...Princip bi morao biti sličan kao gore, samo treba dodati na sve i računicu sa tim punim mjesecom koji bi se morao nekako dati analitički promotriti. Samo neznam previše o kretanju mjeseca da bi mogao olako nešto zaključiti... Ako pretpostavim da puni mjesec dolazi u pravilnim intervalima, onda je stvarno slična priča gornjoj...


Title: Odg: Kako izračunati.....
Post by: Diogen on March 09, 2015, 09:11:32 pm
Ovo je tipičan problem koji je lak na prvi pogled..a onda potoneš sve dublje i dublje rješavajući ga.
Uskrs može biti po gregorijanskom ili julijanskom kalendaru, čak se u nekim godinama i poklapaju. Osim toga prelomna je godina 1582, pa se ne može računati istom rutinom.  Ovo nije problem za mučenje programera, nego ima praktičnu primjenu - računanje slobodnih dana !


Pošto su ova tri posta totalni offtopic, molim admina da ih prebaci u 'Birtija' ... proizvoljan naslov :)
Damir
Title: Odg: Kako izračunati.....
Post by: bozoou on March 09, 2015, 09:46:20 pm
Ne mogu možda vidjeti težinu problema kad mi nije jasna problematika.  Očito znam premalo o Uskrsu, gregorijanskom ili julijanskom kalendaru...ali ovako laički ne mogu baš naslutiti puno kombinacija.


Quote
Ovo je tipičan problem koji je lak na prvi pogled..a onda potoneš sve dublje i dublje rješavajući ga.


Dok za onaj algoritam za analizu koji sam spomenuo....je problem koji se na prvu čini na granici mogućeg (mnogi su rekli da je nemoguće) ..a onda potoneš još dublje i dublje rješavajući ga xd. Mislim da je dosad otišlo jedno 500-700 sati rada na onaj problem  :)
Title: Odg: Kako izračunati.....
Post by: faldomak on March 09, 2015, 09:51:02 pm
Uskšnji ponedjeljak je prvi ponedjeljak u četvrtom mjesecu (valjda to ne griješim (http://www.flyfreak.net/Smileys/LightB/smiley.gif) )

______________________________________

Ajde na vjeronauk :)

________________________________________

A mogao bi proučiti i povijest ITa - koja je veza 1970 i 2038?

zašto je 1.1.1970 epoch time u posix svijetu ( a od tuda to pokupili i C i java itd.)
Title: Odg: Kako izračunati.....
Post by: Diogen on March 09, 2015, 09:52:53 pm
Netočno -- ajde na tečaj astronomije  :o  !
Uskrs može biti i u ožujku, ali ne prije 21.III !
kako rekoh, ova računica je tipičan 'pad u problem'..
Damir
Title: Odg: Kako izračunati.....
Post by: hsaraga on March 09, 2015, 10:04:01 pm
Ima neki mladen iz karlovca koji to sigurno zna.
p
Title: Odg: Kako izračunati.....
Post by: srepfler on March 10, 2015, 10:10:15 am
Ako sta pomaze



https://www.assa.org.au/edm (https://www.assa.org.au/edm)
Title: Odg: Kako izračunati.....
Post by: Jarun75 on March 10, 2015, 10:26:45 am
Ako sta pomaze



https://www.assa.org.au/edm (https://www.assa.org.au/edm)

šteta ovaj kalendar je samo do 2299 godine  :D :D :D
Title: Odg: Kako izračunati.....
Post by: bozoou on March 10, 2015, 03:26:02 pm

A mogao bi proučiti i povijest ITa - koja je veza 1970 i 2038?



Koja? :)




vidim da je neka binarna nebuloza, tj. da će 32 binarne znamenke odbrojati do kraja. Ne kužim zašto nisu uzeli više binarnih znamenki...
Title: Odg: Kako izračunati.....
Post by: faldomak on March 10, 2015, 03:36:35 pm
Kada se vrijeme sprema ili računa kao 32-bit signed integer kao broj sekundi od 00:00:00 UTC 01.01.1970 (epoch) max time/date koji se može izračunati je 03:14:07 UTC 19.01.2038

što godinu 2038 dovodi u isti stauts "problema" kao i Y2K

Osim što je teško vjerovati da će u 2038 postojati 32bitni sustavi i zapisi - pa se problem rješi sam.

[attachimg=1]
Title: Odg: Kako izračunati.....
Post by: faldomak on March 10, 2015, 03:42:19 pm
Zaboravih: računanje vremena na ovaj način ne vodi računa o "prijestupnoj sekundi" - pa zapravo nije potpuno točno.

http://hr.wikipedia.org/wiki/Prijestupna_sekunda (http://hr.wikipedia.org/wiki/Prijestupna_sekunda)
Title: Odg: Kako izračunati.....
Post by: bozoou on March 10, 2015, 08:58:10 pm
I dalje ne kuzim zasto nisu uzeli ta dva 32-bit integera, i onda kad prvi dodje na 11111111 1111111 11111111 11111111, drugi samo okrenu na 00000000 00000000 00000000 00000001 i vrte dalje iz nule prvog. Mislim bubetam, ne kužim preveć principe tih background stvari...


 U svakom slučaju, ekonomski sustav se nebude previše naspavao noć sa 18-og na 19.01.2038. :)
Title: Odg: Kako izračunati.....
Post by: Remote on March 10, 2015, 09:19:43 pm
@Bozoou ,držim da bi za početak kalkulacije (izračuna) trebao povjerovati u Uskrs.... 8) .... ;) ...Moj prilog offtopic-u... ;D
Title: Odg: Kako izračunati.....
Post by: papaja007 on March 18, 2015, 10:32:37 pm
Pa ako već nisi vjernik katolik, s tog gledišta za tebe je Uskrs dan kao i drugi i također činjenica. Jel možda moraš vjerovati u ponedjeljak? Ako ćemo baš banalizirati i filozofirati?