Udv!
Egy kis segitsegre lenne szuksegem. Arrol lenne szo, hogy hogyan lehet programilag megallapitani egy adott datumrol hogy az nyari vagy teli idoszamitasba esik? Egeszen pontosan az kellene hogy meg tudjam hatarozni, hogy Marcius utolso vasarnapja 01:00 es Oktober utolso vasarnapja 02:00 kozott van-e. A gondom az utolso vasarnap kinyeresevel van.
Tudnatok ebben segiteni egy kicsit? Faradt vagyok hogy ertelmesen tudjak gondolkodni :}} (Meg nem voltam szabadsagon)
PLC-ben lesz implementalva, ugyhogy a nyelvspecifikus fuggvenyek nem jok. Csak es kizarolag if segitsegevel ha lehet.
Elore is koszonom,
Balogh Szabolcs
- 3403 megtekintés
Hozzászólások
Van egy ilyen algoritmus vagyis fuggveny, hogy:
double get_julian_date(int ye,int mo,int da)
{
int lya;
double jd;
if ( mo<=2 ) ye--,mo+=12;
if ( ye>1582 || ( ye==1582 && mo>10 ) || ( ye==1582 && mo==10 && da>14 ) )
lya=(2)-(ye/100)+(ye/400);
else
lya=0;
jd= (double)lya+
1720994.5+
(double)(((long)ye*1461L)/4L)+
(double)((153*(mo+1))/5)+
(double)da;
return(jd);
}
ez visszaadja az adott e'v (ye), honap (mo) es nap (da)-ra vonatkozo julian-datumot (ez olyasmi mint a timestamp, csak napban, es idoszamitas elott 4317 ota szamoljak, manapsag olyan 2453xxx korul ja'r).
Ennek a 7-es marade'ka visszaadja a he't napja't:
function get_dayofweek($ye,$mo,$da)
{
$ye=(integer)$ye;$mo=(integer)$mo;
if ( $mo<=2 ) { $mo+=12;$ye-=1; }
$r=(integer)(5*$ye/4)+(integer)(13*($mo+1)/5)+(integer)$da-(integer)($ye/100)+(integer)($ye/400)+6;
return($r%7);
}
(bocs, ez csak php-ben van meg...:])
innen ma'r relative egyszeru": kiszamolod hogy marc 31 a he't milyen napja'ra esik, es addig lepteted vissza, amig vasarnapot nem kapsz. Akkor kezdodott a nyari idoszamitas. Es forditva, okt 31-gyel detto ugyanez, akkor volt ve'ge.
A.
- A hozzászóláshoz be kell jelentkezni
Koszonom a valaszt. Igy elso ranezesre kicsit komplikaltnak tunik szegeny automatanak (nagyjabol assambler szeru a programozasi nyelve), de kierul majd miutan alaposan atneztem es megertettem.
- A hozzászóláshoz be kell jelentkezni
Szerintem asm-ben sem annyira veszes, egy if van benne es par maradekos es/vagy ege'szoszta's. Inkabb ezutobbi lehet a szuk keresztmetszet, bar mindig vegtelenszer jobb a helyzet, mintha to"rtsza'mokkal kellene operalni...
- A hozzászóláshoz be kell jelentkezni
Gondolkodom valami olyasmin, hogy a (31 - aktualis nap) valamint a (6 - aktualis dayofweek) kombinaciojabol nem-e lehet megkapni valahogy hogy marcius utolso vasarnapja utan, illetve elotte oktober utolso vasarnapja elott vagyok-e
Ram ferne mar egy szabadsag :}}
- A hozzászóláshoz be kell jelentkezni
Hm, mi is a pontos definicio? Tehat, ha marc 31 az szombat, akkor mikor kezdodik a nyisz (24/25-e'n ejjel vagy 31/apr 1 e'jjel), illetve ha marc 31 az vasarnap, akkor mikor mezdodik (23/24-en ejjel vagy 30/31-en ejjel). A tobbi eset nyilvanvalo...
A.
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy hülyeség, de csak brainstorming szinten: nem lenne értelme tárolni ezeket? Mennyi időre tervezed az automatát? Legyen mondjuk 10 év. Az 20 byte.
2007 március utolsó vasárnap, 2007 október utolsó vasárnap, 2008 március utolsó vasárnap, 2008 október utolsó vasárnap, stb.
Vagyis lenne egy ilyen tömböd, hogy:
25,28,30,26,stb.
És csak ebből kéne kiválasztani az (év-2007)*2., ill. az (év-2007)*2+1. elemet.
--
Debian - The "What?!" starts not!
- A hozzászóláshoz be kell jelentkezni
Nem biztos, hogy hueseg. Vegul is annyi helyem van hogy eltaroljak akar tobbet is. Ha nem talalom meg a kapcsolatot a hatralevo napok szama es az aktualis nap a hetbol kozott, akkor lehet az lesz belole. De erzem, hogy nagyon ott vagyok a koztuk levo kapcsolat kornyeken, de csak nem akarja felfedni magat :}}}
- A hozzászóláshoz be kell jelentkezni
Gondolkodtam a dolgon, és rájöttem, hogy ez jó megoldás. 16 év adatait kell tárolnod, 32 byte-on, a 17. évtől kezdve ismétlődik.
--
Debian - The "What?!" starts not!
- A hozzászóláshoz be kell jelentkezni
Hellyel-kozzel, inkabb 28 e'v adatait kell tarolni, ha jol tevedek (legalabbis 7 es 4 legkisebb kozos tobbszorose a 28), 28 e'ves periodusban ismetlodik. Es csak 2100-ig... bar akkor mar valoszinuleg nem lesz annyira aktualis a problema...
- A hozzászóláshoz be kell jelentkezni
Nem, nézz utána naptárban nyugodtan! A magyarázat pedig valami olyasmi, hogy ha nem lenne szökőév, 7 évente esnének a dátumok ugyanarra a napra. De 7 évben vagy 1, vagy 2 szökőév van, vagyis 8 ill. 9 évre jön ki. És 8+9=17.
--
Debian - The "What?!" starts not!
- A hozzászóláshoz be kell jelentkezni