Bài tập cơ bản về mảng 2 chiều

Vì trong bàn cờ, các ô 0 và 1 xen kẽ nhau theo chiều ngang lẫn chiều dọc, nên ta chỉ cần lấy tổng của chỉ-số-hàng và chỉ-số-cột của mỗi ô, đem chia 2 lấy dư, sẽ nhận được giá trị 0 hoặc 1 để gán cho ô đó.

Tam giác Pascal

Ứng với mỗi hàng trong tam giác Pascal, phần tử đầu tiên và phần tử cuối cùng đều là 1. Với các phần tử ở giữa, mỗi phần tử là tổng của hai phần tử nằm ở cùng cột và ở cột liền trước thuộc hàng liền bên trên. a[r][c] = a[r – 1][c] + a[r – 1][c – 1]

Ma trận zigzag

Duyệt từng hàng:

— Đối với hàng chẵn 0, 2, 4, etc, thì điền số tăng dần vào các ô từ trái sang phải.

— Đối với hàng lẻ 1, 3, 5, etc, thì điền số tăng dần vào các ô từ phải sang trái.

Ma trận xoắn ốc

Dùng vòng lặp while, lần lượt điền số vào 4 cạnh biên của từng ma trận con [là ma trận nhỏ hơn vì bị xoắn ốc], cho đến khi số được điền vào có giá trị bằng với kích thước của ma trận gốc:

Mảng là một cấu trúc dữ liệu cơ bản và được sử dụng rất nhiều trong các bài toán lập trình. Mảng đa chiều là một cấu trúc dữ liệu mảng có nhiều vai trò quan trọng. Với mảng đa chiều, chúng ta thường chỉ sử dụng đến mảng 2 chiều[ma trận] và đôi khi sử dụng mảng 3 chiều. Bài viết này xin chia sẻ tới các bạn kiến thức về mảng đa chiều.

Sau bài học này, bạn hãy chuyển ngay tới bài viết “Bài tập mảng 2 chiều có đáp án chi tiết” để luyện tập kiến thức vừa học nhé.

NỘI DUNG BÀI VIẾT

1. Lý thuyết về mảng đa chiều

Mảng đa chiều[TA: multi-dimensional array] là một mảng của các mảng. Mảng 2 chiều hay ma trận là mảng đa chiều thường được sử dụng nhất; Khi đó, mảng 2 chiều là một mảng của các mảng 1 chiều. Mảng 2 chiều có cách lưu trữ các phần tử giống như một bảng.

Một mô phỏng về mảng 2 chiều có kích thước 3 x 5

Sau đây, bài hướng dẫn sẽ chỉ trình bày về ma trận[mảng 2 chiều]. Tôi xin lưu ý, mảng 2 chiều còn được gọi với tên khác là ma trận.

Cách truy cập tới phần tử của ma trận cũng giống như với mảng 1 chiều. Tuy nhiên, chúng ta sẽ có 2 chỉ số khác nhau là chỉ số hàng và chỉ số cột. Cú pháp như sau: arr[row_index][col_index].

2. Khai báo mảng 2 chiều

Để khai báo mảng 2 chiều, bạn phải chỉ định các tham số sau:

  • row-size: Khai báo số hàng của mảng 2 chiều
  • column-size: Khai báo số cột của mảng 2 chiều
  • Type of array: Kiểu dữ liệu của mảng 2 chiều. Việc này chỉ định kiểu dữ liệu của các phần tử trong mảng; là số nguyên, số thực, ký tự hay là kiểu dữ liệu nào đó

Cú pháp khai báo mảng 2 chiều có dạng:

type arr[row_size][column_size]

Một ví dụ khai báo mảng 2 chiều trong C/C++:

int arr[3][5];

3. Khởi tạo mảng 2 chiều

Giống như mảng 1 chiều, mảng 2 chiều cũng có thể khởi tạo trong quá trình khai báo hoặc khởi tạo sau khi khai báo.

Cú pháp khởi tạo mảng 2 chiều trong khi khai báo như sau:

type arr[row_size][column_size] = {{elements}, {elements} ... }

Đây là một ví dụ khai báo và khởi tạo mảng cùng lúc trong C/C++:

int arr[3][5] = {{5, 12, 17, 9, 3}, {13, 4, 8, 14, 1}, {9, 6, 3, 7, 21}};

Với cách khởi tạo mảng 2 chiều sau khi khai báo, sử dụng chỉ số để truy cập tới từng ô của mảng, chúng ta có cú pháp như sau:

type arr[row_size][column_size] arr[i][j] = 14

Một ví dụ trên ngôn ngữ C/C++ với việc khởi tạo mảng 2 chiều sau khi khai báo:

int arr[3][5]; arr[0][0] = 5; arr[1][3] = 14;

Việc khai báo như thế này khá là ngây thơ và ít được sử dụng. Thay vào đó, chúng ta thường khởi tạo giá trị cho mảng 2 chiều bằng việc đọc từ stdin; Bạn có thể thấy ở phần nhập mảng 2 chiều trong mục tiếp theo.

4. Các thao tác với mảng 2 chiều

Một thao tác đơn giản nhất và hay sử dụng nhất đó là việc lặp qua tất cả các phần tử của mảng 2 chiều theo cách sau:

type arr[row_size][column_size] = {{elements}, {elements} ... } for i from 0 to row_size

for j from 0 to column_size  
    print arr[i][j]
Đây là một ví dụ cho việc lặp qua tất cả các phần tử trong mảng và in nó ra trên ngôn ngữ C/C++:

include

int main[] {

// Array declaration and initialization  
int arr[3][5] = {{5, 12, 17, 9, 3}, {13, 4, 8, 14, 1}, {9, 6, 3, 7, 21}};  
// Iterate over the array  
for[int i=0; i

Chủ Đề