Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Âm lịch, Chương trình tính âm lịch bằng C, giúp tớ với!

  1. #1
    Ngày gia nhập
    11 2006
    Nơi ở
    Softech - Aptech
    Bài viết
    34

    Mặc định Âm lịch, Chương trình tính âm lịch bằng C, giúp tớ với!

    Tớ có down bộ bài tập C từ A đến Z bên mục Tài Liệu, thấy trong đó có 1 chương trình tính năm âm lịch như sau:
    /* Bai tap 2_7 - In ra nam am lich tuong ung voi nam nhap vao */
    C Code:
    1. #include <stdio.h>
    2.  
    3. void main()
    4. {
    5.   unsigned nam;
    6.   char can[][5] = {"Giap", "At", "Binh", "Dinh", "Mau", "Ky",
    7.                    "Canh", "Tan", "Nham", "Quy"};
    8.   char chi[][5] = {"Ty", "Suu", "Dan", "Meo", "Thin", "Ty",
    9.                    "Ngo", "Mao", "Than", "Dau", "Tuat", "Hoi"};
    10.  
    11.   printf("\nNhap nam can biet : ");
    12.   scanf("%d", &nam);
    13.   printf("Nam am lich cua %d la %s %s", nam, can[(nam+6)%10], chi[(nam+8)%12]);
    14.   getch();
    15. }
    Tớ ngẫm nghĩ mãi mà vẫn chưa hiểu ra cái cách tính được âm lịch ỏ đây, từ cách khai báo 1 mảng 2 chiều đến cách sử dụng các phép tính để lấy năm.Bro nào phân tích giúp với

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    10

    Đầu tiên đọc qua cái này trước đi nha:
    ***Lịch Việt Nam và Trung quốc

    Người Việt nam dùng âm lịch để tính lễ tiết và chọn ngày cho các công việc quan trọng như cưới hỏi, xây nhà, mở cửa tiệm làm ăn ... Âm lịch này giống như âm lịch của Trung quốc nghĩa là dựa trên chu kỳ của mặt trăng và phối hợp với sự chuyển động của trái đất quanh mặt trời. Mỗi năm có 12 tháng, tháng đủ có 30 ngày, tháng thiếu, 29 ngày. Cứ 19 năm thì nhuận 7 lần, mỗi lần nhuận một tháng. Tháng đầu năm là tháng giêng và tháng cuối năm là tháng chạp không bao giờ được lấy làm tháng nhuận. Ngày đầu năm, ngày mùng một Tết, là ngày đầu tuần trăng thứ nhì sau ngày tiết Ðông chí (Winter solstice, thường xem như là ngày mà đêm dài nhất trong năm). Tùy theo tuần trăng ở ngày Ðông chí mà ngày đầu năm sẽ đến trong khoảng 30 đến 59 ngày sau ngày đó. Do đó ngày mùng một Tết chỉ có thể nằm trong khoảng 20 tháng 1 đến 21 tháng 2 dương lịch. Tháng âm lịch thường đi sau tháng dương lịch một hay hai thứ, như tháng ba âm lịch ứng với tháng tư hoặc tháng năm dương lịch.

    Năm âm lịch không tính theo số mà dùng tên ghép gồm hai chữ. Chữ đầu là một trong 10 thiên can (Giáp, Ất, Bính, Ðinh, Mậu, Kỷ, Canh, Tân, Nhâm và Quý). Chữ thứ nhì là một trong 12 địa chi (Tý, Sửu, Dần, Mão hay Mẹo, Thìn, Tỵ, Ngọ, Mùi, Thân, Dậu, Tuất và Hợi). Mười hai địa chi là tên 12 con vật. Âm lịch Việt nam khác âm lịch Trung quốc ở chỗ năm Sửu thì theo lịch Việt nam là năm con trâu, còn Trung quốc là con bò, còn năm Mão hay Mẹo ở Việt nam là năm con mèo, thì trong lịch Trung quốc lại là năm con thỏ. Vì bội số chung của 10 (thiên can) và 12 (địa chi) là 60, nên cứ 60 năm, tên các năm lại được lập đúng trở lại. Và cũng vì thế mà mỗi can chỉ đi chung với sáu năm trong 12 địa chi, hay mỗi năm theo địa chi chỉ có thể đi chung với 5 can mà thôi. Thí dụ như can Giáp chỉ đi chung với các năm Tý, Dần, Thìn, Ngọ, Thân và Tuất, còn can Ất chỉ đi chung với các năm Sửu, Mão, Tỵ, Mùi, Dậu và Hợi.

    Trần Ngọc Thùy Trang (cựu chủ tịch UVSA) có nhận xét là các năm bắt đầu bằng can Canh có số đơn vị là 0, Tân có số đơn vị là 1 ... theo số năm dương lịch, nhưng không rõ sự tương ứng. Thật ra đó là sự tương ứng một gióng một (correspondence one to one): vì hệ thống số đang dùng theo thập phân, từ 0 đến 9, nên số hàng đơn vị mỗi năm ứng với mười thiên can, không xê dịch, không thay đổi được. Năm có can Canh luôn luôn ứng với năm dương lịch có số cuối là 0 (như Canh Thìn là 1940, 2000; Canh Ngọ là 1990, Canh Thân là 1980 ...), Tân ứng với số cuối là 1 (Tân Tỵ là 1941, 2001; Tân Mùi là 1991, Tân Dậu là 1981 ...), Nhâm ứng với số cuối là 2 (Nhâm Ngọ là 1942, 2002, Nhâm Thân là 1992, Nhâm Tuất là 1982 ...), Quý, với số cuối là 3 (Quý Mùi là 1943, 2003; Quý Hợi là 1983, Quý Dậu là 1993 ...), Giáp ứng với số cuối là 4 (Giáp Thân là 1944, 2004; Giáp Tuất là 1994, Giáp Dần là 1974 ...) vân vân. Cứ mười hai năm làm một giáp (great year), 60 năm làm một vận niên lục giáp (cycle) và 3600 năm làm một kỷ nguyên (epoch)
    Okie! Hơi nhiều chữ nhưng ngại tìm lại đường link nên tớ post hết lên...

    Bây giờ xem đến cấu trúc chương trình. Đây là cách hiểu của tớ:
    Code:
    char can[][5] = {"Giap", "At", "Binh", "Dinh", "Mau", "Ky",
    "Canh", "Tan", "Nham", "Quy"};
    --> Vừa khai báo vừa khởi tạo giá trị cho 1 mảng 2 chiều là mảng can, chưa biết trước là có bao nhiêu phần tử ( cặp [] đầu tiên ), mỗi phần tử của mảng có tối đa là 5 kí tự ( cặp [5] tiếp theo)
    -->
    Code:
    can[ 0] = "Giap"
    can[ 1] = "At"
    ...
    can[10] = "Quy"
    Code:
    char chi[][5] = {"Ty", "Suu", "Dan", "Meo", "Thin", "Ty",
    "Ngo", "Mao", "Than", "Dau", "Tuat", "Hoi"};
    --> Tương tự.

    Bây giờ bạn hiểu tại sao lại có câu lệnh này chưa?
    Code:
    printf("Nam am lich cua %d la %s %s", nam, can[(nam+6)%10], chi[(nam+8)%12]);
    Lấy VD năm 1984:
    Code:
    nam=1984;
    can[(1984+6)%10] = can[0] = "Giap"
    chi [(1984+8)%12] = chi [0] = "Ty"
    ---> Nếu bạn nhập năm 1984 bạn nhận được kết quả là "Giap Ty"

    Phù phù, xong rồi, hy vọng là rõ ràng
    If...

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Khoản này, Dreaminess chẳng hiểu quy luật của âm lịch ra sao cả?

    Tham khảo các tính lịch ở link sau đây xem:
    _http://www.informatik.uni-leipzig.de/~duc/amlich/calrules.html
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

Các đề tài tương tự

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn