Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Tìm thứ trong tuần bằng thuật toán Zeller


Giới thiệu

Thuật toán Zeller được dùng để tìm thứ trong tuần từ một ngày cho trước. Công thức để tìm thứ bằng thuật toán Zeller là:

Tìm thứ trong tuần bằng thuật toán Zeller

Công thức chứa một số biến; Chúng là:

d – Ngày của ngày tháng.

m: Là mã tháng. Từ Tháng 3 đến Tháng 12 là 3 đến 12, cho Tháng 1 là 13, và Tháng 2 là 14. Khi xét Tháng 1 hoặc Tháng 2, năm cho trước sẽ giảm đi 1.

y – Hai chữ số cuối của năm

c – Hai chữ số đầu của năm

w – Thứ trong tuần. Khi là 0, là Thứ Bảy, khi là 6, nghĩa là Thứ Sáu

Đầu vào và Đầu ra

Đầu vào: Ngày, tháng và năm: 4, 1, 1997
Đầu ra: Đó là: Thứ Bảy

Thuật toán

zellersAlgorithm(day, month, year)
Đầu vào: Ngày tháng năm.
Đầu ra: Ngày đó là thứ mấy (Chủ Nhật đến Thứ Bảy).

Begin
    if month > 2, then
        mon := month
    else
        mon := 12 + month
        giảm năm đi 1
    y := hai chữ số cuối của năm
    c := hai chữ số đầu của năm
    w := day + floor((13*(mon+1))/5) + y + floor(y/4) + floor(c/4) + 5*c
    w := w mod 7
    return weekday[w] // weekday sẽ chứa các ngày từ Thứ Bảy đến Thứ Sáu
End

Ví dụ (C++)

#include <iostream>
#include <cmath>
using namespace std;

string weekday[7] = {"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
string zellersAlgorithm(int day, int month, int year) {
    int mon;
    if(month > 2)
        mon = month;  // cho tháng 3 đến 12 mã tháng giống tháng
    else {
        mon = (12+month);  // cho Tháng 1 và 2, mã tháng sẽ là 13 và 14
        year--; // giảm năm cho tháng 1 và 2
    }
    int y = year % 100;  // hai chữ số cuối
    int c = year / 100;  // hai chữ số đầu
    int w = (day + floor((13*(mon+1))/5) + y + floor(y/4) + floor(c/4) + (5*c));
    w = w % 7;
    return weekday[w];
}

int main() {
    int day, month, year;
    cout << "Enter Day: "; cin >> day;
    cout << "Enter Month: "; cin >> month;
    cout << "Enter Year: "; cin >> year;
    cout << "It was: " << zellersAlgorithm(day, month, year);
}

Kết quả

Enter Day: 04
Enter Month: 01
Enter Year: 1997
It was: Saturday