You are not connected. Please login or register

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

boyvip

đây là cách bạn Nguyễn Văn Quân - Vietsource.net nghĩ ra, các bạn tham khảo nhé
Ngày đầu tiên trong lịch là ngày chúa ra đời ... đó là ngày 01/01/0001 và ban đầu thì mình tưởng nó là thứ 2 nên tính nhầm nhưng sau khi tính toán mình mới ngỡ ra ngày đầu tiên trong công nguyên là ngày chủ nhật ...
Để có thể tính được ngày hôm nay là thứ mấy thì bạn để ý ngày đầu tiên trong công nguyên là chủ nhật cái đã ...
Các bạn để ý là ngày 01/01/0001 là ngày chủ nhật vì nó là ngày đầu tiên và dĩ nhiên khi chia cho 7 (1/7) lấy phần dư thì ta sẽ có là 1 ...
Tương tự ngày 02/01/0001 là ngày thứ 2 vì tổng số ngày chia cho 7 lấy phần dư là 2 ...
Tiếp tục ta sẽ có nếu tổng số ngày của ngày ta tìm chia 7 dư 3 thì là thứ 3 ... và nếu dư 0 thì là thứ 7

À vậy nếu 1 ngày như ngày 01/03/2000 thì làm sao ta biết nó là thứ mấy ...
Áp dụng cách tính trên thì ta phải biết là từ ngày bắt đầu công nguyên đến ngày 01/03/2000 là có bao nhiêu ngày đã ...
Để tính được thì ta tính ngược từ số năm
bạn lấy năm -1 = 1999
Sau đó lấy : 1999*365 + 1999/4 = a
Nhớ là 1999/4 là khai báo 1999 là kiểu int nha vì mình cần lấy phần nguyên thôi không quan tâm phần dư
a ==> Chính là số ngày từ năm 01 đến năm 1999 đó
Sau đó bạn kiểm tra xem năm 2000 có phải năm nhuận không bằng cách lấy 2000/4 lấy phần dư nếu là 0 thì là năm nhuận ....
Nếu là năm nhuận thì bạn lấy tháng -1 sẽ bằng 2 và bạn tính ngày của 2 tháng đó
31+29 =b
b ===> là tổng số ngày của tháng 1 và 2
Sau đó bạn lấy a + b + 1 sẽ ra số ngày cần tìm và chia cho 7 lấy phần dư để xác định thứ

Chúng ta thử tính xem hôm nay ngày 22/7/2012 là thứ mấy nha.
số ngày từ 1/1/1 đến hôm nay là: 2011*365+2011/4+31+29+31+30+31+30+22=734721
Hôm nay là thứ: 734721%7=1 => CHủ nhật.

Code C cho bài toán:
Code:
#include<conio.h>
#include<stdio.h>
void main()
{
    clrscr();
    int songay,ngay,thang,nam,thu;
    int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
    printf("-------------CACH DOI NGAY SANG THU-------------\n");
    printf("Moi ban nhap vao ngay can xem\n");
    printf("Ngay: ");scanf("%d",&ngay);
    printf("Thang: ");scanf("%d",&thang);
    printf("Nam: ");scanf("%d",&nam);
    songay=((nam-1)%7)*365+(nam-1)/4;
    /* Do so qua lon nen minh lay phan du luon o day
    khong lam sai thuat toan nhe*/
    if(nam%4==0) a[1]=29;
    for(int i=0;i<(thang-1);i++) songay+=a[i];
    songay+=ngay;
    thu=songay%7;
    if(thu==1) printf("Ngay %d thang %d nam %d la chu nhat",ngay,thang,nam);
        else if(thu==0) printf("Ngay %d thang %d nam %d la thu 7",ngay,thang,nam);
            else printf("Ngay %d thang %d nam %d la thu %d",ngay,thang,nam,thu);
  getch();
 
 
 
}
[Only admins are allowed to see this image]

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

Permissions in this forum:
Bạn không có quyền trả lời bài viết