1. Khái niệm mảng
Mảng là tập các biến có cùng kiểu, cùng tên, khác nhau ở chỉ số (vị trí). Mảng thường được dùng nhiều trong lập trình, với những dữ liệu dạng chuỗi, danh sách...2. Khai báo mảng
- Mảng 1 chiều:<kiểu dữ liệu> <tên mảng> [Số phần tử tối đa trong mảng];
Ví dụ:
int a[100];
// mảng a chứa 100 số nguyên
float b[10];
// mảng b chứa 10 số thực
char c[]="Chao ban!";
// mảng c chứa các ký tự
int m[]={2,4,6,8};
// mảng m chứa 4 số chắn.
- Mảng nhiều chiều (thường dùng mảng 2 chiều):
<kiểu dữ liệu> <tên mảng> [soDong][soCot];
Trong đó:
soDong
: Số phần tử tối đa trong mảng dòng.
soCot
: Số phần tử tối đa trong mảng cột.
Ví dụ:
int m[5];
// khai báo mảng 2 chiều kích thước 5x5.
3. Sử dụng mảng
- Cú pháp truy xuất phần tử của mảng:<tên mảng>[vị trí]
- Mỗi phần tử của mảng (<tên mảng>[vị trí]
) được coi như một biến thông thường, có kiểu dữ liệu nào đó.
- Thường sử dụng cấu trúc lặp để xử lý mảng.
Ví dụ 1
- Yêu cầu: Nhập vào dãy số nguyên có n số (2<n<100), in ra màn hình dãy số vừa nhập.
- Code
#include <iostream> #include <conio.h> using namespace std; int main() { // khai bao mang a co kich thuoc 100 int a[100]; // khai bao n (so phan tu thuc te cua mang) int n; // nhap so phan tu cua mang do{ cout<<"\n Nhap so phan tu cua mang: "; cin>>n; if((n<=2)||(n>=100)) cout<<"\n Nhap lai n !"; }while ((n<=2)||(n>=100)); // Nhap mang for(int i=0;i<n;i++) { cout<<"\n a["<<i<<"]= "; cin>>a[i]; } // In mang cout<<"\n In mang : "; for(int i=0;i<n;i++) { cout<<a[i]<<";\t"; } return 0; }
Ví dụ 2
- Yêu cầu: Nhập vào dãy số nguyên có n số (2<n<100), in ra màn hình các số chẵn trong mảng.
- Code
#include <iostream> #include <conio.h> using namespace std; int main() { // khai bao mang a co kich thuoc 100 int a[100]; // khai bao n (so phan tu thuc te cua mang) int n; // nhap so phan tu cua mang do{ cout<<"\n Nhap so phan tu cua mang: "; cin>>n; if((n<=2)||(n>=100)) cout<<"\n Nhap lai n !"; }while ((n<=2)||(n>=100)); // Nhap mang for(int i=0;i<n;i++) { cout<<"\n a["<<i<<"]= "; cin>>a[i]; } // In mang cout<<"\n In cac so chan trong mang : "; for(int i=0;i<n;i++) { if(a[i]%2==0) cout<<a[i]<<";\t"; } return 0; }
Vi dụ 3
- Yêu cầu: Viết chương trình thực hiện
- Nhập vào một dãy số nguyên
- Sắp xếp dãy số tăng dần
- Code
/* Chương trình này sử dụng hàm (phần hàm sẽ được trình bày ở bài sau) */ #include <iostream> #include <conio.h> #define max 100 using namespace std; //nhap day void NhapDay(int a[],int n) { for(int i=0; i<n; i++) { cout<<"\n a["<<i<<"] ="; cin>>a[i]; } } //xuat day void XuatDay(int a[],int n) { cout<<"\n IN DAY: "; for(int i=0; i<n; i++) cout<<a[i]<<"\t"; } //hoan vi 2 phan tu void Swap(int &a,int &b) { int t = a; a = b; b = t; } //thuat toan Selection Sort void SelectionSort(int a[],int n) { int min; // chi so phan tu nho nhat trong day hien hanh for(int i=0; i<n-1; i++) { min = i; for(int j=i+1; j<n; j++) if(a[min]>a[j]) min = j; //ghi nhan vi tri phan tu nho nhat if(min!= i) Swap(a[i],a[min]); // doi chu 2 phan tu } } //chuong trinh chinh int main() { int a[max],n; cout<<"Nhap so phan tu:"; cin>>n; NhapDay(a,n); cout<<"\n Day vua nhap la:"; XuatDay(a,n); cout<<endl; SelectionSort (a,n); cout<<"\n Day vua sap xep la:"; XuatDay(a,n); getch(); return 0; }
Ví dụ 4
- Yêu cầu: Viết chương trình thực hiện
- Nhập dãy số nguyên có n phần tử từ bàn phím (1<= n <=100)
- In dãy vừa nhập
- Loại bỏ khỏi dãy các phần tử trùng nhau, in kết quả.
- Code
#include<iostream> #include<conio.h> #include<stdio.h> using namespace std; int main(){ int a[100],n; // Nhap mang cout<<"\n + NHAP MANG : "; cout<<"\n - Nhap so phan tu: "; do{ cout<<"\n n= "; cin>>n; if(n<1||n>100) cout<<"\n Nhap lai n!"; } while (n<1||n>100); // Nhap mang cout<<"\n - Nhap mang : "; for (int i=0;i<n;i++) { cout<<"\n a["<<i<<"]= "; cin>>a[i]; } // In day cout<<"\n + IN DAY \n"; for(int i=0;i<n;i++) cout<<a[i]<<"; "; // Loai bo phan tu trung nhau int b[100], test, k = 0; b[k] = a[0]; for(int i=1;i<n;i++) { test = 0; for(int j=i;j>=0;j--) if(a[i]==b[j]) test=1; if(test==0) b[k++] = a[i]; } cout<<"\n => DAY DA LOAI BO: "; cout<<"\n + IN DAY \n"; for(int i=0;i<n;i++) cout<<a[i]<<"; "; return 0; }
Ví dụ 5 (Mảng 2 chiều)
- Yêu cầu: Viết các hàm thực hiện:
- Nhập vào từ bàn phím ma trân vuông kích thước n (2<= n <=6)
- In ma trận vừa nhập
- Tính tổng từng dòng của ma trận
- Tìm và in ra cột chứa giá trị lớn nhất
- Đếm số nguyên tố trong ma trận
- Code
/* Chương trình này sử dụng hàm (phần hàm sẽ được trình bày ở bài sau) */ #include<iostream> #include<conio.h> using namespace std; // khai bao int m[6][6], n; // nhap ma tran void NhapMT(){ // nhap kich thuoc cout<<"\n Nhap kich thuoc cua ma tran:" ; do{ cout<<"\n n= "; cin>>n; if(n<2||n>6) cout<<"\n Nhap lai n!"; }while(n<2||n>6); // nhap ma tran cout<<"\n Nhap ma tran:"; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { cout<<"\n m["<<i<<"]["<<j<<"]= "; cin>>m[i][j]; } } // In ma tran void InMT(){ cout<<"\n In ma tran vua nhap: \n"; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) cout<<m[i][j]<<"\t"; cout<<"\n"; } } // Tinh tong tung dong void TongDong(){ int dong[6]; for(int i=0;i<n;i++){ dong[i]=0; for(int j=0;j<n;j++) dong[i]+=m[i][j]; } cout<<"\n Tong dong cua ma tran: "; for(int i=0;i<n;i++) cout<<"\n Dong "<<i<<" : "<<dong[i]; } // Tim cot chua gia tri lon nhat void TimCotChuaMax(){ // tim max int max=m[0][0], i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) if(max<m[i][j]) max=m[i][j]; // in cot chua max cout<<"\n Nhung cot chua gia tri lon nhat: "; for(i=0;i<n;i++) for(j=0;j<n;j++) if(max==m[i][j]) cout<<j<<"; "; } // Ham kiem tra so nguyen to int TestNT(int a){ for (int i=2;i<a;i++) if(a%i==0) return 0; return 1; } // Dem so nguyen to trong ma tran void DemSNT(){ int dem=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(TestNT(m[i][j])==1) dem++; cout<<"\n So lan xuat hien cua so nguyen to trong ma tran: "<<dem; } // Ham chinh int main(){ NhapMT(); InMT(); TongDong(); TimCotChuaMax(); DemSNT(); return 0; }
Ví dụ 6 (mảng 2 chiều)
- Yêu cầu: Viết chương trinh thực hiện
- Nhập các ma trận.
- Cộng ma trận.
- Nhân ma trân.
- In kết quả.
- Code
/* Chương trình này sử dụng hàm (phần hàm sẽ được trình bày ở bài sau) */ #include <conio.h> #include <iostream> #define max 100 using namespace std; /*Nhap ma tran he so*/ void NhapMaTran(float A[max][max], int m, int n, char ch) { for(int i = 0; i<m; i++) for(int j = 0; j<n; j++) { cout<<ch<<"["<<i<<"]["<<j<<"] = "; cin>>A[i][j]; } } /*Xuat ma tran*/ void XuatMaTran(float A[max][max], int m, int n) { for(int i=0 ; i<m; i++){ cout<<endl; for(int j=0 ; j<n; j++) cout<<A[i][j]<<"\t"; } } /*C = A+B*/ void CongMaTran(float A[max][max], float B[max][max], float C[max][max], int m, int n) { for(int i = 0; i<m; i++) for(int j = 0; j<n; j++) C[i][j] = A[i][j]+B[i][j]; } /*A cap mxn * B cap nxp = C cap mxp*/ void NhanMaTran(float A[max][max],float B[max][max], float C[max][max],int m,int n,int p) { for(int i = 0; i<m; i++) for(int k = 0; k<p; k++) { C[i][k]=0; for(int j = 0; j<n; j++) C[i][k] = C[i][k]+A[i][j]*B[j][k]; } } /*Chuong trinh chinh*/ int main() { int m,n,p; float A[max][max],B[max][max],C[max][max],D[max][max]; cout<<"Nhap m = "; cin>>m; cout<<"Nhap n = "; cin>>n; cout<<"Nhap p = "; cin>>p; cout<<"Nhap ma tran A cap "<<m<<"x"<<n<<endl; NhapMaTran(A,m,n,'A'); cout<<"Nhap ma tran B cap "<<m<<"x"<<n<<endl; NhapMaTran(B,m,n,'B'); cout<<"Nhap ma tran C cap "<<n<<"x"<<p<<endl; NhapMaTran(C,n,p,'C'); cout<<"Ma tran A"; XuatMaTran(A,m,n); getch(); cout<<"\n\nMa tran B"; XuatMaTran(B,m,n); getch(); cout<<"\n\nMa tran C"; XuatMaTran(C,n,p); getch(); cout<<"\n\nMa tran D = A+B"; CongMaTran(A,B,D,m,n); XuatMaTran(D,m,n); getch(); cout<<"\n\nMa tran D = A.C"; NhanMaTran(A,C,D,m,n,p); XuatMaTran(D,n,p); getch(); return 0; }
Chương trình học
Các bài học
Bài học trước Bài học tiếp theo
Chương trình học
Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...Chương trình học
Bài học trước Bài học tiếp theo