Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Thông dịch rẽ nhánh IF/ELSE

    Mở rộng ngôn ngữ mini ở dạng có thêm lệnh in và lệnh rẽ nhánh. Chương trình là một dãy các dòng, mỗi dòng là một trong các dạng sau:

    • <tên biến> = <biểu thức> — lệnh gán (biểu thức và quy tắc chia/chia dư giống hệt bài toán biểu thức có biến ở trên: chia và chia dư làm tròn về 0).
    • PRINT <biểu thức> — tính giá trị biểu thức và in ra (thêm vào danh sách kết quả xuất).
    • Khối rẽ nhánh:
    IF <điều kiện> THEN
      <các câu lệnh>
    ELSE
      <các câu lệnh>
    ENDIF
    

    trong đó nhánh ELSE có thể vắng mặt (dạng IF <điều kiện> THEN ... ENDIF). Các khối IF có thể lồng nhau tùy ý bên trong nhánh THEN hoặc ELSE.

    <điều kiện> có dạng <biểu thức 1> <phép so sánh> <biểu thức 2> với phép so sánh ∈{==,!=,<,>,<=,>=}\in \{==, !=, <, >, <=, >=\}∈{==,!=,<,>,<=,>=}, kết quả đúng hoặc sai theo nghĩa thông thường (so sánh số nguyên).

    Biến chưa từng gán có giá trị mặc định 000 (dùng chung một không gian biến toàn cục xuyên suốt chương trình, không có phạm vi cục bộ).

    Hãy thông dịch chương trình và in ra đúng những gì các lệnh PRINT xuất ra, theo đúng thứ tự chúng được thực thi (chỉ những PRINT nằm trong nhánh thực sự được chọn mới được thực thi).

    Ví dụ: Với chương trình

    x = 10
    IF x > 5 THEN
    PRINT x
    ELSE
    PRINT 0
    ENDIF
    

    vì 10>510 > 510>5 đúng nên chỉ nhánh THEN được thực thi, in ra 10.

    • Định dạng đầu vào:

      Dòng đầu tiên là số nguyên nnn (0≤n≤5000 \le n \le 5000≤n≤500) — số dòng của chương trình.

      nnn dòng tiếp theo là mã nguồn chương trình, đúng theo cú pháp mô tả ở trên. Dữ liệu đảm bảo chương trình hợp lệ về cú pháp (mọi IF...THEN đều có ENDIF tương ứng, lồng nhau đúng quy tắc).

    • Định dạng đầu ra:

      In ra các dòng kết quả của mọi lệnh PRINT được thực thi, theo đúng thứ tự thực thi, mỗi kết quả một dòng. Nếu không có lệnh PRINT nào được thực thi, không in gì cả.

    Ví dụ:

    Đầu vào:

    6
    x = 10
    IF x > 5 THEN
    PRINT x
    ELSE
    PRINT 0
    ENDIF
    

    Đầu ra:

    10
    

    Đầu vào:

    5
    y = 3
    IF y > 5 THEN
    PRINT 999
    ENDIF
    PRINT y
    

    Đầu ra:

    3
    

    Đang tải editor...