Cho một chương trình mã ba địa chỉ gồm n câu lệnh, mỗi câu lệnh (token cách nhau đúng 1 khoảng trắng) thuộc một trong các dạng sau:
label L: định nghĩa nhãn L tại vị trí này (không thực hiện gì, chỉ đánh dấu vị trí để nhảy tới).x = y: gán biến x bằng giá trị y (y là biến hoặc hằng số nguyên).x = y OP z: phép toán hai ngôi, OP∈{+,−,∗,/}, phép / là chia lấy phần nguyên làm tròn về 0 (ví dụ 7/2=3, (−7)/2=−3); y,z là biến hoặc hằng số nguyên.if x REL y goto L: REL∈{<,<=,>,>=,==,!=}; nếu so sánh x REL y đúng thì nhảy tới nhãn L (tiếp tục thực thi từ đúng vị trí câu lệnh label L), ngược lại thực hiện câu lệnh kế tiếp; x,y là biến hoặc hằng số nguyên.goto L: nhảy không điều kiện tới nhãn L.print x: in ra giá trị hiện tại của x (biến hoặc hằng số nguyên).Biến chưa từng được gán có giá trị mặc định 0. Chương trình bắt đầu thực thi từ câu lệnh thứ nhất; sau khi thực hiện câu lệnh cuối cùng (không phải là một lệnh nhảy dẫn ra ngoài) thì kết thúc. Dữ liệu đầu vào luôn đảm bảo chương trình kết thúc sau một số bước hữu hạn (không lặp vô hạn).
Hãy mô phỏng việc thực thi chương trình và in ra, theo đúng thứ tự thực hiện, giá trị được in bởi từng câu lệnh print.
Dòng 1: số nguyên n (số câu lệnh của chương trình). n dòng tiếp theo: các câu lệnh theo đúng cú pháp mô tả ở trên.
Với mỗi câu lệnh print được thực thi (theo đúng thứ tự xảy ra khi mô phỏng, có thể lặp lại nhiều lần do vòng lặp), in ra giá trị tương ứng, mỗi giá trị trên một dòng.
Ví dụ input (đếm ngược từ 3 về 0):
8
i = 3
label loop
if i <= 0 goto end
print i
i = i - 1
goto loop
label end
print 0
Output:
3
2
1
0
Ví dụ:
Đầu vào:
3
a = 5
b = 7
print a + b
Đầu ra:
5
Đầu vào:
8
i = 3
label loop
if i <= 0 goto end
print i
i = i - 1
goto loop
label end
print 0
Đầu ra:
3
2
1
0
Đang tải editor...