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

Ngày trong tuần trong C++ (Thuật toán Zeller)


Cho ngày, tháng, năm. Tìm ngày trong tuần của ngày đó. Sử dụng thuật toán Zeller.

Công thức Zeller

$$w = \left( d + \left\lfloor \frac{13(m+1)}{5} \right\rfloor + y + \left\lfloor\frac{y}{4}\right\rfloor + \left\lfloor\frac{c}{4}\right\rfloor + 5c \right) \bmod 7$$

Các biến

  • d - Ngày trong tháng
  • m - Mã tháng: 3-12 cho Tháng 3-12, 13 cho Tháng 1, 14 cho Tháng 2. Nếu tháng 1 hoặc 2 thì năm giảm 1
  • y - 2 chữ số cuối năm
  • c - 2 chữ số đầu năm
  • w - Ngày trong tuần: 0=Thứ 7, 1=CN, 2=Thứ 2, ..., 6=Thứ 6

Ví dụ: 4/1/1997 → "Saturday"

Thuật toán

zellersAlgorithm(day, month, year):
    if month > 2: mon = month
    else: mon = 12 + month; year--
    y = year % 100
    c = year / 100
    w = day + floor(13*(mon+1)/5) + y + floor(y/4) + floor(c/4) + 5*c
    w = w % 7
    return weekday[w]  // weekday = {"Saturday","Sunday",...,"Friday"}

Chương trình 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;
    else {
        mon = 12 + month;
        year--;
    }
    int y = year % 100;
    int c = year / 100;
    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ả mẫu

Enter Day: 4
Enter Month: 1
Enter Year: 1997
It was: Saturday