Tính thứ trong tuần được nhập vào bằng C++



Đề bài: Viết chương trình C/C++ nhập vào ngày, tháng, năm. Kiểm tra ngày và tháng nhập có hợp lệ hay không. Tính thứ trong tuần của ngày đó.
Yêu cầu kiến thức:

  • Xác định đúng kiểu dữ liệu cho các biến
  • Vận dụng cách kiểm tra năm nhuận hay không?
Lưu ý:

  • Năm nhuận (Leap Year) tính theo lịch Gregorian (từ năm 1582): năm phải chia hết cho 4 và không chia hết cho 100, hoặc năm phải chia hết cho 400.
  • Thứ trong tuần được tính theo công thức Zeller:
    DayOfWeek = (d+y+y/4-y/100+y/400+(31*m)/12)%7. Trong đó:

    • a = (14 – month)/12
    • y = year – a
    • m = month + 12*a -2
    • DayOfWeek: 0 (Chủ nhật), 1 (Thứ hai), 2 (Thứ ba), …

Code tham khảo dưới được lưu với phần mở rộng là “.cpp”:


// Ho ten: Hoang Van Tuan
// Website: timoday.edu.vn
// De bai:
/* Bai 6: Tinh thu trong tuan */

#include<iostream>
#include<stdio.h>

using namespace std;

//===chuong trinh chinh===
int main()
{
    // Khai bao bien
    int d, m, y, DayMax, DayOfWeek; // DayMax la so ngay toi da cho thang

    // Nhap du lieu
    cout<<"Nhap vao ngay: "; cin>d;
    cout<<"Nhap vao thang: "; cin>>m;
    cout<<"Nhap vao nam: "; cin>>y;

    // Phan tich thiet ke giai thuat
    if(y<1582)
    {
        cout<<"Nam khong duoc xac dinh!";
        goto KetThuc;
    }

    if(m<1 || m>12)
    {
        cout<<"Thang khong hop le!";
        goto KetThuc;
    }

    switch(m)
    {
        case 4:
        case 6:
        case 9:
        case 11:
            DayMax=30;
            break;
        case 2:
            DayMax=28+((y%4==0 && y%100!=0) || y%400==0);
            break;
        default:
            DayMax=31;
    }

    if(d<1 || d>DayMax)
    {
        cout<<"Ngay khong hop le!";
        goto KetThuc;
    }

    cout<<"Ngay - thang - nam deu hop le!";

    // Cong thuc Zeller
    y -= (14-m)/12;
    m += 12*((14-m)/12)-2;
    DayMax = (d + y + y/4 - y/100 + y/400 + (31*m)/12)%7;

    if(!DayMax)
    {
        cout<<"\nChu nhat";
    }
    else
    {
        cout<<"\nThu "<<DayMax+1;
    }

KetThuc:
    cout<<endl;
    return 0;
}
//===dinh nghia ham===


Kết luận:

  • Bạn có thể tham khảo thêm khóa học lập trình C từ cơ bản đến nâng cao. Xem tại đây
  • Bạn có thể tham khảo thêm khóa học Thành thạo lập trình C#. Xem tại đây
  • Bạn có thể tham khảo Kiểm tra năm nhuận bằng Python. Xem tại đây

Có thể bạn sẽ thích…

Trả lời

EnglishVietnamese