Kĩ thuật lập trình - Các cấu trúc dữ liệu khác

Có hai loại tập tin • Tập tin nhị phân • Tập tin văn bản • Namespace System.IO cung cấp hai lớp StreamWriter và StreamReader để ghi và đọc các tập tin văn bản • Cả hai lớp này đều làm việc với ký tự Unicode • Các bước cần thiết để làm việc với tập tin nhị phân : • Mở tập tin • Đọc/ghi tập tin • Đóng tập tin

pdf23 trang | Chia sẻ: huyhoang44 | Lượt xem: 618 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Kĩ thuật lập trình - Các cấu trúc dữ liệu khác, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác v 1.0 - 11/2012 Các cấu trúc dữ liệu khác 1 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác chúng ta đã học... 2 Programs = Data Structure + Algorithms Tuần tự Rẽ nhánh Lặp Hàm Cấu trúc chương trình Tổ chức dữ liệu bool char short int long float double string Kiểu dữ liệu array Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác và giờ chúng ta học... 3 Programs = Data Structure + Algorithms Tuần tự Rẽ nhánh Lặp Hàm Cấu trúc chương trình Tổ chức dữ liệu bool char short int long float double string Kiểu dữ liệu array struct file Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Nội dung 1. Cấu trúc 2. Tập tin 4 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Cấu trúc struct 5 Đây là lý thuyết cấu trúc theo Lập trình Cấu trúc (sử dụng ngôn ngữ C#), nên sẽ có nhiều khác biệt so với cấu trúc theo Lập trình Hướng đối tượng của C# Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Cấu trúc 6 • Tập hợp các biến được tham chiếu bởi cùng một tên • Khai báo một cấu trúc chỉ như một cái “khuôn” (không được cấp phát bộ nhớ) • Các cấu trúc được khai báo trong class Program và ngoài các hàm • Các khai báo biến (variable declarations) có thể có bất kỳ kiểu gì ngoại trừ kiểu struct đang được khai báo • Mỗi biến được gọi là một thành viên hay trường • Trong C#, khai báo một struct nghĩa là định nghĩa ra một kiểu trị mới struct Name { ! variable declarations; ... } struct Point { ! public int X; public int Y; } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Cấu trúc vs bảng dữ liệu 7 modelnumber partnumber cost 1234 687 10.57 9673 108 57.03 4957 892 3.99 re co rd s (b ản g hi ) fields (trường) struct Part { ! public int modelnumber; ! public int partnumber; ! public float cost; }; Part p1, p2, p3; • Trường ⟺ biến/thành phần trong cấu trúc • Bản ghi ⟺ biến kiểu cấu trúc Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Sử dụng • Bộ nhớ không được cấp phát cho khai báo struct, mà chỉ cấp phát cho các khai báo biến • Một biến kiểu struct được cấp phát trên stack • Khi khai báo biến, các thành phần không được khởi gán giá trị • Các thành phần chỉ có thể được truy xuất một khi đã được gán dữ liệu • Toán tử dấu chấm được dùng để truy xuất thành phần của struct 8 static void Main() { ! Point point; // khởi gán struct point.X = 10; point.Y = 12; ... } th ời g ia n point un un X Y point 10 12 X Y Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Một số thao tác • Khai báo biến, khởi gán • Gán • Gán từng thành phần (chỉ sao chép một số thành phần) • Chỉ có thể so sánh trên từng thành phần 9 struct Date { ! public int year; public int month; public int day; } Date today; today.day = 19; today.month = 11; today.year = 2012; Date when = today; when.year = today.year; when.day = today.day; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Một số thao tác • Mảng kiểu struct • Danh sách kiểu struct 10 Date[] dates = new Date[10]; dates[0].day = 1; dates[0].month = 1; dates[0].year = 2012; dates[1].day = 2; ... List dateList = new List(); Date now; now.year = 2012; now.month = 11; now.day = 19; dateList.Add(now); ... foreach (Date date in dateList) ... Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Truyền struct cho hàm 11 static void PrintDate(Date d) { ! Console.WriteLine(d.year); ! Console.WriteLine(d.month); ! Console.WriteLine(d.day); } static void SetDate(ref Date d, int year, int month, int day) { ! d.year = year; d.month = month; d.day = day; } Date newYears; newYears.day = 1; newYears.month = 1; newYears.year = 2012; PrintDate(newYears); Date newYears; SetDate(newYears, 2012, 1, 1); PrintDate(newYears);M ai n( ) Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Trả về struct 12 static Date GetDate() { ! Date d; ! ! Console.Write("Enter a year : "); ! d.year = int.Parse(Console.ReadLine()); ! Console.Write("Enter a month : "); ! d.month = int.Parse(Console.ReadLine()); ! Console.Write("Enter a day : "); ! d.day = int.Parse(Console.ReadLine()); ! ! return d; } Date now; now = GetDate();M ai n( ) Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Cấu trúc lồng nhau 13 • Cấu trúc có thể chứa cấu trúc • Cấu trúc không thể chứa chính nó struct Range { ! public Date start; ! public Date end; }; struct Date { ! public int year; public int month; public int day; ! Date end;! ! // error }; Range r; r.start.year = 1776; Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Tập tin File 14 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Tập tin văn bản 15 • Có hai loại tập tin • Tập tin nhị phân • Tập tin văn bản • Namespace System.IO cung cấp hai lớp StreamWriter và StreamReader để ghi và đọc các tập tin văn bản • Cả hai lớp này đều làm việc với ký tự Unicode • Các bước cần thiết để làm việc với tập tin nhị phân : • Mở tập tin • Đọc/ghi tập tin • Đóng tập tin Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác StreamWriter 16 Close() Hàm này đóng tập tin và giải phóng các tài nguyên Flush() Hàm này thực hiện ghi dữ liệu trong bộ đệm vào tập tin và xoá sạch bộ đệm ghi NewLine Thuộc tính chỉ ký tự xuống dòng và về đầu dòng Write() Hàm này ghi dữ liệu ra tập tin và không xuống dòng WriteLine() Hàm này ghi dữ liệu ra tâp tin có xuống dòng Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Ví dụ 17 static void Main(string[] args) { // Mở tập tin StreamWriter writer = new StreamWriter("reminders.txt"); if (writer == null) return; // error // Ghi dữ liệu vào tập tin writer.WriteLine("Don’t forget Mother’s Day this year..."); writer.WriteLine("Don’t forget these numbers:"); for (int i = 0; i < 10; i++) writer.Write(i + " "); // Chèn ký tự xuống dòng writer.Write(writer.NewLine); // Đóng tập tin writer.Close(); } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác StreamReader 18 Peek() Hàm này trả ra ký tự tiếp theo mà không thay đổi vị trí đầu đọc. Trả ra giá trị -1 để báo kết thúc tập tin. Read() Hàm đọc dữ liệu từ tập tin ReadBlock() Hàm đọc một số lượng ký tự xác định từ tập tin và ghi vào bộ đệm ReadLine() Hàm đọc một dòng ký tự và trả ra một chuỗi ký tự string ReadToEnd() Hàm đọc tất cả ký tự từ vị trí hiện tại đến cuối tập tin và trả về một chuỗi ký tự duy nhất Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Ví dụ 19 static void Main(string[] args) { // Mở tập tin StreamReader reader = new StreamReader("reminders.txt"); if (reader == null) return; // Đọc từng dòng văn bản trong tập tin string input = null; while ((input = reader.ReadLine()) != null) { Console.WriteLine(input); } // Đóng tập tin reader.Close(); } Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Tổng kết 20 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Cơ sở lập trình 21 • Cái cốt lõi là tư duy lập trình chứ không phải là ngôn ngữ • Cái khác biệt giữa các ngôn ngữ • Cấu trúc điều khiển • Từ khoá • Kiểu dữ liệu • Thư viện lập trình • Cái chung mà một tư duy lập trình phải có • Lập trình tuần tự, rẽ nhánh, lặp • Biểu thức điều kiện • Biến, hằng, kiểu dữ liệu • Hàm (chia nhỏ chương trình lớn) • Cấu trúc dữ liệu cơ bản Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn CTDL khác Tư duy lập trình là tư duy của máy tính Cách máy tính thực hiện chương trình 22 Monday, September 9, 13 Lê Viết Mẫn - lvman@hce.edu.vn Cảm ơn sự chú ý Câu hỏi ? CTDL khác23 Monday, September 9, 13

Các file đính kèm theo tài liệu này:

  • pdf08_cac_cau_truc_du_lieu_khac_7768.pdf