Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

CHƯƠNG 6 MẢNG TRONG C#- ARRAY

Ngôn ngữ lập trình trong Xây dựng

Bộ môn Tin học Xây dựng


TS. Phạm Thành Hưng
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

Chương 6

1. Mảng 1 chiều – 1D Array


2. Sử dụng và thao tác trên mảng 1 chiều
3. Khai báo mảng 2 chiều - 2D Array
4. Sử dụng và thao tác trên mảng 2 chiều
5. Các thuộc tính và phương thức của mảng

2
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

1. Mảng 1 chiều trong C#

• Mảng là tập hợp của nhiều phần tử (elements) có cùng kiểu dữ liệu. Mỗi phần tử có
số thứ tự từ 0 đến n-1 (chỉ số phần tử) với n là số lượng phần tử có trong mảng
• Mảng dùng để lưu nhiều giá trị phần tử vào trong một biến thay vì khai báo nhiều
biến riêng cho nhiều giá trị
• Các phần tử trong mảng được truy xuất thông qua số thứ tự (chỉ số) phần tử
• Để khai báo mảng thì dùng dấu ngoặc vuông [ ]
Ví dụ:
string[] cars = {“Toyota”, “Honda”, “Mazda”, “Ford”, “Mercedes”};
int[] myNum = {10, 30, 50, 70};
3
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

1. Mảng 1D Array trong C#


• Mảng 1 chiều là mảng trong đó các phần tử lưu trên 1 dòng
• Cấp phát vùng nhớ thông qua khai báo chỉ số phần tử trong mảng [n]
• Khởi tạo giá trị được thực hiện thông qua toán tử new
• Cú pháp 1: khai báo một mảng trống trước và sau đó thêm giá trị thì phải dùng new
<kiểu dữ liệu> [ ] <tên mảng>;

<tên mảng> = new <kiểu dữ liệu>[ ] { <giá trị 1>, <giá trị 2>, …<giá trị n> };

• Ví dụ 1:
string[] cars;

cars = new string {“Toyota”, “Honda”, “Mazda”, “Ford”, “Mercedes”};4


Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

1. Mảng 1D Array trong C#


• Cú pháp 2: Tạo mảng có n phần tử trước (kiểu khai báo và cấp phát vùng nhớ)
<kiểu dữ liệu> [ ] <tên mảng> = new <kiểu dữ liệu> [ <số phần tử n> ];
• Ví dụ 2:
string[] cars = new string [5];
• Cú pháp 3: Tạo mảng với n phần tử và sau đó thêm giá trị ngay phía sau (kiểu khai
báo, cấp phát vùng nhớ và khởi tạo giá trị cho mảng)
<kiểu dữ liệu> [ ] <tên mảng> = new <kiểu dữ liệu> [ <số phần tử n> ] { <giá trị 1>, <giá
trị 2>, …, <giá trị n> };
• Ví dụ 3:
string [] cars = new string [5] {“Toyota”, “Honda”, “Mazda”, “Ford”,
5
“Mercedes”};
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

1. Mảng 1D Array trong C#


• Cú pháp 4: Tạo mảng với n phần tử nhưng không xác định kích thước mảng (kiểu khởi
tạo giá trị cho mảng)
<kiểu dữ liệu> [ ] <tên mảng> = new <kiểu dữ liệu> {<giá trị 1>, <giá trị 1>,…, <giá trị 1>};
• Ví dụ 4:
string [] cars = new string {“Toyota”, “Honda”, “Mazda”, “Ford”,
“Mercedes”};
• Cú pháp 5: Tạo mảng với n phần tử nhưng không cần xác định kích thước mảng và
không dùng toán tử new (kiểu khởi tạo giá trị cho mảng)
<kiểu dữ liệu> [ ] <tên mảng> = {<giá trị phần tử>};
• Ví dụ 5:
string [] cars = {“Toyota”, “Honda”, “Mazda”, “Ford”, “Mercedes”}; 6
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

int [] myNUmber = new int [] { 10, 20, 30, 40};


var myNumber = new int []{10, 20, 30, 40};
var cars = new string[]{“Toyota”, ”Honda”};

7
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

Ví dụ:

int [] myNum = new int []; // sai vì thiếu kích thước mảng
int [] myNum = new int [10]{1, 2, 3, 4, 5};//kích thước khác
với số phần tử
var myNum = {2, 4, 6, 8}; // thiếu toán tử new và kiểu dữ
liệu int và ký hiệu mảng []

8
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

2. Sử dụng và các thao tác với mảng 1 chiều


2.1 Truy xuất các phần tử trong mảng
string[] cars = {“Toyota”, “Honda”, “Mazda”, “Ford”, “Mercedes”};
Console.WriteLine(cars[1]); //kết quả “Honda”
2.2 Thay đổi các phần tử trong mảng
int[] myNum = {10, 30, 50, 70};
myNum[2] = 40;
Console.WriteLine(myNum[2]); //kết quả là 40
2.3 Kích thước của mảng - Sử dụng thuộc tính Length
string[] cars = {“Toyota”, “Honda”, “Mazda”, “Ford”, “Mercedes”};
Console.WriteLine(cars.Length); //kết quả 5
9
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

2. Sử dụng và các thao tác với mảng 1 chiều


2.4 Các phương thức (method) của mảng 1 chiều - Ví dụ hàm sắp xếp Sort()
int[] myNum = {50, 10, 30, 70};
Array.Sort(myNum);
foreach (int i in myNum)
{
Console.WriteLine(i); // kết quả 10, 30, 50, 70
}

string [] cars = {“Toyota”, “Honda”, “Mazda”, “Ford”, “Mercedes”};


Array.Sort(cars);
{
Console.WriteLine(i);
10
}
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

2. Sử dụng và các thao tác với mảng 1 chiều


2.5 Các hàm (method) của mảng trong ngôn ngữ truy vấn tổng hợp System.Linq
using System;
using System.Linq;
namespace MyProgram
{
class Program
{
static void Main(string[] args)
{
int[] myNum = {50, 10, 30, 70};
Console.WriteLine(myNum.Max()); // kết quả 70
Console.WriteLine(myNum.Min()); // kết quả 10
Console.WriteLine(myNum.Sum()); // kết quả 160
}
}
} 11
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

2. Sử dụng và các thao tác với mảng 1 chiều


2.6 Vòng lặp với mảng for
int[] myNum = {10, 30, 50, 70};
for (int i=0; i < myNum.Length; i++)
{
Console.WriteLine(myNum[i]);
}
2.7 Vòng lặp với mảng foreach
int[] myNum = {10, 30, 50, 70};
foreach (int i in myNum)
{
Console.WriteLine(i);
}
12
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

Ví dụ
• Tạo mảng gồm 100 phần tử với giá trị tăng từ 100 đến 199 theo thứ tự
• Xuất ra màn hình
Phan tu 1 = 199
Phan tu 2 = 198
Phan tu i = …
Phan tu 99 = 101
Phan tu 100 = 100

13
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

3. Mảng 2 chiều trong C#

• Mảng 2 chiều có những đặc trưng giống mảng 1 chiều


• Mảng 2 chiều là mảng có n hàng và m cột
• Các phần tử trong mảng 2 chiều được truy xuất thông qua 2 chỉ số i and j theo hàng
và cột
• Chỉ số các hàng và cột được đánh số thứ tự từ 0 đến n-1 và 0 đến m-1
• Mảng chữ nhật (Rectangular Array) là mảng số cột trên mỗi hàng là như nhau
• Mảng trong mảng(Jagged Array) là mảng mà số cột trên mỗi hàng khác nhau

14
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

3. Mảng 2 chiều trong C#

• Cú pháp 1 (cấp phát vùng nhớ cần khai báo số hàng và số cột của mảng 2 chiều)
<kiểu dữ liệu> [ , ] <tên mảng> = new <kiểu dữ liệu> [ <số hàng>, <số cột>];
• Ví dụ 1:
int [,] myNum = new int [5, 7];

Mảng 3 chiều
Int [, ,] myArray = new int [3, 4 ,5];
Mảng 4 chiều
Int [, , ,] myarray= new int [4, 4, 5, 6];
15
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

3. Mảng 2 chiều trong C#


• Cú pháp 2: (cấp phát bộ nhớ và khởi tạo giá trị)
<kiểu dữ liệu> [ , ] <tên mảng> = new <kiểu dữ liệu> [, ]
{
{ <giá trị hàng 1 cột 1>, …, <giá trị hàng 1 cột m> },

{ giá trị hàng n cột 1>, …., <giá trị hàng n cột m> }
}
• Ví dụ 2:
int [,] myNum = new int [,]
{
{3, 5, 7, 9},
{2, 4, 6, 8}
}
16
myNum [a, b] =5; //a = 0, b =1
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

3. Mảng 2 chiều trong C#


• Cú pháp 3: (khởi tạo giá trị)
<kiểu dữ liệu> [ , ] <tên mảng> =
{
{ <giá trị hàng 1 cột 1>, …, <giá trị hàng 1 cột m> },

{ giá trị hàng n cột 1>, …., <giá trị hàng n cột m> }
}
• Ví dụ 3:
int [,] myNum =
{
{1, 3, 5},
{7, 9, 11},
{2, 4, 6}
} // myNum[1,1] = 9 17
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

4. Vòng lặp với mảng 2 chiều


int [,] myNum = new int [3, 4]
{
{1, 3, 5, 7},
{2, 4, 6, 8},
{9, 11, 13, 15}
}
for (int i= 0; i < myNum.GetLength(0); i++)
{
for (int j = 0; j < myNum.GetLength(1); j++)
{

Console.WriteLine(myNum[i,j]);
}
}
18
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

Ví dụ
• Cấp phát và khởi tạo mảng hai chiều với 4 hàng và 3 cột
{
{0, 1, 2 },
{3, 4, 5},
{6, 7, 8},
{9, 10, 11}
}
• Xuất ra màn hình giá trị tại hàng 1, cột 1
• Xuất ra màn hình giá trị tại hàng 3, cột 3
• Xuất ra màn hình giá trị tại hàng 2, cột 3
• Thay đổi giá trị của mảng tại hàng 2, cột 1 bằng 12
19
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

5. Mảng trong mảng (Jagged array)


• Mảng có các phần tử là các mảng với số cột trong các hàng có thể khác nhau
• Cấp phát bộ nhớ cho mảng có 5 mảng số nguyên, mỗi mảng có 4 số nguyên
int [][] diem = new int [5][];
for (int i=0; i < diem.Length; i++)
{
diem[i] = new int [4];
}
• Cấp phát và khởi tạo mảng có 2 mảng số nguyên, một mảng có 3 số nguyên và một mảng có
4 số nguyên
int[][] mang =new int[2][]{new int[] {10, 20, 30},new int[]{90, 80, 70, 60}};
Console.WriteLine(mang[0]); // ket quả 10, 20 ,30
Console.WriteLine(mang[1]); // ket qua 90, 80, 70, 60
Console.WriteLine(mang[0][1]); // ket qua 20
20
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

using System;
namespace ArrayApplication {
class MyArray {
double getAverage(int[] arr, int size) {
int i;
double avg;
int sum = 0;

for (i = 0; i < size; ++i) {


sum += arr[i];
}
avg = (double)sum / size;
return avg;
}
static void Main(string[] args) {
MyArray app = new MyArray();

int [] balance = new int[]{1000, 2, 3, 17, 50};


double avg;

avg = app.getAverage(balance, 5 ) ;

Console.WriteLine( "Average value is: {0} ", avg );


Console.ReadKey();
}
}
}
21
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

Một vài thuộc tính (properties) của lớp mảng

Thuộc tính Mô tả
Length() Kích thước của mảng (số phần tử của mảng) - int/32-bit
LongLength() Kích thước của mảng (số phần tử của mảng) - long/64-bit
Rank() Số chiều của mảng
IsFixedSize() Kích thước của mảng là cố định đúng hay sai
IsReadOnly() Mảng chỉ cho phép đọc đúng hay sai

22
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

Một vài phương thức (methods) của lớp mảng


Phương thức Mô tả

Clear() Xóa dữ liệu trong mảng và trả về giá trị mặc định của kiểu (zero, false hoặc null)

Sao chép một khoảng các phần tử từ phần tử đầu tiên của mảng và dán vào vị
Copy(array,array,int32) trí đầu tiên của mảng mới. Chiều dài của các phần tử sao chép được định nghĩa
kiểu int32

Sao chép tất cả các phần tử của mảng 1D hiện tại đến một vị trí chỉ số xác định
CopyTo(array,int32)
của một mảng 1D khác. Chỉ số được định nghĩa kiểu int32

GetLength(int32) Cho biết số lượng phần tử theo chiều xác định trong mảng
GetValue(int32) Truy vấn giá trị của phần tử dựa vào chỉ số của nó
SetValue(object,int32) Gán object cho phần tử tại chỉ số int32 của mảng

IndexOf(array,object) Tìm kiếm vị trí (chỉ số) của đối tượng object trong mảng

Reverse(array) Đảo ngược thứ tự các phần tử của mảng 1D


23
Sort(array) Sắp xếp các phần tử của mảng
Bộ môn Tin học Xây dựng
TS. Phạm Thành Hưng

Bài tập Tầng Cao Chiều Kích thước Kích thước


trình (m) cao (m) cột giữa cột biên
• Kết cấu nhà cao tầng với chiều Tầng mái 37.3 3.2 0.5x0.6 0.5x0.5
cao mỗi tầng khác nhau Tầng 10 34.1 3.3 0.5x0.6 0.5x0.5
• Mỗi tầng có 12 cột giữa và 08 Tầng 9 30.8 3.3 0.5x0.6 0.5x0.5
cột biên với kích thước cột giữa Tầng 8 27.5 3.3 0.6x0.7 0.6x0.6
và cột biên ở mỗi tầng là khác Tầng 7 24.2 3.3 0.6x0.7 0.6x0.6
nhau.
Tầng 6 20.9 3.3 0.6x0.7 0.6x0.6
• Tạo mảng 2 chiều để lưu trữ Tầng 5 17.6 3.3 0.7x0.8 0.7x0.7
chiều cao và kích thước các loại
Tầng 4 14.3 3.3 0.7x0.8 0.7x0.7
cột của toàn bộ công trình.
Tầng 3 11.0 3.3 0.7x0.8 0.7x0.7
• Truy vấn kích thước từng loại Tầng 2 7.7 3.7 0.8x0.9 0.8x0.8
cột và chiều cao từng tầng, tính
Tầng lửng 4.0 4.0 0.8x0.9 0.8x0.8
thể tích bê tông cần thiết để xây
Tầng trệt 0 3.0 0.8x0.9 0.8x0.8
dựng cấu kiện cột cho công
Tầng hầm 1 -3.0 2.8 0.8x0.9 0.8x0.8
trình này.
Tầng hầm 2 -5.8 0 0.8x0.9 24
0.8x0.8

You might also like