Admin có thể cho luôn toàn bộ mã nguồn không (phần đổi dương lịch sang âm lịch thôi). Em đọc thuật toán mà không hiểu. Với NewMoonBefore(int d, int m, int y, double tz) nó trả về bộ (d1, m1, y1) thì cái này có phải là ngày âm lịch không, nếu không thì làm sao tính?
Còn cái hàm này có lẽ anh Admin viết nhầm, vì (d1, m1, y1) không thay đổi trong vòng lặp.
Code:NewMoonBefore(int d, int m, int y, double tz)
int jdn = Gregorian2JD(d, m, y);
do {
(d1, m1, y1) = (d, m, y);
(d2, m2, y2) = JD2Gregorian(jdn+1); //
double moonAge1 = MoonAge(d1, m1, y1, tz);
double moonAge2 = MoonAge(d2, m2, y2, tz);
jdn = jdn - 1;
} while (moonAge2 > moonAge1.);
return (d1, m1, y1);