Bài 9. Mảng (ARRAY)
Giới thiệu mảng
Khái niệm: Mảng là một tập hợp có thứ tự của những đối tượng, tất cả các đối tượng này cùng một kiểu. Mảng trong ngôn ngữ C# có một vài sự khác biệt so với mảng trong ngôn ngữ C++ và một số ngôn ngữ khác, bởi vì chúng là những đối tượng. Điều này sẽ cung cấp cho mảng sử dụng các phương thức và những thuộc tính.
Khai báo mảng:
- Mảng 1 chiều
<kiểu dữ liệu>[] <tên mảng>;
Ví dụ:
int[] a;
// khai báo mảng a kiểu số nguyên
float[] b;
// khai báo mảng b kiểu số thực
Tạo thể hiện của mảng: bằng cách sử dụng từ khóa new như sau:
a = new int[50];
// Khai báo này sẽ thiết lập bên trong bộ nhớ một mảng chứa 50 số nguyên.
b = new float[10];
// Khai báo này sẽ thiết lập bên trong bộ nhớ một mảng chứa 10 số thực.
Khởi tạo thành phần của mảng: Ta có thể khởi tạo nội dung của một mảng ngay lúc tạo thể hiện của mảng bằng cách đặt những giá trị bên trong dấu ngoặc ({}). C# cung cấp hai cú pháp để khởi tạo các thành phần của mảng, một cú pháp dài và một cú pháp ngắn:
int[] a = new int[5] { 1, 2, 3, 4, 5};
float[] b = { 2, 4, 6, 8, 10};
Không có sự khác biệt giữa hai cú pháp trên, và hầu hết các chương trình đều sử dụng cú pháp ngắn hơn do sự tự nhiên và lười đánh nhiều lệnh của người lập trình.
- Mảng nhiều chiều (thường dùng mảng 2 chiều)
<kiểu dữ liệu>[dong, cot] <tên mảng>;
Trong đó:
dong
: Số phần tử tối đa trong mảng dòng
cot
: Số phần tử tối đa trong mảng cot.
Ví dụ:
int[,] m;
// khai báo mảng 2 chiều kích có kiểu dữ liệu nguyên
Tạo thể hiện của mảng: bằng cách sử dụng từ khóa new như sau:
m = new int[5,2];
// Khai báo này sẽ thiết lập bên trong bộ nhớ một mảng chứa 10 (5 dòng, 2 cột) số nguyên.
Khởi tạo thành phần của mảng 2 chiều:
int[,] m = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };
Ví dụ:
Ví dụ 1: 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.
namespace TBit_CSharp { class Program { static void Main(string[] args) { // khai bao mang a co kich thuoc 100 int[] a = new int[100]; // khai bao n (so phan tu thuc te cua mang) int n; // nhap so phan tu cua mang do{ Console.WriteLine("\n Nhap so phan tu cua mang: "); n=int.Parse(Console.ReadLine()); if(n<=2||n>=100) Console.WriteLine("\n Nhap lai n !"); }while (n<=2||n>=100); // Nhap mang Console.WriteLine("\n Nhap phan tu mang: "); for(int i=0;i<n;i++){ Console.Write("\n a["+i+"]= "); a[i] = int.Parse(Console.ReadLine()); } // In mang Console.WriteLine("\n In mang : "); for(int i=0;i<n;i++) { Console.Write(a[i]+"; "); } Console.ReadLine(); } } }
Ví dụ 2: 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
namespace TBit_CSharp { class Program { static void Main(string[] args) { int[] a = new int[100]; //Khai báo mảng a có kích thước 100 int n; //Khai báo n (Số phần tử thực tế của mảng) // Nhập số phần tử của mảng do { Console.WriteLine("\n Nhap so phan tu cua mang: "); n = int.Parse(Console.ReadLine()); if (n <= 2 || n >= 100) Console.WriteLine("\n Nhap lai n !"); } while (n <= 2 || n >= 100); // Nhập mảng Console.WriteLine("\n Nhap phan tu mang: "); for (int i = 0; i < n; i++) { Console.Write("\n a[" + i + "]= "); a[i] = int.Parse(Console.ReadLine()); } // In các số chẵn trong mảng Console.WriteLine("\n Cac so chan trong mang : "); for (int i = 0; i < n; i++){ if(a[i]%2==0) Console.Write(a[i] + "; "); } Console.ReadLine(); } } }
Ví dụ 3: 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.
namespace TBit_CSharp { class Program{ const int max = 100; //nhap day static void NhapDay(int[] a,int n) { for(int i=0; i<n; i++) { Console.Write("\n a[" + i + "]= "); a[i] = int.Parse(Console.ReadLine()); } } //xuat day static void XuatDay(int[] a,int n) { for(int i=0;i<n;i++) { Console.Write(a[i]+"; "); } } //hoan vi 2 phan tu static void Swap(ref int a,ref int b) { int t = a; a = b; b = t; }
static 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(ref a[i],ref a[min]); // doi chu 2 phan tu } }
static void Main(string[] args){ int[] a = new int[max]; int n; Console.WriteLine("\n Nhap so phan tu: "); n = int.Parse(Console.ReadLine()); NhapDay(a,n); Console.WriteLine("\n Day vua nhap la:"); XuatDay(a,n); Console.WriteLine("\n"); SelectionSort (a,n); Console.WriteLine("\n Day vua sap xep la:"); XuatDay(a,n); Console.ReadLine(); } } }
Ví dụ 4: (mảng 2 chiề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.
namespace TBit_CSharp_Mang2chieu { class Program { // nhap ma tran static void NhapMT(ref int[,] m,ref int n){ // nhap kich thuoc Console.Write("\n Nhap kich thuoc cua ma tran:") ; do{ n = int.Parse(Console.ReadLine()); if(n<2||n>6) Console.WriteLine("\n Nhap lai n !"); }while(n<2||n>6); // nhap ma tran Console.WriteLine("\n Nhap ma tran: "); for(int i=0;i<n;i++) for(int j=0;j<n;j++){ Console.Write("\n m["+i+"]["+j+"]= "); m[i,j] = int.Parse(Console.ReadLine()); } } // In ma tran static void InMT(int [,] m, int n){ Console.WriteLine("\n In ma tran vua nhap: "); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) Console.Write(m[i,j]+"\t"); Console.Write("\n"); } } // Tinh tong tung dong static void TongDong(int[,] m, int n){ int[] dong= new int[6]; for(int i=0;i<n;i++){ dong[i]=0; for(int j=0;j<n;j++) dong[i]+=m[i,j]; } Console.Write("\n Tong dong cua ma tran: "); for(int i=0;i<n;i++) Console.Write("\n Dong "+i+" : "+dong[i]); } // Tim cot chua gia tri lon nhat static void TimCotChuaMax(int[,] m, int n){ // 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 Console.Write("\n Cot chua gia tri lon nhat: "); for(i=0;i<n;i++) for(j=0;j<n;j++) if(max==m[i,j]) Console.Write(j+" ; "); } // Ham kiem tra so nguyen to static 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 static void DemSNT(int[,] m, int n){ int dem=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(TestNT(m[i,j])==1) dem++; Console.Write("\n So lan xuat hien cua so nguyen to trong ma tran: "+dem); } static void Main(string[] args) { int[,] m = new int[6, 6]; int n=0; NhapMT(ref m,ref n); InMT(m, n); TongDong(m, n); TimCotChuaMax(m, n); DemSNT(m, n); Console.ReadLine(); } } }