0986425099

Hà Nội, Việt Nam
+84986425099
candinhthai@gmail.com

BÀI 9. DỮ LIỆU KIỂU MẢNG (ARRAY)

Đào tạo và Hướng nghiệp

Rate this post

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 5×5.  


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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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;
}

Ví 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) */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#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) */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#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) */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#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;
}
Spread the love