Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: từ ngày tháng năm tính ra thứ mấy.

  1. #1
    Ngày gia nhập
    10 2010
    Bài viết
    249

    Mặc định từ ngày tháng năm tính ra thứ mấy.

    Mình tìm được một công thức trên mạng nhưng không hiểu ý nghĩa như thế nào. bạn nào có thể giải thích hộ mình ý nghĩa của x và c ở trên.
    Code:
    S= X+((X-1)/4) – ((X-1)/100) + ((X-1)/400) + C
    
    
    Công thức này cũng khá đơn giản, dưói đây chúng ta cùng tính thử ngày quốc tế thiếu nhi cách đây 9 năm là ngày thứ mấy nhá?
    Theo công thức trên chúng ta cùng tình giá trị S:
    S = 2000+((2000-1)/4) – ((2000-1)/100) + ((2000-1)/400) + 153
    = 2000+499-19+4+153
    = 2637
    S/7=2637/7=376 DƯ RA 5
    
    Vì thế ngày mùng 1 tháng 6 năm 2000 là ngày thứ 5
    trích dẫn từ đây.
    http://hanamhome.net/showthread.php?...BA%A5t-k%C3%AC
    Bôi đen để thấy chữ kí
    Có biết kí đâu mà có chữ kí chứ

  2. #2
    Ngày gia nhập
    09 2011
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi tuanvu199x Xem bài viết
    Mình tìm được một công thức trên mạng nhưng không hiểu ý nghĩa như thế nào. bạn nào có thể giải thích hộ mình ý nghĩa của x và c ở trên.
    Code:
    S= X+((X-1)/4) – ((X-1)/100) + ((X-1)/400) + C
    
    
    Công thức này cũng khá đơn giản, dưói đây chúng ta cùng tính thử ngày quốc tế thiếu nhi cách đây 9 năm là ngày thứ mấy nhá?
    Theo công thức trên chúng ta cùng tình giá trị S:
    S = 2000+((2000-1)/4) – ((2000-1)/100) + ((2000-1)/400) + 153
    = 2000+499-19+4+153
    = 2637
    S/7=2637/7=376 DƯ RA 5
    
    Vì thế ngày mùng 1 tháng 6 năm 2000 là ngày thứ 5
    trích dẫn từ đây.
    http://hanamhome.net/showthread.php?...BA%A5t-k%C3%AC
    Công thức trên bị sai:
    Code:
    S= X-1(thiếu -1)+((X-1)/4) – ((X-1)/100) + ((X-1)/400) + C
    X: Năm bạn nhập
    C: Tổng số ngày từ đầu năm đến ngày bạn nhập

    VD: nhập ngày 12 tháng 3 năm 2011
    C = 31 + 28 + 12 (Bạn nên xét năm nhuận cho bài toán hoàn chỉnh hơn)

    S%7 = 0 -> CN
    S%7 = 1 -> T2
    S%7 = 2 -> T3
    S%7 = 3 -> T4
    S%7 = 4 -> T5
    S%7 = 5 -> T6
    S%7 = 6 -> T7

    Còn đây là Code mình từng làm, tại mình cũng mới học C nên viết code chưa tốt lắm ^.^
    C Code:
    1. /*{S = (nam – 1)/1 + [(nam - 1)/4 - (nam - 1)/100] + (nam -1)/400 + So ngay tu dau nam den ngay do
    2.  
    3.  
    4.  
    5. Rùi la^'y [S] mod 7 ([S] là pha^`n nguyên cu?a S)
    6.  
    7.  
    8.  
    9. S mod 7 = 0 => Chu? Nha^.t
    10.  
    11. S mod 7 = 1 => Thu+' Hai  */
    12.  
    13. #include<stdio.h>
    14. #include<conio.h>
    15.  
    16. unsigned int day, month, year;
    17.  
    18. void nhap()
    19. {
    20.     printf("\nNhap ngay: ");
    21.        scanf("%d",&day);
    22.    printf("\nNhap thang: ");
    23.        scanf("%d",&month);
    24.    printf("\nNhap nam: ");
    25.        scanf("%d",&year);
    26.    printf("\nBan da nhap: ngay %d thang %d nam %d.",day,month,year);
    27. }
    28.  
    29. void nam_nhuan(int &a)  //Xet nam nhuan
    30. {
    31.     if(year % 4 == 0)
    32.        a = 29;
    33.    else
    34.        a = 28;
    35. }
    36.  
    37. void tong_so_ngay(long &sumday) //Tinh tong so ngay tu dau nam den ngay do
    38. {
    39.     char month31[8] = {1,3,5,7,8,10,12}; //Cai nay xai if thì hay hơn nhi?
    40.    char month30[5]   = {4,6,8,11};
    41.    int month2;
    42.    nam_nhuan(month2);
    43.     for(int i=1; i<month; i++)
    44.    {
    45.        for(int j=0; j<month; j++)
    46.       {
    47.           if(month31[j] == i)
    48.          {
    49.              sumday += 31;
    50.             break;
    51.          }
    52.          else    if(month30[j] == i)
    53.                  {
    54.                    sumday += 30;
    55.                   break;
    56.                }
    57.                  else
    58.                {
    59.                    sumday += month2;
    60.                   break;
    61.                }
    62.       }
    63.    }
    64.    sumday += day;
    65. }
    66.  
    67. void xuat() //Tim thu trong tuan
    68. {
    69.     long sum;
    70.    long sumday;
    71.     tong_so_ngay(sumday);
    72.    sum = (year - 1)/1 + ((year - 1)/4 - (year - 1)/100) + (year -1)/400 + sumday;
    73.    sum = sum % 7;
    74.  
    75.     switch(sum)
    76.    {
    77.        case 0:
    78.               printf("\nNgay Chu nhat.");
    79.             break;
    80.       case 1:
    81.               printf("\nNgay Thu hai.");
    82.             break;
    83.       case 2:
    84.               printf("\nNgay Thu ba.");
    85.             break;
    86.       case 3:
    87.               printf("\nNgay Thu tu.");
    88.             break;
    89.       case 4:
    90.               printf("\nNgay Thu nam.");
    91.             break;
    92.       case 5:
    93.               printf("\nNgay Thu sau.");
    94.             break;
    95.       case 6:
    96.               printf("\nNgay Thu bay.");
    97.             break;
    98.    }
    99. }
    100.  
    101. void main()
    102. {
    103.     clrscr();
    104.    nhap();
    105.    xuat();
    106.    getch();
    107. }

  3. #3
    Ngày gia nhập
    10 2010
    Bài viết
    249

    Uhm. thank bạn nhá. Mình đọc công thức mà chẳng hiểu j cả. jo thi hiểu rồi. Mình mượn tam code bạn nhá. hihi
    Bôi đen để thấy chữ kí
    Có biết kí đâu mà có chữ kí chứ

  4. #4
    Ngày gia nhập
    10 2010
    Bài viết
    249

    Cho mình hỏi chút.Sao mình copy bài bạn về mà ko chạy dc thế. Lỗi nè cậu. Mình sửa thành int main và sửa để khỏi bị lỗi C99 rồi nhưng mà nó ko chạy dc.
    Bôi đen để thấy chữ kí
    Có biết kí đâu mà có chữ kí chứ

  5. #5
    Ngày gia nhập
    11 2010
    Bài viết
    1

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. void Input(int*,int*,int*);
    5. void Output(int,int,int);
    6.  
    7. int main()
    8. {
    9.     int day,month,year;
    10.     printf("\n\t\tCHUONG TRINH TINH NGAY TRONG NAM");
    11.     printf("\nBat dau nhap du lieu: ");
    12.     Input(&day,&month,&year);
    13.     Output(day,month,year);
    14.     getch();
    15. }
    16.  
    17. void Input(int *day,int *month,int *year)
    18. {
    19.     printf("\nNhap ngay (1..31): ");
    20.     scanf("%d",day);
    21.    
    22.     printf("\nNhap thang (1..12): ");
    23.     scanf("%d",month);
    24.    
    25.     printf("\nNhap nam : ");
    26.     scanf("%d",year);
    27. }
    28.  
    29. void Output(int day,int month,int year)
    30. {
    31.     int i;
    32.     int sumday=0;
    33.     int NormalYear[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    34.     int LeapYear[12]   = {31,29,31,30,31,30,31,31,30,31,30,31};
    35.     if((year%4)==0)
    36.     {
    37.         for(i=1;i<month;i++)
    38.             sumday+=LeapYear[i];
    39.         sumday+=day;
    40.     }
    41.     else
    42.     {
    43.         for(i=1;i<month;i++)
    44.             sumday+=NormalYear[i];
    45.         sumday+=day;
    46.     }
    47.  
    48.     switch(((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+sumday )%7)
    49.     {
    50.         case 0: printf("\nNgay Chu nhat."); break;
    51.         case 1: printf("\nNgay Thu hai.");  break;
    52.         case 2: printf("\nNgay Thu ba.");   break;
    53.         case 3: printf("\nNgay Thu tu.");   break;
    54.         case 4: printf("\nNgay Thu nam.");  break;
    55.         case 5: printf("\nNgay Thu sau.");  break;
    56.         case 6: printf("\nNgay Thu bay.");  break;
    57.     }
    58. }


    (year-1)+(year-1)/4-(year-1)/100+(year-1)/400+sumday )%7 thật ra mình cũng ko hiểu công thức này lắm, có ai giải thích mình biết với

  6. #6
    Ngày gia nhập
    07 2011
    Bài viết
    59

    Mặc định từ ngày tháng năm tính ra thứ mấy.

    ko biết ct như trên ở đâu ra nhưng nhìn sơ thấy cách tính năm nhuận như thế là không đúng: năm nhuận là năm chia hết cho 4, nhưng không chia hết cho 100.

  7. #7
    Ngày gia nhập
    10 2012
    Bài viết
    4

    Code:
    Code:
    (year-1)+(year-1)/4-(year-1)/100+(year-1)/400+sumday )%7
    Năm nhuận là năm chia cho 4 mà ko chia hết cho 100 hoặc là năm chia hết cho 400.
    Công thức này người ta tính hiệu số ngày từ ngày tháng năm bạn nhập vào với 1 ngày mốc.
    Cái ngày mốc đó đã xác định đc thứ rồi. Nên ngày mình cần tìm thứ sẽ đc xác định theo ngày mốc đó.
    Các bạn nghiên cứu thêm nhé.
    Theo mình hiểu thì như vậy.
    Còn cách tính năm nhuận của bạn kia chưa đúng rồi.
    http://vi.wikipedia.org/wiki/N%C4%83m_nhu%E1%BA%ADn
    Các bạn t ham khảo thêm ở đây về năm nhuận nhé.

  8. #8
    Ngày gia nhập
    10 2011
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi tuanvu199x Xem bài viết
    Cho mình hỏi chút.Sao mình copy bài bạn về mà ko chạy dc thế. Lỗi nè cậu. Mình sửa thành int main và sửa để khỏi bị lỗi C99 rồi nhưng mà nó ko chạy dc.
    bạn sửa thành int main() thì cần có retrun 0; nữa bạn ak

  9. #9
    Ngày gia nhập
    10 2012
    Bài viết
    4

    Sau khi tìm hiểu thêm thì mình đã hiểu thêm đc đôi chút.
    Một năm bình thường có 365 ngày tức là 52 tuần và 1 ngày.
    Như vậy nếu ngày 1/1 của năm này là thứ 2 thì ngày 1/1 của năm sau sẽ là thứ 3 nếu năm nay là năm thường và sẽ là thứ 4 nếu năm nay là năm nhuận.

  10. #10
    Ngày gia nhập
    03 2013
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi nguyenvietan08t1 Xem bài viết
    Năm nhuận là năm chia cho 4 mà ko chia hết cho 100 hoặc là năm chia hết cho 400.
    Năm 2000 là năm nhuận vừa chí hết 4 vừa chia hết 100 bạn ơi

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

  1. Kỹ thuật C Bài toán nhập số năm xuất tên năm âm lịch, cách làm thế nào?
    Gửi bởi hikaru2838 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-12-2012, 09:51 PM
  2. Máy Photocopy Ricoh 2018D thanh lý giá: 11,5 triệu_Bảo hành 1 năm _ bảo trì miễn phí 5 năm tận nơi sử dụng
    Gửi bởi thuongfoto01 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 28-02-2012, 10:34 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