Thông báo

Collapse
No announcement yet.

Thuật toán tính Âm lịch từ Dương lịch dùng phương pháp tra bảng

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #31
    Đang bí không biết lập trình thế nào để tính lịch âm may mà có bác hướng dẫn tỉ mỉ nhiệt tình!thanks bác nhìu!hj
    Phone:01649.488.486
    Email:doanvanlocmta@gmail.com

    Comment


    • #32

      Comment


      • #33
        Cám ơn các bác nhiều. Em củng quan tâm đến vấn đề này nhưng do hạn chế về trình độ nên chỉ biết dõi theo tư duy của các bác thôi, em không giúp đc gì nhưng rất quan tâm. Mong các bác nhiệt tình chia sẻ kiến thức cho mọi người cùng nghiên cứu

        Comment


        • #34
          Chào bác pct.com
          Nếu theo code của bác thì ngày 23-6-2009 DL thì tính ra là ngày 1-6-2009 AL. Nếu là tháng bình thường thì đúng nhưng bắt đầu từ ngày 23-6-2009 DL đến ngày 21-7-2009 DL sẽ nhuận 1 tháng thì âm lịch vẫn là tháng 5 chứ không phải tháng 6.
          Thân chào bác.

          Comment


          • #35
            Hi, mhl167 bạn đọc kỹ và hiểu code trong các bài viết trên chưa mà dám nói chắc vậy? code trên không mắc lỗi như bạn nói đâu.
            PCT COMPUTER
            (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

            Comment


            • #36
              Mình ko lập nhiều thông tin như chủ thớt, bảng tra của mình chỉ gồm:
              - Ngày âm đầu tiên trong tháng
              - Ngày âm cuối cùng trong tháng
              - Tổng số ngày DL trong tháng.
              Với từng này tham số là đủ rồi. CÒn việc thêm nhuận thì chỉ cần gán cụ thể cho tháng đó, năm đó là đc. Chỉ cần đồng hồ chạy đc 5 năm là ổn lắm rồi_Tuổi thọ thế là ok. Hơn hẳn mấy cái đồng hồ bán ở thị trường, chóng hỏng kinh khủng.


              Add: 97 Quán Nam - Lê Chân - Hải Phòng.
              Tel: 031 518648 Phone: 0904 283 505

              Comment


              • #37
                Nguyên văn bởi pctcom Xem bài viết
                Hi, mhl167 bạn đọc kỹ và hiểu code trong các bài viết trên chưa mà dám nói chắc vậy? code trên không mắc lỗi như bạn nói đâu.
                Chào bác pct.com
                Theo code của bác thì tính như sau:

                DL2009_6: DB 9,5,23,5,30

                1) MOV B,NGAY ; NGAY hien tai
                MOV A,N_DL_DAU_THANG ; tru di ngay duong lich tuong ung voi mung 1 am lich trong thang
                CLR C
                SUBB A,B
                Thì ngày hiện tại là ngày 23, ngày DL đầu tháng là ngày 23 (luu trong dữ liệu DL2009_6)
                Gán cờ C=0
                23-23=0 suy ra cờ C=0.Tiếp theo:

                2) JC SET_NGAY ;
                MOV THANG_AL,T_AL_DAU_T_DL ;NGAY HT Lon HON NGAY DAU THANG AL thi Thang_al = T_AL_DAU_T_DL
                MOV A,NGAY ;THI NGAY AL = NGAY AL DAU THANG + NGAY HT
                MOV B,N_AL_DAU_THANG
                ADD A,B
                DEC A
                CJNE A,#31,CAT_NGAY_AL
                MOV A,#1
                INC THANG_AL

                Tháng AL=T_AL_DAU_T_DL = 5 (luu trong dữ liệu DL2009_6)
                Ngày AL= Ngày hiện tại + N_AL_DAU_THANG -1 = 23+9-1=31
                So sánh với 31 thì bằng với 31 nên gán Ngày AL=1 và tăng Tháng AL lên 1 tức là Tháng AL=5+1=6

                3) CAT_NGAY_AL:
                MOV NGAY_AL,A
                MOV A,THANG_AL
                CJNE A,#13,EXIT_SET_NGAY
                MOV THANG_AL,#1
                LJMP EXIT_SET_NGAY

                Còn đoạn lênh này thì không ảnh hưởng đến ngày tháng AL trên và tháng AL chưa đến 13

                Các bác xem mình giải thích vậy đúng chưa? Có gì góp ý thêm.
                Đây là diễn đàn để chia sẻ và học hỏi kiến thức lẫn nhau nên có góp ý thì cần nên lịch sự nhé.

                Thân chào bác.

                Comment


                • #38
                  Thực sự mình thấy code của bác ptc.com rất hay. Bản thân mình học hỏi được rất nhiều. Mình chỉ đưa ra vài ý kiến vậy thôi chứ bản thân mình không dám chỉ trích ai cả. Mong anh em diễn đàn hiểu cho. Bác chia sẻ giải thuật cho anh em diễn đàn thì biết bác rất nhiệt tình lắm rồi. Thanks bác 100 cái luôn.

                  Comment


                  • #39
                    Các bác có thể vô trang này để tra âm lịch:

                    Am lich - Tra cuu am lich - Chuyen doi am lich Duong lich

                    Comment


                    • #40
                      Mình nghiên cứu thì thấy cần xử lý thêm tháng mà có 2 ngày mùng 1 âm, khi đó có lẽ chúng ta cần phải chú ý trong khi lập bảng, coi ngày mùng 1 đầu tiên là tháng AL cũ, ngày mùng 1 tiếp theo mới là ngày AL đầu tiên của tháng tiếp theo.
                      Last edited by hoangdai; 27-12-2011, 00:56.


                      Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                      Tel: 031 518648 Phone: 0904 283 505

                      Comment


                      • #41
                        Nguyên văn bởi hoangdai Xem bài viết
                        Mình nghiên cứu thì thấy cần xử lý thêm tháng mà có 2 ngày mùng 1 âm, khi đó có lẽ chúng ta cần phải chú ý trong khi lập bảng, coi ngày mùng 1 đầu tiên là tháng AL cũ, ngày mùng 1 tiếp theo mới là ngày AL đầu tiên của tháng tiếp theo.
                        Vậy là bạn đã nhìn ra vấn đề. Vì nếu để ý kỹ các bạn sẽ thấy sẽ có 2 tháng dương lịch liên tiếp có cùng 1 tháng âm lịch. Tôi lấy ví dụ như sau:
                        Ngày DL 24-5-2009 có ngày AL là 1-5-2009 và ngày DL 23-6-2009 có ngày AL cũng là 1-5-2009.
                        Nguyên nhân vì sao? Vì nếu âm lịch không lặp lại thì sẽ đi trước dương lịch, dương lịch trong 1 tháng có tối đa 31 ngày còn âm lịch thì tối đa tới 30 ngày thôi.
                        Do đó các bạn lập trình nên lưu ý. Mình đã rồi nên lưu ý cho các bạn.
                        Chúc mọi người vui vẻ.
                        Thân chào.

                        Comment


                        • #42
                          Vấn đề bác đưa ra thì thuật toán của chủ thớt vẫn xử lý đc vì trong bảng tra đã chỉ rõ tháng AL đầu tháng DL và tháng AL trong tháng DL( Hơi loằng ngoằng tí). Có 1 điều thú vị nữa là sẽ xuất hiện tháng mà ko có ngày mùng 1 âm lịch ( Tháng 2(DL) năm 2014), như vậy chúng ta khi làm bảng nhớ thêm ngày cho tháng 2 này để nó có ngày mùng 1 AL nhé. Đồng hồ mình làm bán chạy rất tốt(có tham khảo thêm cách của chủ thớt để tốt hơn), mong rằng các bạn hiểu đc cách làm và có thuật toán hay cho riêng mình.
                          Với code C thì chỉ mất có chừng 10 dòng là đã có ngày AL và tháng AL rồi.


                          Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                          Tel: 031 518648 Phone: 0904 283 505

                          Comment


                          • #43
                            Nguyên văn bởi hoangdai Xem bài viết
                            Mình nghiên cứu thì thấy cần xử lý thêm tháng mà có 2 ngày mùng 1 âm, khi đó có lẽ chúng ta cần phải chú ý trong khi lập bảng, coi ngày mùng 1 đầu tiên là tháng AL cũ, ngày mùng 1 tiếp theo mới là ngày AL đầu tiên của tháng tiếp theo.
                            Đó là lý do tại sao bảng tôi lập bao gồm 5 biến:

                            ;ngày AL dau thang; thang AL dau thang; ngay dl dau thang AL;thang AL cua dau thang AL; so ngay DL trong thang

                            Với 5 biến này vấn đề trên của bạn sẽ được giải quyết thật dễ dàng.
                            Last edited by pctcom; 11-01-2012, 13:51.
                            PCT COMPUTER
                            (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                            Comment


                            • #44
                              hihi_Nếu đã mắc công lập bảng thì tự thêm ngày cho nó luôn_hihi_thêm biến nữa thì phí quá..


                              Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                              Tel: 031 518648 Phone: 0904 283 505

                              Comment


                              • #45
                                Đọc TUT này thanhks các bác rất nhiều! Tui có ý này nói ra không biết có đúng không ? Có phải tháng nào mà chỉ 1 tháng âm lịch thì cứ phán đại ngày DL đầu tháng Al > tổng số ngày trong tháng là OK bởi vì

                                Tính ngày Âm lịch:

                                Nếu (ngày Dương lịch tương ứng với ngày đầu tháng Âm lịch) bằng (ngày hiện tại) thì ngày Âm lịch bằng 1(không xảy ra trường hợp này vì giả thiết ở trên)
                                (N_DL_DAU_THANG = NGAY => NGAY_AL = 1)
                                Hoặc (ngày Dương lịch tương ứng với ngày đầu tháng Âm lịch) trừ (ngày hiện tại): (N_DL_DAU_THANG - NGAY) :Xảy ra C=0 vì luôn lớn hơn

                                - Nếu không có nhớ (C=0) thì ngày Âm lịch bằng (ngày Dương lịch hiện tại) cộng (ngày Âm lịch của đầu tháng Dương lịch) rồi trừ 1
                                (NGAY_AL = ((NGAY + N_AL_DAU_THANG)-1) Trường hợp này luôn đúng vì không liên quan gì tới ngày DL đầu tháng AL
                                - Nếu có nhớ (C=1) thì ngày Âm lịch hiện tại bằng (ngày Dương lịch hiện tại) trừ (ngày Dương lịch đầu tháng Âm lịch) rồi + 1
                                (NGAY_AL = ((NGAY - N_DL_DAU_THANG)+1)

                                Còn tháng AL đầu tháng AL thì bằng tháng AL đầu tháng DL là OK phải không các bác
                                Kiểm chứng
                                DL2014_2: DB 2,1,30,2,28 ;không có ngày 1AL có thể sửa lại là 2,1,31,1,28 hoặc 2,1,29,1,28
                                vì N_DL_DAU_THANG =29,30,31 điều >28 -->ngày âm= 12(dương)+2-1=13
                                Còn tháng với năm thì luôn bằng 1 -2014
                                Click image for larger version

Name:	Lich.png
Views:	1
Size:	16.1 KB
ID:	1354966
                                Có lỗi chỗ nào các bác chỉ với nha. Thanks
                                Last edited by tienhuypro; 12-01-2012, 01:17.

                                Email:
                                Tel: 0983.497.310

                                Comment

                                Về tác giả

                                Collapse

                                pctcom Tìm hiểu thêm về pctcom

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X