Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

หาวันในสัปดาห์ด้วยอัลกอริทึม Zeller (Zeller's Algorithm)

บทนำ

อัลกอริทึมของ Zeller ใช้หาวันในสัปดาห์ (Weekday) จากวันที่กำหนด สูตรสำหรับหาวันด้วย Zeller's Algorithm มีดังนี้:

หาวันในสัปดาห์ด้วยอัลกอริทึม Zeller (Zeller s Algorithm)

สูตรนี้มีตัวแปรต่างๆ ดังนี้:

  • d - วันของวันที่
  • m: รหัสเดือน (Month Code) จาก มีนาคมถึงธันวาคม คือ 3 ถึง 12, มกราคมคือ 13, กุมภาพันธ์คือ 14 เมื่อพิจารณาเดือนมกราคมหรือ กุมภาพันธ์ ปีที่กำหนดจะลดลง 1
  • y - สองหลักสุดท้ายของปี
  • c - สองหลักแรกของปี
  • w - วันในสัปดาห์ เมื่อเป็น 0 คือ วันเสาร์, เมื่อเป็น 6 คือ วันศุกร์

อินพุตและเอาต์พุต

Input: วัน, เดือน และ ปี: 4, 1, 1997
Output: วันนั้นคือ: Saturday

อัลกอริทึม

zellersAlgorithm(day, month, year)
Input: วันที่ของวัน
Output: วันนั้นเป็นวันอะไร (Sunday ถึง Saturday)

Begin
    if month > 2, then
        mon := month
    else
        mon := 12 + month
        ลด year ลง 1
    y := สองหลักสุดท้ายของปี
    c := สองหลักแรกของปี
    w := day + floor((13*(mon+1))/5) + y + floor(y/4) + floor(c/4) + 5*c
    w := w mod 7
    return weekday[w]  // weekday จะเก็บวันจาก Saturday ถึง Friday
End

ตัวอย่างโค้ด (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);  // มกราคมและกุมภาพันธ์ รหัสเดือนคือ 13 และ 14
        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);
}

ผลลัพธ์

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