1. Hãy dành vài giây Đăng nhập hoặc Đăng ký tài khoản để truy cập và sử dụng TBit hiệu quả nhất.
    Ẩn thông báo
  2. Bạn hãy like trang Facebook của TBit để nhận được tin tức công nghệ nhanh nhất từ chúng tôi.
    Ẩn thông báo

[C/C++] - Bài 9: Dữ liệu kiểu mảng (array)

Thảo luận trong 'Lập trình C/C++' bắt đầu bởi Admin, 21/4/15.

0/5, 0 phiếu

    1. Admin Founder

      * TÓM TẮT LÝ THUYẾT

      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í).

      2. Khai báo mảng
      - Mảng 1 chiều
      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)
      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.
      - Thường sử dụng cấu trúc lặp để xử lý mảng.


      ** VÍ DỤ
      ---------------------------------

      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:
      Mã (C++):
      1. [plain]
      2.  
      3. #include <iostream>
      4. #include <conio.h>
      5.  
      6. using namespace std;
      7.  
      8. int main() {
      9.   // khai bao mang a co kich thuoc 100
      10.   int a[100];
      11.   // khai bao n (so phan tu thuc te cua mang)
      12.   int n;
      13.   // nhap so phan tu cua mang
      14.   do{
      15.      cout<<"\n Nhap so phan tu cua mang: ";
      16.      cin>>n;
      17.      if((n<=2)||(n>=100))
      18.       cout<<"\n Nhap lai n !";
      19.   }while ((n<=2)||(n>=100));
      20.   // Nhap mang
      21.   for(int i=0;i<n;i++)
      22.   {
      23.      cout<<"\n a["<<i<<"]= "; cin>>a[i];
      24.   }
      25.  
      26.   // In mang
      27.   cout<<"\n In mang : ";
      28.   for(int i=0;i<n;i++)
      29.   {
      30.      cout<<a[i]<<";\t";
      31.   }
      32.   return 0;
      33. }
      34.  
      35. [/plain]
      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:
      Mã (C++):
      1. [plain]
      2.  
      3. #include <iostream>
      4. #include <conio.h>
      5.  
      6. using namespace std;
      7.  
      8. int main() {
      9.   // khai bao mang a co kich thuoc 100
      10.   int a[100];
      11.   // khai bao n (so phan tu thuc te cua mang)
      12.   int n;
      13.   // nhap so phan tu cua mang
      14.   do{
      15.    cout<<"\n Nhap so phan tu cua mang: ";
      16.      cin>>n;
      17.      if((n<=2)||(n>=100))
      18.       cout<<"\n Nhap lai n !";
      19.   }while ((n<=2)||(n>=100));
      20.   // Nhap mang
      21.   for(int i=0;i<n;i++)
      22.   {
      23.      cout<<"\n a["<<i<<"]= "; cin>>a[i];
      24.   }
      25.  
      26.   // In mang
      27.   cout<<"\n In cac so chan trong mang : ";
      28.   for(int i=0;i<n;i++)
      29.   {
      30.      if(a[i]%2==0)
      31.      cout<<a[i]<<";\t";
      32.   }
      33.   return 0;
      34. }
      35.  
      36. [/plain]
      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) */
      Mã (C++):
      1. [plain]
      2.  
      3. #include <iostream>
      4. #include <conio.h>
      5. #define max 100
      6.  
      7. using namespace std;
      8.  
      9. //nhap day
      10. void NhapDay(int a[],int n) {
      11.   for(int i=0; i<n; i++) {
      12.   cout<<"\n a["<<i<<"] =";
      13.   cin>>a[i];
      14.   }
      15. }
      16.  
      17. //xuat day
      18. void XuatDay(int a[],int n) {
      19.   cout<<"\n IN DAY: ";
      20.   for(int i=0; i<n; i++)
      21.   cout<<a[i]<<"\t";
      22. }
      23.  
      24. //hoan vi 2 phan tu
      25. void Swap(int &a,int &b) {
      26.   int t = a;
      27.   a = b;
      28.   b = t;
      29. }
      30.  
      31. //thuat toan Selection Sort
      32. void SelectionSort(int a[],int n) {
      33.   int min; // chi so phan tu nho nhat trong day hien hanh
      34.   for(int i=0; i<n-1; i++) {
      35.   min = i;
      36.   for(int j=i+1; j<n; j++)
      37.   if(a[min]>a[j])
      38.   min = j; //ghi nhan vi tri phan tu nho nhat
      39.   if(min!= i)
      40.   Swap(a[i],a[min]); // doi chu 2 phan tu
      41.   }
      42. }
      43.  
      44. //chuong trinh chinh
      45. int main() {
      46.   int a[max],n;
      47.   cout<<"Nhap so phan tu:";
      48.   cin>>n;
      49.   NhapDay(a,n);
      50.   cout<<"\n Day vua nhap la:";
      51.   XuatDay(a,n);
      52.   cout<<endl;
      53.   SelectionSort (a,n);
      54.   cout<<"\n Day vua sap xep la:";
      55.   XuatDay(a,n);
      56.   getch();
      57.   return 0;
      58. }
      59.  
      60. [/plain]
      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:
      Mã (C++):
      1. [plain]
      2.  
      3. #include<iostream>
      4. #include<conio.h>
      5. #include<stdio.h>
      6.  
      7. using namespace std;
      8.  
      9. int main(){
      10.    int a[100],n;
      11.    // Nhap mang
      12.    cout<<"\n + NHAP MANG : ";
      13.    cout<<"\n - Nhap so phan tu: ";
      14.    do{
      15.      cout<<"\n n= "; cin>>n;
      16.      if(n<1||n>100)
      17.      cout<<"\n Nhap lai n!";
      18.    } while (n<1||n>100);
      19.    // Nhap mang
      20.    cout<<"\n - Nhap mang : ";
      21.    for (int i=0;i<n;i++)
      22.    {
      23.      cout<<"\n a["<<i<<"]= ";
      24.      cin>>a[i];
      25.    }
      26.  
      27.    // In day
      28.    cout<<"\n + IN DAY \n";
      29.    for(int i=0;i<n;i++)
      30.    cout<<a[i]<<"; ";
      31.  
      32.    // Loai bo phan tu trung nhau
      33.    int b[100], test, k = 0;
      34.    b[k] = a[0];
      35.    for(int i=1;i<n;i++)
      36.    {
      37.      test = 0;
      38.      for(int j=i;j>=0;j--)
      39.        if(a[i]==b[j]) test=1;
      40.      if(test==0)
      41.        b[k++] = a[i];
      42.    }
      43.    cout<<"\n => DAY DA LOAI BO: ";
      44.    cout<<"\n + IN DAY \n";
      45.    for(int i=0;i<n;i++)
      46.      cout<<a[i]<<"; ";
      47.    return 0;
      48. }
      49.  
      50. [/plain]
       

      Các file đính kèm:

      Chỉnh sửa cuối: 21/4/15
      Đang tải...
    2. Admin

      Admin Founder Thành viên BQT

      Điểm:
      10.012ß
      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) */
      Mã (C++):
      1. [plain]
      2.  
      3. #include<iostream>
      4. #include<conio.h>
      5.  
      6. using namespace std;
      7. // khai bao
      8. int m[6][6], n;
      9.  
      10. // nhap ma tran
      11. void NhapMT(){
      12.   // nhap kich thuoc
      13.   cout<<"\n Nhap kich thuoc cua ma tran:" ;
      14.   do{
      15. cout<<"\n n= "; cin>>n;
      16. if(n<2||n>6)
      17.   cout<<"\n Nhap lai n!";
      18.   }while(n<2||n>6);
      19.   // nhap ma tran
      20.   cout<<"\n Nhap ma tran:";
      21.   for(int i=0;i<n;i++)
      22.   for(int j=0;j<n;j++)
      23.   {
      24.   cout<<"\n m["<<i<<"]["<<j<<"]= "; cin>>m[i][j];
      25.   }
      26. }
      27.  
      28. // In ma tran
      29. void InMT(){
      30. cout<<"\n In ma tran vua nhap: \n";
      31. for(int i=0;i<n;i++)
      32. {
      33.   for(int j=0;j<n;j++)
      34.   cout<<m[i][j]<<"\t";
      35.   cout<<"\n";
      36. }
      37. }
      38.  
      39. // Tinh tong tung dong
      40. void TongDong(){
      41. int dong[6];
      42.   for(int i=0;i<n;i++){
      43.   dong[i]=0;
      44.   for(int j=0;j<n;j++)
      45.   dong[i]+=m[i][j];
      46.   }
      47. cout<<"\n Tong dong cua ma tran: ";
      48. for(int i=0;i<n;i++)
      49. cout<<"\n Dong "<<i<<" : "<<dong[i];
      50. }
      51.  
      52. // Tim cot chua gia tri lon nhat
      53. void TimCotChuaMax(){
      54. // tim max
      55. int max=m[0][0], i,j;
      56. for(i=0;i<n;i++)
      57.   for(j=0;j<n;j++)
      58.   if(max<m[i][j]) max=m[i][j];
      59.  
      60. // in cot chua max
      61. cout<<"\n Nhung cot chua gia tri lon nhat: ";
      62. for(i=0;i<n;i++)
      63.   for(j=0;j<n;j++)
      64.   if(max==m[i][j]) cout<<j<<"; ";
      65. }
      66.  
      67. // Ham kiem tra so nguyen to
      68. int TestNT(int a){
      69.   for (int i=2;i<a;i++)
      70.   if(a%i==0) return 0;
      71. return 1;
      72. }
      73.  
      74. // Dem so nguyen to trong ma tran
      75. void DemSNT(){
      76.   int dem=0;
      77.   for(int i=0;i<n;i++)
      78.   for(int j=0;j<n;j++)
      79.   if(TestNT(m[i][j])==1) dem++;
      80. cout<<"\n So lan xuat hien cua so nguyen to trong ma tran: "<<dem;
      81. }
      82. // Ham chinh
      83. int main(){
      84. NhapMT();
      85. InMT();
      86. TongDong();
      87. TimCotChuaMax();
      88. DemSNT();
      89. return 0;
      90. }[/plain]
      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) */
      Mã (C++):
      1. [plain]
      2.  
      3. #include <conio.h>
      4. #include <iostream>
      5. #define max 100
      6.  
      7. using namespace std;
      8.  
      9. /*Nhap ma tran he so*/
      10. void NhapMaTran(float A[max][max], int m, int n, char ch) {
      11.    for(int i = 0; i<m; i++)
      12.      for(int j = 0; j<n; j++) {
      13.        cout<<ch<<"["<<i<<"]["<<j<<"] = ";
      14.        cin>>A[i][j];
      15.    }
      16. }
      17.  
      18. /*Xuat ma tran*/
      19. void XuatMaTran(float A[max][max], int m, int n) {
      20.    for(int i=0 ; i<m; i++){
      21.      cout<<endl;
      22.      for(int j=0 ; j<n; j++)
      23.        cout<<A[i][j]<<"\t";
      24.    }
      25. }
      26.  
      27. /*C = A+B*/
      28. void CongMaTran(float A[max][max], float B[max][max], float C[max][max], int m, int n) {
      29.    for(int i = 0; i<m; i++)
      30.      for(int j = 0; j<n; j++)
      31.        C[i][j] = A[i][j]+B[i][j];
      32. }
      33.  
      34. /*A cap mxn * B cap nxp = C cap mxp*/
      35. void NhanMaTran(float A[max][max],float B[max][max], float C[max][max],int m,int n,int p)
      36. {
      37.    for(int i = 0; i<m; i++)
      38.      for(int k = 0; k<p; k++) {
      39.       C[i][k]=0;
      40.       for(int j = 0; j<n; j++)
      41.       C[i][k] = C[i][k]+A[i][j]*B[j][k];
      42.    }
      43. }
      44.  
      45. /*Chuong trinh chinh*/
      46. int main() {
      47.    int m,n,p;
      48.    float A[max][max],B[max][max],C[max][max],D[max][max];
      49.    cout<<"Nhap m = ";
      50.    cin>>m;
      51.    cout<<"Nhap n = ";
      52.    cin>>n;
      53.    cout<<"Nhap p = ";
      54.    cin>>p;
      55.    cout<<"Nhap ma tran A cap "<<m<<"x"<<n<<endl;
      56.    NhapMaTran(A,m,n,'A');
      57.    cout<<"Nhap ma tran B cap "<<m<<"x"<<n<<endl;
      58.    NhapMaTran(B,m,n,'B');
      59.    cout<<"Nhap ma tran C cap "<<n<<"x"<<p<<endl;
      60.    NhapMaTran(C,n,p,'C');
      61.    cout<<"Ma tran A";
      62.    XuatMaTran(A,m,n);
      63.    getch();
      64.    cout<<"\n\nMa tran B";
      65.    XuatMaTran(B,m,n);
      66.    getch();
      67.    cout<<"\n\nMa tran C";
      68.    XuatMaTran(C,n,p);
      69.    getch();
      70.    cout<<"\n\nMa tran D = A+B";
      71.    CongMaTran(A,B,D,m,n);
      72.    XuatMaTran(D,m,n);
      73.    getch();
      74.    cout<<"\n\nMa tran D = A.C";
      75.    NhanMaTran(A,C,D,m,n,p);
      76.    XuatMaTran(D,n,p);
      77.    getch();
      78.    return 0;
      79. }
      80.  
      81. [/plain]
       
    3. Nguyễn Quang Đức

      Nguyễn Quang Đức TBit-Member

      Điểm:
      giải thích giúp em cái vd4 phần loại bỏ phần tử trùng nhau với ????
       
Từ khóa:

Chia sẻ trang này

Đang tải...