PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   RTOS và Thuật toán với PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=33)
-   -   thuat toan chuyen doi duong lich sang am lich (http://www.picvietnam.com/forum/showthread.php?t=9912)

phatcddt08a 28-06-2011 08:50 PM

thuat toan chuyen doi duong lich sang am lich
 
ai da tung lam thi ra tay chi giúp voi,dang lam do an ben cai nay ma lam hoai khong ra.em dua vao thuat toan chuyen doi tren mang cua tac gia ho ngoc duc ma chuyen doi no khong dung gi ca .ko biet la do chuyen sang c nay khong hop . em co mot doan code nho chuyen doi tu ngon ngu java sang ccs ko biet dung ko cao thu biet xin chi gium voi thank nhieu
code :
// cong thuc ham chuyen doi am lich
unsigned long jdFromDate(signed int8 dd, signed int8 mm, signed int8 yy)
{
int a, m,y1,jd;

a = (int)((14 - mm)/12);
y1 = yy + 4800 - a;
m = mm + 12*a - 3;
jd = dd + (int)((153*m + 2)/5) + 365*y1 +(int)(y1/4) - (int)(y1/100) +(int)(y1/400) - 32045;
if (jd < 2299161) jd = dd + (int)((153*m + 2)/5) + 365*y1 + (int)(y1/4) - 32083;
return jd;
}
//tinh ngay soc
int getNewMoonDay(unsigned long k,unsigned int timezone) {
float T1, T2, T3, dr, Jd1, M, Mpr, P, C1, deltat, JdNew;
T = k/1236.85;
T2 = T1 * T1;
T3 = T2 * T1;
dr = 3.1415926/180;
Jd1 = 2415020.75933 + 29.53058868*k + 0.0001178*T2 - 0.000000155*T3;
Jd1 = Jd1 + 0.00033*sin((166.56 + 132.87*T1 - 0.009173*T2)*dr);
M = 359.2242 + 29.10535608*k - 0.0000333*T2 - 0.00000347*T3;
Mpr = 306.0253 + 385.81691806*k + 0.0107306*T2 + 0.00001236*T3;
P = 21.2964 + 390.67050646*k - 0.0016528*T2 - 0.00000239*T3;
C1=(0.1734 - 0.000393*T1)*sin(M*dr) + 0.0021*sin(2*dr*M);
C1 = C1 - 0.4068*sin(Mpr*dr) + 0.0161*sin(dr*2*Mpr);
C1 = C1 - 0.0004*sin(dr*3*Mpr);
C1 = C1 + 0.0104*sin(dr*2*P) - 0.0051*sin(dr*(M+Mpr));
C1 = C1 - 0.0074*sin(dr*(M-Mpr)) + 0.0004*sin(dr*(2*P+M));
C1 = C1 - 0.0004*sin(dr*(2*P-M)) - 0.0006*sin(dr*(2*P+Mpr));
C1 = C1 + 0.0010*sin(dr*(2*P-Mpr)) + 0.0005*sin(dr*(2*Mpr+M));
if (T1 < -11) deltat = 0.001 + 0.000839*T1 + 0.0002261*T2 - 0.00000845*T3 - 0.000000081*T*T3;
else deltat= -0.000278 + 0.000265*T1 + 0.000262*T2;
JdNew = Jd1 + C1 - deltat;
return (int)(JdNew + 0.5 + 7/24);
}

// tinh tao do mat troi
int getSunLongitude( int jdn,int timezone) {
double T1, T2, dr, M, L0, DL, L;
T1 = (jdn - 2451545.5 - 7/24) / 36525;
T2 = T1*T1;
dr = 3.1415926/180;
M = 357.52910 + 35999.05030*T1 - 0.0001559*T2 - 0.00000048*T1*T2;
L0 = 280.46645 + 36000.76983*T1 + 0.0003032*T2;

DL = (1.914600 - 0.004817*T1 - 0.000014*T2)*sin(dr*M);
DL = DL + (0.019993 - 0.000101*T1)*sin(dr*2*M) + 0.000290*sin(dr*3*M);
L = L0 + DL;
L = L*dr;
L = L - 3.1415926*2*(int)(L/(3.1415926*2));
return (L / 3.1415926 * 6);
}
// Tim ngay bat dau thang 11 am lich -----------------------------------------
int getLunarMonth11( int yy, int timezone ) {
unsigned long k, off, nm, sunLong;
off = jdFromDate(31, 12, yy) - 2415021;
k = (int)(off / 29.530588853);
nm = getNewMoonDay(k,7);
sunLong = getSunLongitude((int)nm,7);
if (sunLong >= 9) nm = getNewMoonDay((int)k-1,7);
return (int)nm;
}
char getLeapMonthOffset(double a11, int timezone) {
double k, last, arc;
long l;
char tmp;
k =(int) ((a11 - 2415021.076998695) / 29.530588853 + 0.5);
last = 0;
l = 1;
tmp = getNewMoonDay((int)(k+l),7);
arc = getSunLongitude((int)tmp,7);
do {
last = arc;
l ++;
arc = getSunLongitude((int)tmp,7);
}
while (arc != last && l < 14);
return l-1;
}
void AMLICH() {
unsigned long k, dayNumber, monthStart, a11, b11, lunarDay, lunarMonth, lunarYear, lunarLeap, diff, leapMonthDiff;
char dd, mm, yy;
unsigned int8 ld1,ld2, lm1,lm2;
short ly1,ly2;
dd =28;
mm= 06;
yy= 11;
dayNumber = jdFromDate(dd, mm, yy);
k = (dayNumber - 2415021.076998695) / 29.530588853;
monthStart = getNewMoonDay((int)(k+1),7);
if (monthStart > dayNumber) monthStart = getNewMoonDay(k,7);
a11 = getLunarMonth11(yy,7);
b11 = a11;
if (a11 >= monthStart) {
lunarYear = yy;
a11 = getLunarMonth11(yy-1,7);
}
else {
lunarYear = yy+1;
b11 = getLunarMonth11(yy+1,7);
}
lunarDay = dayNumber-monthStart+1;
diff = (int)((monthStart - a11)/29);
lunarLeap = 0;
lunarMonth = diff+11;
if (b11 - a11 > 365) {

leapMonthDiff = getLeapMonthOffset(a11,7);
if (diff >= leapMonthDiff) {
lunarMonth = diff + 10;
if (diff == leapMonthDiff)
lunarLeap = 1;
}
}
if (lunarMonth > 12) lunarMonth = lunarMonth - 12;
if (lunarMonth >= 11 && diff < 4) lunarYear = lunarYear- 1;
portb=lunarDay;
ld2=lunarDay/10;
ld1=lunarDay%10;
lm2 = lunarMonth/10;
lm1 = lunarMonth%10;

cai cho ben java math.sin neu viet nhu vay ccs ko dich dc.em bo no di co sao ko vi em co su dung thu vien math.h

HONGCHUNGPHAM 28-06-2011 08:56 PM

tôi cũng gặp vấn đề tương tự như vậy
có ai chỉ dùm cho chúng tôi với
cám ơn trước nhé!

HONGCHUNGPHAM 20-07-2011 06:06 PM

Thật tình mà nói tại sao không có người nao giúp thế hay la do không biết đây,đã là diễn đàn mà không giúp đỡ nhau cần gì tham gia vao diển đàn.bây giờ tôi củng đã làm được rồi tự viết giải thuật cho mình tự mình nguyên cứu còn hay hơn là lên đây nhờ giúp đỡ mấy thứ vớ vẩn để tốn thời gian.đúng người lập trình điện tỬ THẬT là ích kỷ.

phatcddt08a 20-07-2011 06:08 PM

Trích:

Nguyên văn bởi hongchungpham (Post 47178)
thật tình mà nói tại sao không có người nao giúp thế hay la do không biết đây,đã là diễn đàn mà không giúp đỡ nhau cần gì tham gia vao diển đàn.bây giờ tôi củng đã làm được rồi tự viết giải thuật cho mình tự mình nguyên cứu còn hay hơn là lên đây nhờ giúp đỡ mấy thứ vớ vẩn để tốn thời gian.đúng người lập trình điện tử thật là ích kỷ.

bạn nói rất đúng mình cũng đồng ý với bạn .dân lập trình đúng là ích kỷ .dù gì đi nửa mình cũng đã làm được âm lịch bằng sức của mình mà không nhờ người khác giúp đở.đúng là chán phèo cái diễn đàn này.

pstin 01-08-2011 11:27 AM

Hì. nói hay lắm!!!!!!!!!!.
Dân lập trình làm việc với từng bit và các dữ liệu nhỏ!!!!!!!! Làm việc với các cái nhỏ thì "tâm thức" sẽ "nhỏ", nhỏ thì đa phần keo kiệt vậy!!!!!!!!!!!!!!!!!.
Cuộc sống thì vẫn cứ trôi,......người ta chẳng nên hỏi "người đã làm những gì???" mà nên thắc mắc "mình đã làm và sẽ làm những gì????"!!!!!!!!!.
Quá chú ý đến người mà "ít quan tâm" tới mình thì tự chuốc thêm khổ ải vậy!!!!!!!!!!

phatcddt08a 01-08-2011 12:05 PM

Tuyệt lắm bạn ah. Chính vì ích kỷ mà tạo điều kiện cho mình phấn đấu vương lên.không có gì là không biết cả mà chỉ là mình chưa biết thôi.nhưng vẫn còn một số mặt phiếm diện để lại.mọi ngưởi là dân lập trình sẻ hiểu.

pstin 01-08-2011 12:11 PM

Hic, vô lý!!!!!!!!!!!.
Ý tui là tại sao bạn chẳng post file của bạn lên để hậu bối theo đó mà phát triển!!!!!!!!.
Còn nếu bạn nói rằng để chuyện đó cho "hậu nhơn" cố gắng, trước sau gì cũng làm được thì lúc trước "cổ nhơn" cũng im re làm giống y chang bạn vậy!!!!!!!!!!! Thử hỏi trách ai!!!!!!!!!!???????????.....
Thế gian thật là như mộng!!!!!!!! Người ta nên làm những gì cảm thấy là cần thiết!!!!!!!!!!!.

khienpzo 14-08-2011 09:16 PM

Ông Pstin bị hâm ah ??? Người ta post lên hỏi mà lại nói cái gì linh ta linh tinh ....dơ bẩn cả 4room

pstin 14-08-2011 09:35 PM

Hic, chỉ có ông Phatcddt08a là hiểu vấn đề!. Chỉ là nói vui thồi!!!!!!. Cuộc sống cho đi những gì và nhận lại những gì đều có nguyên tắc riêng của nó, khi anh trách cuộc sống...tốt hơn là tự trách mình!!!!!!!. Khi anh keo với cuộc sống...tốt hơn anh chẳng nên cho cuộc sống điều gì!!!!! Đơn giản chỉ là vậy!!!!!!. Cái code của đồng chí phatcddt08a có thể kiếm ra tiền!!!!!! Đã kiếm ra tiền thì không có ai giúp âu cũng là chuyện thường tình!!!!!!!!!.

phatcddt08a 16-08-2011 11:02 AM

trên đây toàn cao thủ mình không muốn múa riều qua mắt thợ đâu.làm âm lịch thì phải làm theo cách tra mảng rồi và vừa rồi mình củng mới thấy bên diện tử việt nam làm bằng tra mảng củng hay nè.bạn xem thử nha nó không khác gì mình làm la mấy.mình cũng có xem cách viết code của bạn rồi mình nghỉ ông bạn hơn mình nhiều.

phatcddt08a 16-08-2011 11:04 AM

trên đây toàn cao thủ mình không muốn múa riều qua mắt thợ đâu.làm âm lịch thì phải làm theo cách tra mảng rồi và vừa rồi mình củng mới thấy bên diện tử việt nam làm bằng tra mảng củng hay nè.bạn xem thử nha nó không khác gì mình làm la mấy.
http://www.dientuvietnam.net/forums/...a-b%E1%BA%A3ng
mình cũng có xem cách viết code của bạn rồi mình nghỉ ông bạn hơn mình nhiều.vào

nhiot081290 14-11-2012 11:41 PM

một điều lạ nhưng không lạ đó là :
khi bạn kêu cứu, nhưng không ai nghe hoặc không thoặc không muốn giúp bạn....
một câu hỏi .....
chẳng lẽ bó tay sao, mình bỏ cuộc hay làm tiếp , chờ đợi hay tự làm nhỉ....
và quyết định là ở bạn.
việc gì cũng có nguyên tắc của nó.


Múi giờ GMT. Hiện tại là 05:49 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam