Giới thiệu
Rất thường xuyên, khi làm việc với bất kỳ thông tin nào, bạn phải xử lý dữ liệu dạng bảng. Các chương trình hiện đại thường hoạt động với dữ liệu như vậy. Ví dụ đơn giản nhất là lập trình trò chơi trên bàn cờ ca rô: tic-tac-toe, cờ vua, cờ đam, v.v.
Trong toán học, những cấu trúc như vậy được gọi là ma trận.
Ma trận là một bảng hình chữ nhật được tạo thành từ các phần tử cùng loại (số, chuỗi, v.v. .)
Dữ liệu như vậy trong Pascal có thể được lưu trữ và xử lý dưới dạng mảng hai chiều - "mảng của mảng".
Để xử lý dữ liệu trong bảng, cần nhớ trạng thái của từng ô (cell). Mỗi ô có hai số: số hàng và số cột.
Trong ma trận, mỗi phần tử có hai chỉ số: đầu tiên là số hàng, sau đó là số cột. Việc đánh số hàng và cột bắt đầu từ số 0.
Ví dụ: phần tử A[1][2] là phần tử nằm ở hàng thứ hai và cột thứ ba.
Cũng giống như với mảng (danh sách) thông thường, để làm việc với ma trận, bạn cần học cách tạo, nhập, xử lý và hiển thị chúng.
Tạo ma trận
Nhiệm vụ
Tạo trong bộ nhớ một ma trận có kích thước nhất định chứa đầy các số không.
Để tạo ma trận chính xác, bạn cần buộc trình biên dịch tạo tất cả các chuỗi trong bộ nhớ dưới dạng các đối tượng khác nhau.
Để làm điều này, trước tiên bạn phải tạo một mảng trống, sau đó chỉ định số hàng trong ma trận, rồi chỉ định số phần tử trong mỗi hàng bằng cách sử dụng phương thức
setLength()
trong một vòng lặp:
N := 3
M := 2
setLength(A, N);
for i := 0 to N - 1 do
setLength(A[i], M);
Điền ma trận với các giá trị tùy ý
Sau khi tạo ma trận, bạn có thể điền vào nó các giá trị tùy ý. Vì mỗi phần tử có hai chỉ số nên cần sử dụng các vòng lặp lồng nhau
for i := 0 to N bắt đầu
for j := 0 to M bắt đầu
A[i][j] := ...
kết thúc;
kết thúc;
Hiển thị ma trận
Hai vòng lặp lồng nhau thường được sử dụng để xử lý và hiển thị danh sách. Chu kỳ đầu tiên là theo số dòng, chu kỳ thứ hai là các phần tử bên trong dòng.
Để hiển thị từng dòng ma trận, phân tách các số bằng dấu cách trong một dòng, bạn cần viết đoạn sau:
for i := 0 to length(A) - 1 do begin // length(A) - trả về số hàng trong ma trận A
for j := 0 to length(A[i]) - 1 do // length(A[i]) - trả về số phần tử của chuỗi i
write(a[i][j], ' ');
writeln(); // tạo một dòng mới sau khi dòng được hiển thị
kết thúc;
Giống nhau, nhưng vòng lặp không theo chỉ mục mà theo giá trị danh sách (vòng lặp for có thể lặp qua tất cả các phần tử trong danh sách (mảng), chuỗi):
for row in a do begin // duyệt qua tất cả các hàng của ma trận a
for elem in row do // lặp qua tất cả các phần tử trong hàng
write(elem, ' ');
writeln();
kết thúc;