Giả sử: tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày, các tháng còn lại có 30 ngày, riêng tháng 2 năm thường có 28 ngày, năm nhuận có 29 ngày. Năm nhuận là năm chia hết cho 4 và không chia hết cho 100 hoặc năm chia hết cho 400.
Viết chương trình kiểm tra xâu S (có 4 hoặc 5 ký tự số) có phải là ngày hợp lệ có dạng ngày/tháng/năm theo đúng yêu cầu bên trên, cụ thể như sau:
- Dữ liệu vào được nhập từ bàn phím là giá trị của xâu S.
- Kết quả được xuất ra màn hình là ngày hợp lệ được tạo ra theo yêu cầu bên trên. Trong trường hợp xâu không tạo được ngày hợp lệ thì kết quả “KHONG TAO DUOC”, trường hợp xâu S có nhiều cách tạo hợp lệ thì chỉ cần ghi ra một cách tạo hợp lệ.
Ví dụ (dữ liệu thử):
Mã: Chọn tất cả
Lần thử Dữ liệu nhập Dữ liệu xuất
1 1316 1/3/16
2 11216 11/2/16 (hoac 1/12/16)
3 29217 KHONG TAO DUOC
(Đề thi chọn Học sinh giỏi Tin học cấp THCS huyện Tri Tôn năm 2023 - Câu 1)
Mã nguồn:
Mã: Chọn tất cả
Uses Crt;
Var Xau : AnsiString;
So : LongInt;
Nam, Thang, Ngay : Integer;
Nhuan : Boolean;
Begin
ClrScr;
Repeat
Write('Nhap xau: '); ReadLn(Xau);
Until (Length(Xau) = 4) Or (Length(Xau) = 5);
Val(Xau, So); Nam := 2000 + (So Mod 100);
If (Nam Mod 400 = 0) Or ((Nam Mod 4 = 0) And (Nam Mod 100 <> 0))
Then Nhuan := True Else Nhuan := False;
So := So Div 100;
If So Mod 100 > 12
Then Begin Thang := So Mod 10; Ngay := So Div 10; End
Else Begin Thang := So Mod 100; Ngay := So Div 100; End;
If (Thang = 2) And ((Nhuan And (Ngay > 29)) Or (Not Nhuan And (Ngay > 28)))
Then Begin Write('KHONG TAO DUOC'); ReadLn; Exit; End;
If (Thang In [1, 3, 5, 7, 8, 10, 12]) And (Ngay > 31)
Then Begin Write('KHONG TAO DUOC'); ReadLn; Exit; End;
If (Thang In [4, 6, 9, 11]) And (Ngay > 30)
Then Begin Write('KHONG TAO DUOC'); ReadLn; Exit; End;
Write(Ngay, '/', Thang, '/', Nam Mod 100);
ReadLn;
End.