Kiểu mảng (array)

Một phần của tài liệu vba (Trang 27 - 29)

5. Các kiểu dữ liệu cơ bản

5.4.Kiểu mảng (array)

Khi gặp trường hợp phải sử lý một loạt các biến tương tự như nhau, ví dụ các phần tử của một ma trận, nếu ta phải đặt tên khác nhau cho tất cả các biến này thì rất bất tiện, thay vào đó ta có thể dùng kiểu mảngđể đặt tên chung cho cả nhóm các phần tửđó và khi nào cần sử dụng từng phần tử ta sẽ gọi tên theo chỉ số của chúng trong mảng.

Dim Matrix_1(10) As Double

Mảng Matrix_1 trên có 11 phần tử liên tục được đánh số từ 0 đến 10 (ma trận có 1 hàng và 11 cột). Khi sử dụng ta chỉ việc gọi phần tử cần dùng theo chỉ số tương ứng.

‘Gán giá trị 100 cho phần tử thứ 2 Matrix_1(1)=100

‘Gán giá trị 100 cho phần tử cuối cùng Matrix_1(10)=100

Ta cũng có thể cốđịnh phạm vi chỉ số của mảng bằng cách khai báo như sau: ‘Khai báo mảng

Dim Matrix_2(1 To 10) As Double

Lúc này chỉ số của mảng Matrix_2 sẽ bắt đầu từ 1 và mảng này có 10 phần tử. ‘Gán giá trị 200 cho phần tử thứ 2

Matrix_2(2)=200

‘Gán giá trị 200 cho phần tử cuối cùng Matrix_2(10)=200

Ví dụ sau khai báo và sử dụng (gán giá trị cho phần tử) một ma trận 3 hàng 5 cột

‘Khai báo mảng (3x5)

Dim Matrix_3(1 To 3, 1 To 5) As Double

‘Gán giá trị 100 cho phần tử tại hàng thứ 2 cột thứ 3 Matrix_3(2,3)=100

Trong VB, mảng có thể có một chiều hoặc nhiều chiều, kích thước của mảng được xác định dựa trên số chiều và biên trên, biên dưới của mỗi chiều. Các thành phần trong mảng là liên tục giữa hai biên.

Trong các ví dụ trên, các mảng có kích thước (hay số lượng phần tử) là không thay đổi trong suốt quá trình hoạt động của chương trình. Người ta gọi loại mảng này là mảng tĩnh và thường được dùng cho những bài toán biết trước số phần tử của mảng hay kích thước mảng không lớn. Ngoài loại mảng tĩnh này, trong VB còn cho phép định nghĩa một loại mảng khác mà kích thước (hay số lượng phàn tử) của nó có thể thiết lập lại ngay trong lúc chương trình đang hoạt động, người ta gọi loại mảng này là mảng động. Với mảng động, người lập trình không cần biết số phần tử của mảng trong lúc lập trình, số phần tử này sẽđược thiết lập trong quá trình chương trình hoạt động dựa theo nhu cầu của từng bài toán cụ thể.

Khi một mảng động, mà các phần tử của nó đã được gán giá trị, cần thay đổi kích thước, sẽ có hai tình huống cần xét đến:

Ø

ØToàn bộ giá trị ban đầu (trước lúc thay đổi kích thước mảng) sẽ bị hủy bỏ, các phần tử mảng mới (sau khi thay đổi kích thước) sẽ nhận giá trị mặc định.

‘ Khai báo mảng A là mảng động Dim A() As Long

‘ Xác định kích thước cho mảng động A: mảng 1 chiều có 5 phần tử Redim A(1 to 5) As Long

‘ Gán giá trị cho phần tử của mảng A A(1) = 100: A(2) = 200

‘ Định lại kích thước cho mảng A: mảng hai chiều với 3x3=9 phần tử Redim A(1 to 3, 2 to 4) as Long

Sau dòng cuối cùng này, toàn bộ giá trị của mảng A cũ (có A[1]=100 và A[2]=200) sẽ bị xóa bỏ và tất cả các phần tử mới của mảng A (9 phần tử) sẽ nhận giá trị mặc định (thường

được gán bằng 0). Ø

ØGiá trị cũ của các phần tử mảng sẽđược giữ lại khi cả hai điều kiện sau thỏa mãn: ƒ

ƒ Sử dụng lệnh ReDim với từ khóa Preserve. ƒ

ƒ Sự thay đổi kích thước mảng chỉđược thực hiện ở biên trên của chiều cuối cùng của mảng, nghĩa là các phần tử cần giữ lại giá trị có chỉ số không đổi ngay cả khi mảng được định lại kích thước.

‘Khai báo mảng động A Dim A() As Long

‘Gán kích thước cho mảng A

ReDim A(1 To 3, 1 To 3) As Long ‘Gán giá trị cho phàn tử của mảng A A(1,1) = 100: A(1,2) = 200 (adsbygoogle = window.adsbygoogle || []).push({});

A(2,1) = 150: A(2,2) = 250

‘Định lại kích thước cho mảng A, giữ lại giá trị ban đầu ‘của các phần tử, lưu ý đến phạm vi của mảng mới

ReDim Preserve A(1 To 3, 1 To 5) As Long

Hình 3-9: Các phần tử có thể giữ lại giá trị ban đầu và các phạm vi có thể thay đổi kích thước của mảng động

Trong ví dụ trên, các phần tử của mảng A được giữ lại giá trị sau khi kích thước của mảng được thay đổi lại. Lưu ý, ta chỉ có thể giữ lại giá trị của mảng ban đầu khi sự mở rộng được thực hiện ra biên cuối cùng của nó như trên hình 3-9.

Một phần của tài liệu vba (Trang 27 - 29)