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] Kiểm tra kiểu chỉ số mảng nhiều chiều

    Một mảng nhiều chiều được khai báo dạng <tên mảng> <kiểu phần tử> <d> <size1> ... <sized>, trong đó kiểu phần tử ∈{int,float,bool,string}\in \{\text{int}, \text{float}, \text{bool}, \text{string}\}∈{int,float,bool,string}, ddd là số chiều, và mỗi sizeisize_isizei​ là kích thước chiều thứ iii (chỉ số hợp lệ theo chiều đó chạy từ 000 đến sizei−1size_i - 1sizei​−1). Ngoài ra có bảng các biến đơn kiểu int hoặc float dùng làm chỉ số.

    Với mỗi biểu thức truy cập phần tử mảng dạng tên[idx1][idx2]...[idxd] (mỗi idxiidx_iidxi​ là một hằng số nguyên hoặc tên một biến đơn đã khai báo), trình biên dịch kiểm tra tuần tự:

    1. Mảng tên đã được khai báo — nếu chưa: lỗi.
    2. Số lượng chỉ số truy cập bằng đúng số chiều ddd — nếu không: lỗi.
    3. Mỗi idxiidx_iidxi​ phải có kiểu int (hằng số nguyên hoặc biến kiểu int; biến/hằng kiểu float dùng làm chỉ số là lỗi kiểu).
    4. Nếu idxiidx_iidxi​ là hằng số nguyên cụ thể, giá trị phải nằm trong [0,sizei−1][0, size_i - 1][0,sizei​−1] (lỗi "ngoài phạm vi" nếu không; nếu idxiidx_iidxi​ là biến thì bỏ qua kiểm tra giá trị vì không xác định được lúc biên dịch).

    Nếu tất cả các bước hợp lệ, in ra kiểu phần tử cơ sở của mảng; nếu vi phạm bất kỳ bước nào, in ra ERROR.

    Ví dụ

    Input:
    1
    arr int 2 3 4
    1
    i int
    2
    arr[1][2]
    arr[i][0]
    
    Output:
    int
    int
    
    • Định dạng đầu vào:
      • Dòng 1: nnn (0≤n≤500 \le n \le 500≤n≤50) số mảng khai báo; nnn dòng tiếp theo mỗi dòng <tên mảng> <kiểu> <d> <size1> ... <sized>.
      • Dòng tiếp theo: mmm (0≤m≤500 \le m \le 500≤m≤50) số biến chỉ số; mmm dòng <tên biến> <kiểu> (kiểu int hoặc float).
      • Dòng tiếp theo: qqq (0≤q≤500 \le q \le 500≤q≤50) số truy vấn; qqq dòng, mỗi dòng một biểu thức truy cập dạng tên[idx1][idx2]... (không có khoảng trắng).
    • Định dạng đầu ra:

      In ra qqq dòng kết quả (kiểu phần tử cơ sở hoặc ERROR), theo đúng thứ tự truy vấn.

    Ví dụ:

    Đầu vào:

    1
    arr int 2 3 4
    1
    i int
    2
    arr[1][2]
    arr[i][0]
    

    Đầu ra:

    int
    int
    

    Đầu vào:

    1
    arr int 2 3 4
    0
    2
    arr[5][0]
    arr[0][4]
    

    Đầu ra:

    ERROR
    ERROR
    

    Đang tải editor...