Skip to main content

Topic: Kako izračunati..... (Read 3689 times) previous topic - next topic

0 Members and 1 Guest are viewing this topic.

Kako izračunati.....

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

Odg: Kako izračunati.....

Reply #1
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...



Odg: Kako izračunati.....

Reply #2
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

Odg: Kako izračunati.....

Reply #3
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  :)

Odg: Kako izračunati.....

Reply #4
Uskšnji ponedjeljak je prvi ponedjeljak u četvrtom mjesecu (valjda to ne griješim :) )

______________________________________

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.)
if ($znanje == NULL) {read FAQ; use SEARCH; use GOOGLE; } else { use mozak; make post; }

Odg: Kako izračunati.....

Reply #5
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

 

Odg: Kako izračunati.....

Reply #6
Ima neki mladen iz karlovca koji to sigurno zna.
p



Odg: Kako izračunati.....

Reply #9

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...

Odg: Kako izračunati.....

Reply #10
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]
if ($znanje == NULL) {read FAQ; use SEARCH; use GOOGLE; } else { use mozak; make post; }

Odg: Kako izračunati.....

Reply #11
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
if ($znanje == NULL) {read FAQ; use SEARCH; use GOOGLE; } else { use mozak; make post; }

Odg: Kako izračunati.....

Reply #12
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. :)

Odg: Kako izračunati.....

Reply #13
@Bozoou ,držim da bi za početak kalkulacije (izračuna) trebao povjerovati u Uskrs.... 8) .... ;) ...Moj prilog offtopic-u... ;D
Djeca i luđaci su iskreni u svojim kreacijama
Mes

Odg: Kako izračunati.....

Reply #14
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?