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();
}
}
}