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

pdf33 trang | Chia sẻ: huongthu9 | Lượt xem: 456 | Lượt tải: 0download
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:

  • pdfbai_giang_ngon_ngu_lap_trinh_nang_cao_bai_3_kieu_du_lieu_tap.pdf