Arduino Tutorial (Part 15): Arrays

arduino316

Một mảng là một nhóm các vị trí liên tục trên vùng nhớ mà có chung một kiểu dữ liệu. Để tham chiếu tới một thành phần của dãy, chúng ta cần xác định tên của mảng, và số vị trị của thành phần của mảng.

Hình minh họa phía dưới là một mảng integer gọi là C và chứa 11 phần tử. Bạn tham chiếu tới một trong bất cứ thành phần nào bằng cách đưa tên và theo sau là con số vị trí của thành phần muốn lấy trong dâu ngoặc vuông([*]). Số vị trí thì thông thường gọi là subscript hay index. Thành phần đầu tiên sẽ có subscript là 0 (zẻo) vàn có thể gọi nó là thành phần zero.

Vì vậy, cách thành phần của mảng C là C[0] (C sub zero), C[1], C[2] … Subscript cao nhất của mang C là 10, số này nhỏ hơn 1 so với số lượng thành phần của mảng (11).  Cách đặt tên của mảng có quy ước giống như cách đặt tên của biến.

element of array
element of array

Một subscript phải là số integer hoặc integer mở rộng. Nếu chương trình sửa đụng các biểu thức như một subscript, chương trình tính toán biểu thức để xác định subscript. Ví dụ, nếu chúng ta giả sử rằng biết a bằng 5 và biến b bằng 6, C[a+b] chính  là thành phần C[11] của mảng.

Ví dụ: Ta có mảng C với 11 phần tử từ C[0] tới C[10]. Giả sử giá trị C[0] là -45, giá trị C[1] là 6, giá trị C[2] là 0, C[7] là 62 và giá trị của C[10] là 78.

Để print tổng các giá trị lưu trong ba thành phần đầu tiên của dãy C, ta viết như sau

Serial.print (C[ 0 ] + C[ 1 ] + C[ 2 ] );

Để chia giá trị C[6] cho 2 và gán kết quả vào biến x, chúng ta viết

x = C[ 6 ] / 2;

Khái bảo Mảng

Mảng chiếm không gian trong bộ nhớ, để xác định loại của thành phần vào số lượng thành phần yêu cầu bởi một mảng, sử dụng cách khai báo sau

type arrayName [ arraySize ] ;

Compiler sẽ lấy một lượng bộ nhớ thích hợp. arraySize phải là một con hằng số integer và lớn hơn 0. Ví dụ, báo với compiler để lấy 11 phần tử cho mảng integer C, khai báo như sau.

int C[ 12 ]; // C is an array of 12 integers

Mảng có thể được khai báo để chứa các bất cứ giá trị không có data type. Ví dụ, mảng loại string có thể được dùng để lưu trữ chuỗi ký tự.

Ví dụ về việc dùng mảng

Phần này sẽ đưa ra nhiều ví dụ chỉ ra cách khai bao, khởi tạo và vận dụng mảng.

Ví dụ 1: Khai báo một Mảng và sử dụng một Vòng lập để khởi tạo các thành phần của mảng

Chương trình khai bao một mang n gồm 10 phân tử. Vòng lặp for đầu tiên khởi tạo các thành phần của mảng về zero.

Ví dụ

int n[ 10 ] ; // n is an array of 10 integers

void setup () {

}

void loop () {
   for ( int i = 0; i < 10; ++i ) // initialize elements of array n to 0 {
      n[ i ] = 0; // set element at location i to 0
      Serial.print (i) ;
      Serial.print (‘\r’) ;
   }
   for ( int j = 0; j < 10; ++j ) // output each array element's value {
      Serial.print (n[j]) ;
      Serial.print (‘\r’) ;
   } 
}

Kết quả

Element Value
0

1

2

3

4

5

6

7

8

9

0

0

0

0

0

0

0

0

0

0

 

Example 2: Khởi tạo một Mảng trong Khai báo với một danh sách Khởi tạo

Các thành phần của mảng cũng có thể khởi tạo trong khi khai báo mảng bằng cách theo sau tên mảng với dấu bằng  và một dấu ngoặc nhọn là danh sách giá trị khởi tạo của mảng cách nhau bởi dấu phẩy. Chương trình sửa dụng danh sách các số khởi tạo để khởi tạo mảng integer với 10 giá trị và print mảng này

Ví dụ

// n is an array of 10 integers
int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 } ;

void setup () {

}

void loop () {
   for ( int i = 0; i < 10; ++i ) // initialize elements of array n to 0 {
      Serial.print (i) ;
      Serial.print (‘\r’) ;
   }
   for ( int j = 0; j < 10; ++j ) // output each array element's value {
      Serial.print (n[j]) ;
      Serial.print (‘\r’) ;
   } 
}

Kêt quả

Element Value
0

1

2

3

4

5

6

7

8

9

32

27

64

18

95

14

90

70

60

37

 

Ví dụ 3: Tổng các Thành phần của Mảng

Thông thường, các thành phần của mảng đại diện một chuỗi các giá trị sử dụng trong tính toán. Ví dụ, nếu các thành phần của mảng biểu thị bảng điểm, một giáo sư có thể mong muốn tổng các thành thành của mảng và dùng tổng nào để tính toán điểm trung bình của bài thi. Chương trình tổng các giá trị chứ 10 phần tử mảng a.

Ví dụ


const int arraySize = 10; // constant variable indicating size of array
int a[ arraySize ] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 };
int total = 0;

void setup () {

}
void loop () {
   // sum contents of array a
   for ( int i = 0; i < arraySize; ++i )
      total += a[ i ];
   Serial.print (“Total of array elements : ”) ;
   Serial.print(total) ;
}

Kết quả

Total of array elements: 849

Mảng rất quan trong trong Arduino và nên cần rất nhiều chú ý nhiều. Các khái niệm quan trong liên quan tới mảng cần làm rõ trong Arduino

Arrays are important to Arduino and should need a lot more attention. The following important concepts related to array should be clear to a Arduino −

S.NO. Khái niệm & Mô tả
1 Truyền đối số là Mảng

To pass an array argument to a function, specify the name of the array without any brackets.

Để truyền một mảng vào hàm, ta dùng tên của mảng không có dấu ngoặc vuông

2 Mảng nhiều chiều

Mạng với 2 chiều thường dùng theer hiện bảng giá trị các thông tin sắp xêp theo hàng và cột

Các bài cùng tutorial

Bài 01: Giới thiệu
Bài 02: Tổng quan
Bài 03: Arduino Board
Bài 04: Arduino IDE
Bài 05: Cấu Trúc Chương Trình
Bài 06: Data Types
Bài 07: Biến & Hằng số
Bài 08: Toán tử
Bài 09: Control Statements
Bài 10: Vòng lặp
Bài 11: Functions
Bài 12: Strings
Bài 13: String Object
Bài 14: Time
Bài 15: Arrays

Nguồn: tutorialspoint.com

Comments

linhkienbachkhoa

Comments