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?
- 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