Thứ Bảy, 4 tháng 5, 2024

31. Mảng trong C++

Trước hết cần một ví dụ, cái này ta gọi là cầm đèn chạy trước ô tô, chúng ta tìm hiểu sơ qua một khái niệm mà chúng ta sẽ bàn trong những phần sau.


Vẫn sử dụng IDE Online, chạy đoạn code sau


#include <iostream>
 
using namespace std;


int main(){
    string s = "Dat Viet Lap Trinh";
 
    cout << s << endl;
 
    return 0;
}



Không có gì qua khó hiểu, chúng ta khai báo một biến s với kiểu dữ liệu là string. Sau đó in nội dung của biến s trong hàm main().


Mảng trong lập trình C++

 

String trong C++ được sử dụng để lưu chuỗi ký tự, nó như một mảng char động, có thể thay đổi kích thước một cách linh hoạt cũng như hỗ trợ chèn, xóa, sửa đổi...

Khai báo string bạn có thể khai báo một chuỗi ký tự rỗng hoặc chuỗi có sẵn nội dung :

Cú pháp :

//Khai báo chuỗi rỗng
string name_string;

//Khai báo chuỗi rỗng
string name_string = "";

//Khai báo chuỗi có nội dung
string name_string = "data";


Nói chung chuỗi trong C++ "dễ thở" hơn so với chuỗi trong C.

Bây giờ quay lại chủ đề chính: Mảng trong C++

 

Tình huống 1:
Chúng ta cần lưu trữ tuổi của tất cả mọi người trong một khu phố, ví dụ có 1.000 người (Nhu cầu thực tế, từ số liệu chúng ta có thể biết tuổi bình quân của khu phố, tuổi lớn nhất của khu phố, tuổi nhỏ nhất, lứa tuổi nào chiếm số đông...). Khoan bàn tới khái niệm mảng, bình thường chúng ta chỉ có duy nhất một cách là tạo ra 1.000 biến khác nhau để lưu trữ, ví dụ:


int tuoi1 = 20;
int tuoi2 = 34;
int tuoi3 = 80;
.....
int tuoi1000 = 18;


Trong trường hợp này, nếu chúng ta sử dụng kiểu dữ liệu mảng 1 chiều thì chúng ta thay vì sử dụng 1000 biến, chỉ cần duy nhất một biến, tương tự thế này:


int tuoi[] = {20, 34, 80, 35, 48, 26, 87,....... 80};




Tình huống 2:

Chúng ta cần quản lý một danh sách họ và tên của khoảng 100 sinh viên trong một lớp. Mỗi họ và tên để lưu trữ ta cần một biến kiểu chuỗi, như vậy 100 họ và tên thì cần khai báo 100 biến kiểu chuỗi.
Ví dụ (tạm thời chúng ta chỉ nói qua vê chuỗi ở đầu phần này, bạn không cần quá quan tâm đến lệnh khai báo chuỗi,  chỉ là ví dụ mà thôi)

string ten1 = "Nguyễn Văn A"
string ten2 = "Trần Văn B"
string ten3 = "Lê Thị C"
string ten4 = "Phùng Văn D"
.....
string ten100 = "Phạm Thị X"


Nếu khai báo như thế này thì đoạn khai báo cũng như các thao tác trên các họ tên sẽ rất dài dòng và rắc rối.
Trong trường hợp này, kiểu dữ liệu mảng sẽ giúp chúng ta. Hình dung rằng chỉ cần khai báo một biến, biến này có thể coi như là tương đương với 100 biến chuỗi; đó là 1 mảng mà các phần tử của nó là chuỗi. Đại khái ví dụ ta sẽ có biến hoVaTen, thì "hình hài" của biến sẽ tương tự thế này:

 string hoVaTen[100];

 

Rất dễ dàng lưu trữ và truy cập.


Tóm lại:

Định nghĩa : Mảng 1 chiều là cấu trúc dữ liệu (data structure) dùng để lưu trữ nhiều phần tử có cùng kiểu dữ liệu, các phần tử trong mảng được lưu trữ tại các ô nhớ liên tiếp cạnh nhau trong bộ nhớ
Bằng cách sử dụng mảng, bạn có thể truy cập các phần tử một cách dễ dàng với chỉ vài dòng code.

Khai Báo Mảng :

Cú pháp : Kiểu_Dữ_Liệu Tên_mảng[Số_Lượng_Phần_Tử];


Ví dụ :
int a[100]; //    Khai báo mảng chứa các số nguyên int tối đa 100 phần tử. Kiểu_Dữ_Liệu là int, Tên_mảnga, Số_Lượng_Phần_Tử là 100.

Lưu ý:

  • Bất lợi của mảng trong C++. Kích thước của mảng trong C phải được định nghĩa tại thời điểm khai báo, chúng ta không thể lưu số phần tử vượt quá kích thước này.
  • Khai báo mảng như trên (chưa khởi tạo, mảng chưa có phần tử nào) thì các phần tử trong mảng thường là các giá trị không xác định, các giá trị này là ngẫu nhiên. 
  • Khi khai báo mảng thì mảng sẽ chiếm số byte = số lượng phần tử x kích thước của 1 phần tử.
  • Nếu mảng có nhiều phần tử nhưng chúng ta chỉ khởi tạo giá trị cho vài phần tử đầu tiên thì các phần tử không được khởi tạo sẽ có giá trị là 0.

 

Bạn có thể vừa khai báo vừa khởi tạo giá trị cho các phần tử trong mảng như ví dụ biến tuoi trong tình huống 1 ở trên.

Đây là một ví dụ để so sánh :

#include <iostream>
 
using namespace std;

int main(){
    //các phần tử của a có giá trị ngẫu nhiên
    int a[1000];
    //các phần tử trong b lần lượt là
2  3  5  41  12  7
    int b[6] = {2, 3, 5, 41, 12, 7};
    return 0;
}

Các Thao Tác Trên Mảng

Duyệt mảng : 

Các phần tử trong mảng được đánh chỉ số tính từ 0, ví dụ mảng của bạn có 100 phần tử thì chỉ số sẽ được đánh số từ 0 tới 99. Tổng quát nếu mảng có N phần tử thì chỉ số sẽ được đánh từ 0 tới N - 1

Để truy cập các phần tử trong mảng thông qua chỉ số ta dùng cú pháp : 

tên_mảng[chỉ_số];

Thông qua chỉ số bạn có thể truy xuất, thay đổi.. giá trị của phần tử trong mảng tại chỉ số tương ứng.

Ví dụ trong mảng tuoi[] ở trên, thì tuoi[0] = 20, tuoi[1] = 34...

Để dễ hình dung, ta sẽ khai báo và khởi tạo một mảng có 10 phần tử, sau đó ta sẽ duyệt từ phần từ 0 đến phần tử 9 và in ra màn hình. Tiếp theo ta duyệt ngược lại từ phần tử 9 đến phần tử 0 và cũng in ra mà hình.

Đây là code, bạn nhập vào IDE Online và chạy thử.

#include <iostream>
 
using namespace std;

int main(){
    int n = 10;
    int a[10] = {5, 3, 2, 1, 4, 8, 9, 7, 6, 10};
    for(int i = 0; i < n; i++){
        cout << a[i] << endl; // In  phần tử 0-9
    }
   
    for(int i = n - 1; i >= 0; i--){
        
cout << a[i] << endl; // In  phần tử 9-0
    }
    return 0;
}

 

Đây là kết quả

 

Thay đổi giá trị trong mảng :

Với một mảng đã khởi tạo giá trị, chúng ta có thể thay đổi giá trị bằng lệnh gán thông thường.

Giữ nguyên ví dụ trên, nếu chúng ta muốn thay đổi phần tử đầu tiên ta chỉ cần gán cho nó giá trị mới.

Đây là code, bạn nhập vào IDE Online và chạy thử. 

#include <iostream>
 
using namespace std;

int main(){
    int n = 10;
    int a[10] = {5, 3, 2, 1, 4, 8, 9, 7, 6, 10};

    a[0] = 100;
    for(int i = 0; i < n; i++){
        cout << a[i] << endl; // In  phần tử 0-9
    }
    
    for(int i = n - 1; i >= 0; i--){
        cout << a[i] << endl; // In  phần tử 9-0
    }
    return 0;
}


Kết quả:


 

 

Nhập mảng từ bàn phím :

Để nhập mảng từ bàn phím bạn sẽ nhập số lượng phần tử trong mảng trước sau đó nhập từng phần tử trong mảng từ đầu tới cuối
Khi nhập mảng từ bàn phím bạn có thể khai báo mảng có kích thước cố định (1000, 2000, 100...) 

Đây là code, bạn nhập vào IDE Online và chạy thử. Khi nhập số phần tử để chạy thử, bạn nên nhập số nhỏ ví dụ 3 hoặc 4...

#include <iostream>
 
using namespace std;

int main(){
    //Lưu ý là mảng a chỉ lưu được tối đa 100 phần tử
    int n, a[100];
    cout <<"Nhap số phần tử của mảng (n) : " << endl;
    cin >> n;
    for(int i = 0; i < n; i++){
        cout <<"Nhap a:"<< i << endl;
        cin >> a[i];
    }
    cout <<"Mảng nhập từ bàn phím : "<< endl;
    for(int i = 0; i < n; i++){
        cout<< a[i]<< endl;
    }
    return 0;
}

Đây là kết quả 



 

Phần tiếp theo

 

Phần trước

Không có nhận xét nào:

Đăng nhận xét