Bài giảng Ngôn ngữ lập trình nâng cao - Bài 3: Kiểu dữ liệu tập hợp - Nguyễn Xuân Hùng
Câu lệnh foreach làm sang tỏ quá trình vòng lặp thông
thường và loại bỏ sự cần thiết cho chúng ta để kiểm tra kích
thước mảng.
Mảng Param được sử dụng trong phương thức với danh sách
tham số khi số tham số không biết trước.
.NET Framework cung cấp một vài class tập hơp các thành
phần cùng nhau theo cách đặc biệt. Đó là các lớp
Collection và nó nằm trong không gian tên System.
ArrayList hữu dụng khi chúng ta muốn thao tác với các giá
trị trong mảng dễ dàng
33 trang |
Chia sẻ: huongthu9 | Lượt xem: 456 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Ngôn ngữ lập trình nâng cao - Bài 3: Kiểu dữ liệu tập hợp - Nguyễn Xuân Hùng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Slide 1 of 33Ver. 1.0
Object-Oriented Programming Using C#
NGÔN NGỮ LẬP TRÌNH NÂNG CAO
Slide 2 of 33Ver. 1.0
Object-Oriented Programming Using C#
Trong mục này chúng ta sẽ học:
Miêu tả sự cấp phát bộ nhớ
Sử dụng cấu trúc (structures)
Sử dụng kiểu liệt kê(enumerations)
Thực thi mảng (arrays)
Sử dụng tập hợp (collections)
Mục tiêu
Slide 3 of 33Ver. 1.0
Object-Oriented Programming Using C#
Bộ nhớ được cấp phát cho các biến được đề cập theo các
cách sau:
Kiểu giá trị (Value types): Chứa dữ liệu. Kiểu dữ liệu gắn liền
như là kiểu int, char và float là các kiểu giá trị.
Kiểu tham chiếu (Reference types): Chứa địa chỉ tham chiếu
tới một khối bộ nhớ. Các kiểu dữ liệu như là string và class là
các kiểu tham chiếu.
Chúng ta cùng tìm hiểu chi tiết các khái niệm cấp phát bộ
nhớ.
Miêu tả sự cấp phát bộ nhớ
Slide 4 of 33Ver. 1.0
Object-Oriented Programming Using C#
Miêu tả sự cấp phát bộ nhớ (tiếp)
int Num1;
Num1=50;
Khởi tạo
Khởi tạo Num2 bằng Num1
int Num2;
Num2=Num1;
Khai báo biến
Kiểu giá trị - Value Type:
Khai báo biến
50
50
Cả Num1 và Num2 chứa 50
Num1
Num2
Slide 5 of 33Ver. 1.0
Object-Oriented Programming Using C#
Miêu tả sự cấp phát bộ nhớ (tiếp)
Kiểu giá trị - Value Type (tiếp):
Num1=60;
Num1
60
Num2
50
Giá trị của Num2 không ảnh hưởng
Giá trị mới được gán cho Num1
Slide 6 of 33Ver. 1.0
Object-Oriented Programming Using C#
Kiểu tham chiếu - Reference Type:
Car Suzuki= new Car();
Suzuki.Model=10;
Đối tượng của class Car()
Biến thành viên của class Car()
Khởi tạo
Khởi tạo Mercedes bằng Suzuki
Đối tượng của class Car()Car Mercedes;
Mercedes=Suzuki;
Miêu tả sự cấp phát bộ nhớ (tiếp)
Slide 7 of 33Ver. 1.0
Object-Oriented Programming Using C#
Kiểu tham chiếu - Reference Type (tiếp):
Suzuki
Mercedes
***
***
10
Tham chiếu tới vị trị bộ
nhớ nơi dữ liệu được lưu
trữ
Tham chiếu tới bộ vị trí bộ
nhớ nơi dữ liệu được lưu
trữ
Miêu tả sự cấp phát bộ nhớ (tiếp)
Slide 8 of 33Ver. 1.0
Object-Oriented Programming Using C#
Một structure là một dữ liệu kiểu giá trị.
Khi chúng ta muốn một biến đơn để lưu trữ dữ liệu liên
quan tới đa dạng kiểu dữ liệu, chúng ta có thể tạo structure.
Để tạo structure chúng ta sử dụng từ khóa struct.
Đoạn mã sau minh họa cách thức khai báo một structure
tên là Bill_Details:
struct Bill_Details
{ public string inv_No; // Tên đơn hàng
string ord_Dt; // Ngày mua
string custName; // Tên khách hàng
Sử dụng cấu trúc - Structure
Slide 9 of 33Ver. 1.0
Object-Oriented Programming Using C#
public string product; // Tên sản phẩm
public double cost; // Giá của sản phẩm
public double due_Amt; // Tổng số tiền
}
Sử dụng cấu trúc - Structure (tiếp)
Slide 10 of 33Ver. 1.0
Object-Oriented Programming Using C#
Kiểu liệt kê là dữ liệu kiểu giá trị.
Kiểu liệt kê chứa các giá trị của nó và không thể kế thừa.
Kiểu liệt kê cho phép chúng ta gán tên tượng trung cho
hằng số nguyên.
Để tạo kiểu liệt kê, chúng ta sử dụng từ khóa enum.
Sử dụng kiểu liệt kê
Slide 11 of 33Ver. 1.0
Object-Oriented Programming Using C#
Đoạn mã sau làm một ví dụ khai báo một kiểu liệt kê với tên
là Days:
enum Days { Sat, Sun, Mon, Tue, Wed, Thu, Fri };
Khai báo kiểu liệt kê
Slide 12 of 33Ver. 1.0
Object-Oriented Programming Using C#
Sau khi khai báo kiểu liệt kê, chúng ta có thể sử dụng kiểu
liệt kê như các kiểu dữ liệu khác:
int First_Day = (int)Days.Sat;
int Last_Day = (int)Days.Fri;
Thực thi kiểu liệt kê
Slide 13 of 33Ver. 1.0
Object-Oriented Programming Using C#
Thực thi mảng
Mảng là tập hợp các giá trị có cùng kiểu dữ liệu.
Hình sau minh họa cấu trúc mảng trong bộ nhớ hệ thống.
Index
Value 0
Index
Value 6
Slide 14 of 33Ver. 1.0
Object-Oriented Programming Using C#
Khai báo mảng
Mảng cần thiết khai báo trước khi nó có thể được sử dụng
trong chương trình.
Cú pháp khai báo mảng như sau:
datatype[] Arrayname;
Chúng ta cùng tìm hiểu các thành phần đa dạng của khai
báo mảng thông qua ví dụ sau.
Slide 15 of 33Ver. 1.0
Object-Oriented Programming Using C#
Khai báo mảng (tiếp)
int[ ] Score; Kiểu dữ liệu
Được sử dụng để chỉ ra
kiểu dữ liệu của các
thành phần mảng
Slide 16 of 33Ver. 1.0
Object-Oriented Programming Using C#
Khai báo mảng (tiếp)
int[ ] Score; [ ]
Được sử dụng để chỉ ra
hạng của mảng
Slide 17 of 33Ver. 1.0
Object-Oriented Programming Using C#
Khai báo mảng (tiếp)
int[ ] Score; Tên mảng
Được sử dụng để chỉ ra
tên của mảng sử dụng và
các thành phần của mảng
sẽ được khởi tạo và thao
tác
Slide 18 of 33Ver. 1.0
Object-Oriented Programming Using C#
Trong C#, chúng ta có thể khởi tạo biến mảng và gán các
giá trị cho các thành phần của mảng. Ngoài ra chúng ta có
thể sao chép biến mảng này cho biến mảng khác.
Trong quá trình khởi tạo, chúng ta có thể tạo một thể hiện
của mảng. Ngoài ra kích thước của mảng cũng được chỉ ra
trong khi nó được khởi tạo.
Ví dụ sau minh họa việc khởi tạo mảng:
int[] Score; // Khai báo mảng
Score = new int[10]; // Thể hiện mảng
Khởi tạo và gán giá trị cho mảng
Slide 19 of 33Ver. 1.0
Object-Oriented Programming Using C#
Chúng ta có thể gán giá trị cho các thành phần của mảng
thông qua chỉ số của mảng.
Ví dụ sau minh họa việc gán gái trị vào mảng:
int[] Score = new int[3];
Score[0]=10;
Hoặc
int[] Score={5,10,15};
Khi chúng ta sao chép biến mảng, cả biến nguồn và đích
phải cùng một thể hiện mảng trong bộ nhớ.
Ví dụ sau minh họa việc sao chép biến mảng:
int[] Source = new int[5] {0, 1, 2, 3, 4};
int[] Target= Source;
Khởi tạo và gán giá trị cho mảng (tiếp)
Slide 20 of 33Ver. 1.0
Object-Oriented Programming Using C#
Khi một mảng được khởi tạo, chúng ta có thể truy cập các
giá trị của thành phần mảng và thao tác chúng.
Vòng lặp foreach được sử dụng để thao tác với mảng.
Cú pháp vòng lặp foreach như sau:
foreach (type identifier in expression)
{
//Câu lệnh
}
Thao tác với các thành phần của mảng
Slide 21 of 33Ver. 1.0
Object-Oriented Programming Using C#
Ví dụ về vòng lặp foreach như sau:
int[] Numbers = { 4, 3, 2, 1, 0, -1, -2, 9, 5 };
Console.WriteLine("The Contents of an Array
is:");
foreach (int K in Numbers)
{
Console.WriteLine("{0} \t",K);
}
Thao tác với các thành phần của mảng (tiếp)
Slide 22 of 33Ver. 1.0
Object-Oriented Programming Using C#
Trong khi khai báo một phương thức nếu chúng ta không
chắc về số lượng các tham số truyền vào, chúng ta có thể
sử dụn mảng param.
Ví dụ minh họa mảng param như sau:
public int Adding_ArrayElement(params int[]
List)
{
int Total = 0;
foreach ( int I in List )
{
Total += I;
}
return Total;
}
Thao tác với các thành phần của mảng (tiếp)
Slide 23 of 33Ver. 1.0
Object-Oriented Programming Using C#
Ví dụ: Trừ ma trận sử dụng mảng
Vấn đề đặt ra:
Đăng, sinh viên trường WRU, đang theo đuổi lĩnh vực toán
học. Anh ta đang làm việc trong một dự án Matrix Subtraction.
Anh ta cần thực thi các công việc sau cho dự án của anh ấy:
Chấp nhận dữ liệu của hai mảng
Thực thi việc trừ hai mảng.
Hiển thị giá trị trừ.
Giúp Đăng làm công việc trên sử dụng Visual Studio IDE.
Slide 24 of 33Ver. 1.0
Object-Oriented Programming Using C#
Giải pháp:
Để giải quyết vấn đề đưa ra, Đăng cần thực thi các công việc
sau:
1. Tạo một console-based application cho dự án Matrix Subtraction.
2. Build and execute ứng dụng.
Ví dụ: Trừ ma trận sử dụng mảng (tiếp)
Slide 25 of 33Ver. 1.0
Object-Oriented Programming Using C#
Mảng nhiều chiều
Giá trị hạng của mảng cũng được biết tới như kích thước
của mảng.
Mảng có thể là mảng một chiều hay mảng nhiều chiều.
Mảng một chiều lưu trữ dữ liệu trong môt hàng.
Mảng nhiều chiều lưu trữ dữ liệu sử dụng các kích thước
khác nhau.
Hình sau minh họa các giá trị lưu trữ trong mảng đơn và
mảng nhiều chiều.
int [] Num; int[,] Num;
0
0 1 2 3 4 1
0 1 2 3 4
Slide 26 of 33Ver. 1.0
Object-Oriented Programming Using C#
Mảng nhiều chiều (tiếp)
class Array là lớp cơ bản cho tất cả các ảng trong C#.
class Array cung cấp các thuộc tính và phương thức để
làm việc với mảng.
Thuộc tính: Bảng sau giải thích một số thuộc tính thường sử
dụng của class Array.
Thuộc tính Giải thích
Length Trả về tổng số phần tử trong mảng
Rank Trả về hạng (số chiều) của mảng
IsFixedSize Trả về giá trị biểu thị mảng đó được cố định kích thước
hoặc không
IsReadOnly Trả về giá trị biểu thị mảng chỉ đọc hoặc không
Slide 27 of 33Ver. 1.0
Object-Oriented Programming Using C#
Mảng nhiều chiều (tiếp)
Phương thức: Bảng sau giải thích một số phương thức hay sử
dụng trong class Array.
Phương thức Giải thích
Sort Thực thi sắp xếp các thành phần trong mảng
Clear Xóa bỏ tất cả các phần tử trong mảng và thiết lập các giá trị
của mảng về 0
GetLength Trả về số lượng phần tử trong mảng
GetValue Trả về giá trị của phần tử cụ thể trong mảng
IndexOf Trả về chỉ số giá trị đầu tiên tìm thấy trong mảng một chiều
hoặc trong mọt phần của mảng.
Slide 28 of 33Ver. 1.0
Object-Oriented Programming Using C#
Sử dụng tập hợp
Mảng được sử dụng để tập hợp các phần tử có cùng kiểu
dữ liệu.
.NET Framework cung cấp một vài lớp cũng có thể tập hợp
các thành phần ttheo một cách đặc biệt. Các lớp đó là lớp
Collection, và được khai báo trong không gian tên
System.Collections và không gian con.
Slide 29 of 33Ver. 1.0
Object-Oriented Programming Using C#
Sử dụng tập hợp (tiếp)
Các lớp tập hợp chấp nhận, lưu trữ, và trả về các thành
phần của nó như các phần tử.
Các kiểu phần tử trong lớp tập hợp như là một đối tượng.
Đối tượng là kiểu tham chiếu.
Hình sau minh họa lưu trữ giá trị mảng kiểu int:
STACK HEAP
9 7 3 2
Array
@
int [] array= {9, 7, 3, 2};
Slide 30 of 33Ver. 1.0
Object-Oriented Programming Using C#
Sử dụng tập hợp (tiếp)
Hoạt động tự động chuyển đổi kiểu giá trị sang kiểu tham
chiếu.
Hình sau minh họa kỹ thuật boxing.
STACK HEAP
@ @ @ @
Array
@
int [] array= {9, 7, 3, 2};
7 2
39
Slide 31 of 33Ver. 1.0
Object-Oriented Programming Using C#
Sử dụng tập hợp (tiếp)
Khi chúng ta muốn truy cập các thành phần của mảng thông
qua chỉ số của nó, chúng ta sử dụng lớp ArrayList.
Bảng sau miêu tả đa dạng phương thức của lớp
ArrayList.
Phương thức Sử dung
Add Bổ sung một đối tượng vào cuối ArrayList
Remove Loại bỏ phần tử tại ví trí gặp đầu tiên của đối tượng chỉ định từ ArrayList
Clear Loại bỏ tất cả phần tử từ ArrayList
Insert Chèn một phần tử vào ArrayList tại vị trí cụ thể
TrimToSize Thiết lập dung lượng thực sự số thành phần trong ArrayList
Sort Sắp xếp các thành phần trong ArrayList
Reverse Đảo ngược các phần tử trong ArrayList
Slide 32 of 33Ver. 1.0
Object-Oriented Programming Using C#
Trong mục này, chúng ta đã học được:
Bộ nhớ phân bố cho biến có hai kiểu: giá trị và tham chiếu.
Kiểu giá trị là kiểu đơn giản nhất trong C#. Các biến kiểu giá trị
chứa trực tiếp dữ liệu trong biến.
Kiểu tham chiếu chỉ chứa tham chiếu tới dữ liệu. Dữ liệu được
lưu trữ trong vùng nhớ khác.
Biến kiểu giá trị lưu trữ giá trị của nó trong stack.
Biến kiểu tham chiếu lưu trữ một tham chiếu tới đối tượng
trong heap.
Để lưu giữ dữ liệu liên quan của đã dạng kiểu dữ liệu trong
một biến đơn, structures được sử dụng.
C# cung cấp đặc tính enum để tạo kiểu dữ liệu người dùng
định nghĩa với các số như mọt giá trị chỉ số để truy cập chúng.
Một mảng là một tập hợp các giá trị của các giá trị có cùng
kiểu.
Tổng kết
Slide 33 of 33Ver. 1.0
Object-Oriented Programming Using C#
Câu lệnh foreach làm sang tỏ quá trình vòng lặp thông
thường và loại bỏ sự cần thiết cho chúng ta để kiểm tra kích
thước mảng.
Mảng Param được sử dụng trong phương thức với danh sách
tham số khi số tham số không biết trước.
.NET Framework cung cấp một vài class tập hơp các thành
phần cùng nhau theo cách đặc biệt. Đó là các lớp
Collection và nó nằm trong không gian tên System.
ArrayList hữu dụng khi chúng ta muốn thao tác với các giá
trị trong mảng dễ dàng.
Tổng kết (tiếp)
Các file đính kèm theo tài liệu này:
- bai_giang_ngon_ngu_lap_trinh_nang_cao_bai_3_kieu_du_lieu_tap.pdf