Thông báo

Collapse
No announcement yet.

Lịch vạn niên, có ai biết không ?

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

  • Lịch vạn niên, có ai biết không ?

    Hi các cao thủ !
    Hiện em đang bó tay phần chuyển đổi dương lịch sang âm lịch trong đồng hồ dùng DS12887.
    Các phần kia thì ok hết rồi, tìm trên internet thấy có phương án tra bảng, ngoài phương án này các cao thủ có còn phương án nào nữa ko vậy.
    Mà nếu ai đã làm phương pháp tra bảng rồi thì giúp em với.

  • #2
    dùng phương pháp tra bảng thì cái bảng đó dài biết chùng nào.
    bạn cứ viết lại chương trình như lịch dương, nhưng có cái là bạn phải tính lại cho lich am nhe ví dụ bên lịch dương tháng 2 là 29 ngày thì lịch âm là 28 ngày,cú như vậy mà viết, nhưng để cho đúng thì bạn xem lúc bạn viết chương trình thì lịch âm và lịch dương chênh lệch nhau bao nhiêu ngày bao nhiêu tháng đê gán ngày tháng cho phù hợp. nhớ là lồng lệnh tăng ngày, tháng, năm, dương và âm vào nhau nhé. chúc thành công

    Comment


    • #3
      Nguyên văn bởi trinhtuan89 Xem bài viết
      dùng phương pháp tra bảng thì cái bảng đó dài biết chùng nào.
      bạn cứ viết lại chương trình như lịch dương, nhưng có cái là bạn phải tính lại cho lich am nhe ví dụ bên lịch dương tháng 2 là 29 ngày thì lịch âm là 28 ngày,cú như vậy mà viết, nhưng để cho đúng thì bạn xem lúc bạn viết chương trình thì lịch âm và lịch dương chênh lệch nhau bao nhiêu ngày bao nhiêu tháng đê gán ngày tháng cho phù hợp. nhớ là lồng lệnh tăng ngày, tháng, năm, dương và âm vào nhau nhé. chúc thành công
      Không phải tra bảng theo cái kiểu ngốc xít là 1 ngày dương tương đương 1 ngày âm, 1 tháng 365 ngày là có 365 entry đâu bạn à. Tra bảng thì dùng cách, ngày đầu tháng dương là ngày bao nhiêu âm, có bao nhiêu ngày âm trong tháng... tóm lại là mỗi tháng có 1 entry, mỗi entry có tầm 5 byte định nghĩa, vậy mỗi năm mất chừng 60 byte, và 100 năm mất chừng 6000byte. ít hơn 6Kb, quá ít.
      Nếu bạn dùng phương pháp tính, sẽ đụng tới dấu chấm động, kích thước chương tình khá lớn, thuật toán xử lý chỉ phù hợp với Chip cao cấp, 6Kb bộ nhớ chương trình chắc chắn không đủ cho cái trò tính toán đó đâu.
      //My Life

      Comment


      • #4
        dùng phương pháp tra bảng thì cái bảng đó dài biết chùng nào.
        bạn cứ viết lại chương trình như lịch dương, nhưng có cái là bạn phải tính lại cho lich am nhe ví dụ bên lịch dương tháng 2 là 29 ngày thì lịch âm là 28 ngày,cú như vậy mà viết, nhưng để cho đúng thì bạn xem lúc bạn viết chương trình thì lịch âm và lịch dương chênh lệch nhau bao nhiêu ngày bao nhiêu tháng đê gán ngày tháng cho phù hợp. nhớ là lồng lệnh tăng ngày, tháng, năm, dương và âm vào nhau nhé. chúc thành công
        mình cũng đồng ý vậy, ta tìm ra quy luật trong bao nhiêu năm chứ tra bảng lâu lắm
        Cái gì biết nói biết. Cái không biết nói không biết. Ấy là biết đấy!
        email:

        Comment


        • #5
          Nguyên văn bởi dien.tu Xem bài viết
          Không phải tra bảng theo cái kiểu ngốc xít là 1 ngày dương tương đương 1 ngày âm, 1 tháng 365 ngày là có 365 entry đâu bạn à. Tra bảng thì dùng cách, ngày đầu tháng dương là ngày bao nhiêu âm, có bao nhiêu ngày âm trong tháng... tóm lại là mỗi tháng có 1 entry, mỗi entry có tầm 5 byte định nghĩa, vậy mỗi năm mất chừng 60 byte, và 100 năm mất chừng 6000byte. ít hơn 6Kb, quá ít.
          Nếu bạn dùng phương pháp tính, sẽ đụng tới dấu chấm động, kích thước chương tình khá lớn, thuật toán xử lý chỉ phù hợp với Chip cao cấp, 6Kb bộ nhớ chương trình chắc chắn không đủ cho cái trò tính toán đó đâu.
          Nếu áp dụng theo cách này thì không nhất thiết phải dụng thêm ROM ngoài rồi, tại vì tiểu đệ chỉ làm trong khoảng 30 năm là ok rồi. mà sử dụng con 89c52 có tới 8KB rom lận.Đại ca có thể hướng dẫn tiểu đệ thuật toán tra bảng với, tại tiểu đệ chưa làm về phần này bao giờ cả.

          Comment


          • #6
            Nguyên văn bởi traibinhdinh Xem bài viết
            Nếu áp dụng theo cách này thì không nhất thiết phải dụng thêm ROM ngoài rồi, tại vì tiểu đệ chỉ làm trong khoảng 30 năm là ok rồi. mà sử dụng con 89c52 có tới 8KB rom lận.Đại ca có thể hướng dẫn tiểu đệ thuật toán tra bảng với, tại tiểu đệ chưa làm về phần này bao giờ cả.
            Code:
            typedef struct {
              struct {
                  char NgayAmLichDauThang;
                  char ThangAmLich;
                  char SoNgayAmLichTrongThang;  
              }N[12];
            } AL;
            
            
            	
            const AL Table[2] = 
            {
            	{							//Nam 2010
            		{
            			{18,12,30},			//Thang 1
            			{18,12,30},			//...
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30}			//Thang 12
            		}	
             	} ,
             	{							//Nam 2011
            		{
            			{18,12,30},			//Thang 1
            			{18,12,30},			//...
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30},
            			{18,12,30}			//Thang 12
            		}	
             	}
            } ;
            typedef struct {
            	char Day;
            	char Month;	
            } DATE;
            
            DATE getSonarDay(char Day, char Month, char Year);
            Của bạn đó, thuật toán thì bạn thử nghĩ xem, mỗi entry chỉ mất co 3byte, mỗi năm chỉ cần có 36 byte để định nghĩa thôi
            //My Life

            Comment


            • #7
              Nguyên văn bởi dien.tu Xem bài viết
              Code:
              typedef struct {
                struct {
                    char NgayAmLichDauThang;
                    char ThangAmLich;
                    char SoNgayAmLichTrongThang;  
                }N[12];
              } AL;
              
              
              	
              const AL Table[2] = 
              {
              	{							//Nam 2010
              		{
              			{18,12,30},			//Thang 1
              			{18,12,30},			//...
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30}			//Thang 12
              		}	
               	} ,
               	{							//Nam 2011
              		{
              			{18,12,30},			//Thang 1
              			{18,12,30},			//...
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30},
              			{18,12,30}			//Thang 12
              		}	
               	}
              } ;
              typedef struct {
              	char Day;
              	char Month;	
              } DATE;
              
              DATE getSonarDay(char Day, char Month, char Year);
              Của bạn đó, thuật toán thì bạn thử nghĩ xem, mỗi entry chỉ mất co 3byte, mỗi năm chỉ cần có 36 byte để định nghĩa thôi
              Đại ca ơi,cái này thì em bó tay rồi. Vì em chỉ lập trình = ASM thôi,đại ca có thể giải thích giúp em với. Chứ C thì đệ không hiểu được.
              Thank nha !

              Comment


              • #8
                Nguyên văn bởi traibinhdinh Xem bài viết
                Đại ca ơi,cái này thì em bó tay rồi. Vì em chỉ lập trình = ASM thôi,đại ca có thể giải thích giúp em với. Chứ C thì đệ không hiểu được.
                Thank nha !
                Mình không biết ASM
                //My Life

                Comment


                • #9
                  Nguyên văn bởi dien.tu Xem bài viết
                  Mình không biết ASM
                  Chắc mình có duyên mà không có nợ quá, tiểu đệ thì ASM còn đại ca thì C.
                  Nhưng mà thuật toán của cách tra này là thế nào vậy đại ca.

                  Comment


                  • #10
                    Nguyên văn bởi traibinhdinh Xem bài viết
                    Chắc mình có duyên mà không có nợ quá, tiểu đệ thì ASM còn đại ca thì C.
                    Nhưng mà thuật toán của cách tra này là thế nào vậy đại ca.
                    Đối với struct mà mình khai báo trên, ứng với ngày đâu tiên của tháng dương lịnh là ngày, tháng âm lịch, và sô ngày âm lịch có trong tháng đó, ví dụ trên, ngày 1 tháng 1 năm 2010, ngày âm lịch là 18 tháng 12, số ngày trong tháng là 30 ngày. Vậy đơn giản khi bạn truyền 1 tham số khác vào, ví dụ như ngày 2 tháng 1 năm 2010, rõ ràng bạn sẽ tính ra ngay nó là ngày 19 tháng 12, 30 là giới hạn. Bạn thử suy nghĩ xem, đã gợi ý rất nhiều rồi
                    //My Life

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X