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

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

EnglishVietnamese