• Khung trình chiếu

Bài tập: Chuyển xâu thành ngày tháng năm

Các mã nguồn được viết bằng ngôn ngữ Pascal
Gửi hồi đáp
Ảnh đại diện người dùng
huynhbuutam
Nhà sáng lập
Nhà sáng lập
Các bài viết: 112
Đã gia nhập lúc: T3 31 Th8, 2021 22:04
Địa điểm: Trường THCS Châu Lăng
Tên thật: Huỳnh Bửu Tâm

Bài tập: Chuyển xâu thành ngày tháng năm

Bài viết bởi huynhbuutam »

Cho xâu ký tự S có 4 hoặc 5 ký tự số, được quy ước như sau: hai ký tự cuối là hai chữ số cuối của một năm trong thể kỷ 21, một hoặc hai ký tự đầu cho biết ngày, các ký tự còn lại cho biết tháng.
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.
Gửi hồi đáp
  • Similar Topics
    Các hồi đáp
    Lượt xem
    Bài viết cuối