Vừa

Ma trận bằng mảng động hai chiều: chuyển vị và nhân

Class cần viết: matrix · cần máy chấm có SystemVerilog · 7 case (2 mẫu) · giới hạn 4 s/case · ~25 phút

dynamic-arrayclassalgorithmsystemverilog

Mảng động ([]) có kích thước quyết định lúc chạy. Lồng hai lớp là có ma trận với số hàng, số cột tuỳ ý. Bài này luyện cấp phát mảng động lồng nhau, duyệt hai chiều và tư duy "hàm trả về đối tượng mới". Mô hình tham chiếu cho bộ tăng tốc nhân ma trận (systolic array) hay bộ lọc ảnh dùng đúng những thao tác này.

class matrix;
  int rows, cols;
  int m[][];
  function new(int r, int c);                // r×c, mọi phần tử = 0 (r, c ≥ 1)
  function void   set(int r, int c, int v);
  function int    get(int r, int c);
  function matrix transpose();               // ma trận MỚI, cols×rows
  function matrix mul(matrix b);             // this × b, ma trận MỚI; null nếu this.cols != b.rows
  function bit    equals(matrix b);          // cùng kích thước và cùng mọi phần tử
endclass

Chỉ số bắt đầu từ 0. Testbench chỉ dùng chỉ số hợp lệ. transpose và mul không được sửa ma trận gọi chúng, cũng như ma trận được truyền vào.

Các case

  1. Tạo, set và getmẫu
  2. Nhân với ma trận đơn vịmẫu

Cùng 5 case ẩn kiểm các yêu cầu còn lại của đề. Case ẩn chỉ báo đúng/sai, không nói chi tiết: tự tìm chỗ sai từ đề, hoặc mở gợi ý.

Testbench có mô hình tham chiếu riêng, độc lập với lời giải mẫu. Lời giải mẫu đã chạy qua mọi case trên simulator thật, và 4 bản lỗi mẫu đều bị ít nhất một case bắt. Case mẫu sai sẽ cho biết chỗ sai đầu tiên (giá trị mong đợi so với giá trị nhận được); case ẩn chỉ báo đúng/sai.

Đang kết nối máy chấm…
Đang nạp bản nháp…

Tab để thụt lề. Nhấn Esc rồi Tab để rời trình soạn. Bản nháp tự lưu trong trình duyệt.

Gợi ý

Mỗi gợi ý mở trước khi AC giảm 10% điểm của đề.

Lời giải và phân tích

Lịch sử nộp bài

Chưa có lượt nào.

Độ khó: Vừa. Điểm gốc 40.