Lập trình hướng đối tượng - Mảng nhiều chiều

Tài liệu Lập trình hướng đối tượng - Mảng nhiều chiều: 1ðại học Mở TP.Hồ Chớ Minh Khoa Cụng Nghệ Thụng Tin KỸ THUẬT LẬP TRèNH MẢNG NHIỀU CHIỀU (Chương 1) ThS Vế NHẬT VINH 2ðại học Mở TP.Hồ Chớ Minh Khoa Cụng Nghệ Thụng Tin CHƯƠNG 1 TỔNG QUAN • Giới thiệu mụn học “Kỹ thuật lập trỡnh”, • Quy ủịnh của giảng viờn, • ðặt vấn ủề về giới hạn của mảng 1 chiều, • Giới thiệu mảng 2 chiều, • Khai bỏo mảng 2 chiều, • Truy xuất mảng 2 chiều, • Khỏi quỏt mảng nhiều chiều, • Hạn chế của mảng, • Túm tắt. 3ðại học Mở TP.Hồ Chớ Minh Khoa Cụng Nghệ Thụng Tin CHƯƠNG 1 GIỚI THIỆU MễN HỌC • Giảng viờn: ThS Vừ Nhật Vinh • Liờn hệ: phũng 202, số 97 Vừ Văn Tần Tel: 39301168 • Thời lượng: 35 tiết lý thuyết, 35 tiết thực hành • Kiểm tra: Giữa kỳ (30%) Cuối kỳ trờn mỏy (70%) • Tài liệu: Principles of Programming (Code Warrior – 1995) • Website: 4ðại học Mở TP.Hồ Chớ Minh Khoa Cụng Nghệ Thụng Tin CHƯƠNG 1 GIỚI THIỆU MễN HỌC (tt) • Mục ủớch mụn học: – Nõng cao cỏc kiến thức về lập trỡnh ủó học trong mụn Cơ sở lập trỡnh, – Làm que...

pdf73 trang | Chia sẻ: Khủng Long | Lượt xem: 1003 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Lập trình hướng đối tượng - Mảng nhiều chiều, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
1ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH MẢNG NHIỀU CHIỀU (Chương 1) ThS VÕ NHẬT VINH 2ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 TỔNG QUAN • Giới thiệu mơn học “Kỹ thuật lập trình”, • Quy định của giảng viên, • ðặt vấn đề về giới hạn của mảng 1 chiều, • Giới thiệu mảng 2 chiều, • Khai báo mảng 2 chiều, • Truy xuất mảng 2 chiều, • Khái quát mảng nhiều chiều, • Hạn chế của mảng, • Tĩm tắt. 3ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 GIỚI THIỆU MƠN HỌC • Giảng viên: ThS Võ Nhật Vinh • Liên hệ: phịng 202, số 97 Võ Văn Tần Tel: 39301168 • Thời lượng: 35 tiết lý thuyết, 35 tiết thực hành • Kiểm tra: Giữa kỳ (30%) Cuối kỳ trên máy (70%) • Tài liệu: Principles of Programming (Code Warrior – 1995) • Website: 4ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 GIỚI THIỆU MƠN HỌC (tt) • Mục đích mơn học: – Nâng cao các kiến thức về lập trình đã học trong mơn Cơ sở lập trình, – Làm quen với các thao tác can thiệp sâu hơn vào bộ nhớ máy tính khi lập trình, – Làm quen với lập trình hướng đối tượng, – Cĩ khả năng hiện thực việc lập trình trên Visual C++, – Vận dụng cấu trúc dữ liệu và kỹ thuật lập trình để giải quyết các bài tốn. 5ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 GIỚI THIỆU MƠN HỌC (tt) • Chương 1: Mảng nhiều chiều • Chương 2: Con trỏ • Chương 3: Chuỗi ký tự • Chương 4: Tập tin và luồng • Chương 5: ðệ quy • Chương 6: Lớp 6ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 QUY ðỊNH CỦA GIẢNG VIÊN 7ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 ðẶT VẤN ðỀ VỀ MẢNG • Xét vấn đề lưu trữ một dãy số: a0, a1, a2, , an • Mảng n+1 phần tử a[0], a[1], , a[n] sẽ làm việc đĩ, • Xét vấn đề lưu trữ một dãy số: b0, b1, b2, , bm • Mảng m+1 phần tử b[0], b[1],.., b[m] sẽ làm việc đĩ, Xét vấn đề lưu trữ kết quả: cij = ai x bj với 0 ≤ i ≤ n và 0 ≤ j ≤ m 8ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 ðẶT VẤN ðỀ VỀ MẢNG (tt) an x bmx bma2 x bma1 x bma0 x bmbm an x x a2 x a1 x a0 x an x b2x b2a2 x b2a1 x b2a0 x b2b2 an x b1x b1a2 x b1a1 x b1a0 x b1b1 an x b0x b0a2 x b0a1 x b0a0 x b0b0 ana2a1a0 9ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 GIỚI THIỆU MẢNG 2 CHIỀU • ðể lưu trữ dữ liệu theo 1 hàng dọc hoặc hàng ngang, ta dùng mảng (xem Cơ sở lập trình), • ðể lưu trữ kết quả được sắp xếp theo cả chiều ngang và chiều dọc, ta sẽ dùng mảng 2 chiều. Tĩm li: • Mảng là tập hợp các phần tử đặt liên tiếp nhau trong bộ nhớ, cĩ cùng tên và cùng kiểu dữ liệu. • Mảng 2 chiều là mảng chứa các giá trị bố trí theo hàng ngang và hàng dọc. 10 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 KHAI BÁO MẢNG 2 CHIỀU • Khai báo mảng cần 3 thơng tin: – Tên mảng, – Kiểu dữ liệu của mảng, – Kích thước của mảng: số phần tử trong mảng • Khai báo mảng 2 chiều cũng cần 3 thơng tin: – Tên mảng, – Kiểu dữ liệu của mảng, – Kích thước của mảng: kích thước dọc & kích thước ngang 11 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 KHAI BÁO MẢNG 2 CHIỀU (tt) • Cú pháp: kiểu_dữ_liệu Tên_mảng [kích_thước_1][kích_thước_2] • Ví dụ: int Mang_A [50] [70] • Lưu ý: trong ví dụ trên, chỉ số hàng dọc của mảng sẽ từ 0 đến 49 và hàng ngang sẽ từ 0 đến 69. 12 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 TRUY XUẤT MẢNG 2 CHIỀU • Khơng thể tác động lên tồn bộ mảng cùng 1 lúc, • Chỉ cĩ thể tác động lên duy nhất 1 phần tử của mảng tại 1 thời điểm, • Truy xuất 1 phần tử của mảng: – Tên của mảng, – Chỉ số của mảng: chỉ số hàng dọc, chỉ số hàng ngang, – Lưu ý kiểu dữ liệu của mảng khi truy xuất, • Ví dụ: xét mảng được khai báo int A[50][60] truy xuất phần tử hàng 39, cột 58: A[39][58] 13 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 TRUY XUẤT MẢNG 2 CHIỀU (tt) • Khởi tạo mảng: giống như việc khởi tạo giá trị cho biến sau khi được khai báo, • Cĩ thể gán từng giá trị cho từng phần tử của mảng, • Cĩ thể khởi tạo giá trị của mảng ngay từ lúc khai báo mảng bằng cách liệt kê các giá trị của các phần tử: int A[2][3] = {{1, 2, 3}, {2, 3, 4}} Nếu liệt kê khơng đầy đủ thì giá trị các phần tử cịn lại mặc định là 0. 14 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 KHÁI QUÁT MẢNG NHIỀU CHIỀU • ðể biểu diễn dãy các giá trị, ta dùng mảng 1 chiều, • ðể biểu diễn bảng các giá trị, ta dùng mảng 2 chiều, • ðể biểu diễn khối các giá trị, ta dùng mảng 3 chiều, • • Ta sẽ cĩ thể mảng nhiều chiều (2 chiều, 3 chiều) để biểu diễn các phần tử liên tiếp nhau trong bộ nhớ, cĩ cùng kiểu dữ liệu, cùng tên theo một cách sắp xếp khơng gian nào đĩ, • Cách khai báo, truy xuất mảng cũng giống như mảng 2 chiều. 15 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 HẠN CHẾ CỦA MẢNG • Phải xác định kích thước của mảng ngay từ lúc khai báo, Kích thước bộ nhớ dành cho mảng khơng thay đổi suốt chương trình, Kích thước của mảng khi khai báo phải lớn hơn bằng nhu cầu sử dụng trong chương trình, Cĩ thể khơng sử dụng hết vùng nhớ đã khai báo cho mảng, • Khi truyền mảng cho hàm, cần truyền cả nội dung của mảng và kích thước của mảng. 16 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin CHƯƠNG 1 TĨM TẮT • Mảng dùng để một loạt các phần tử liên tiếp, cùng kiểu dữ liệu và cùng tên, • Tùy theo cách sắp xếp khơng gian của các phần tử liên tiếp mà ta cĩ mảng 1 chiều, 2 chiều, 3 chiều, • Khi khai báo ta cần các thơng tin: kiểu dữ liệu, tên mảng và kích thước mảng (số lượng kích thước tùy theo số chiều của mảng), • Khi truy xuất, cần gọi đúng tên mảng, vị trí của phần tử và bảo đảm tương thích kiểu dữ liệu. 1ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH CON TRỎ (Chương 2) ThS VÕ NHẬT VINH 2ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TỔNG QUAN • Hạn chế của bộ nhớ tĩnh, • Giới thiệu con trỏ: – Khái quát về con trỏ, – Khai báo con trỏ, – Khởi tạo và hủy bỏ con trỏ, – Truy xuất vùng nhớ và giá trị lưu trong vùng nhớ, • Ứng dụng con trỏ cho mảng một chiều, • Tĩm tắt. 3ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH HẠN CHẾ CỦA BỘ NHỚ TĨNH • Dữ liệu phải lưu vào vùng nhớ đã được khai báo trước trong chương trình, • Chương trình khi nhận được sự khai báo sẽ dành hẳn 1 vùng nhớ tương ứng để chờ đợi dữ liệu, • Trong quá trình tính tốn, dữ liệu ít hơn dự kiến thì khơng thể yêu cầu chương trình cắt bớt vùng nhớ, • Nếu dữ liệu nhiều hơn dự kiến thì cũng khơng thể yêu cầu chương trình tăng thêm vùng nhớ, • Ví dụ: khai báo mảng 10 phần tử nhưng cĩ lúc chỉ cần dùng 7 phần tử hoặc cần dùng 15 phần tử? 4ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH KHÁI QUÁT VỀ CON TRỎ • ðể khắc phục hạn chế của bộ nhớ tĩnh: ta dùng bộ nhớ động, • Bộ nhớ động: cĩ thể yêu cầu máy tính cấp 1 vùng nhớ khi cần và yêu cầu nĩ xĩa đi khi khơng cần nữa, • Con trỏ (biến con trỏ): là một loại biến dùng để truy xuất bộ nhớ động. 5ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH KHAI BÁO CON TRỎ • Biến con trỏ cũng phải được khai báo trước khi sử dụng, • Biến con trỏ được đặt tên theo quy định giống các biến thơng thường, • Biến con trỏ cĩ giá trị là địa chỉ vùng nhớ mà nĩ trỏ vào, • Kiểu dữ liệu được khai báo là kiểu dữ liệu của giá trị mà vùng nhớ đĩ đang chứa. 6ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH KHAI BÁO CON TRỎ (tt) • Cú pháp: kiểu_dữ_liệu * tên_biến_con_trỏ • Ví dụ: int * Con_tro; – Nghĩa là: biến Con_tro sẽ chỉ đến 1 vùng nhớ mà vùng nhớ này sẽ chứa một giá trị số kiểu int – Giá trị của biến Con_tro là địa chỉ vùng nhớ đang được chỉ đến. 7ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH KHỞI TẠO VÀ HỦY BỎ CON TRỎ • Khác với các biến thơng thường, sau khi khai báo, biến con trỏ vẫn chưa sử dụng để truy xuất được mà phải khởi tạo, nghĩa là chỉ rõ vùng nhớ mà nĩ trỏ đến. Cĩ 2 cách: • Gán con trỏ tới vùng nhớ đã được cấp sẵn, Vd: int * con_tro; int i; //vùng nhớ của i đã được cấp con_tro = &i; // con_tro chỉ tới vùng nhớ đã cĩ • Yêu cầu xin cấp vùng nhớ mới cho con trỏ: Vd: int * con_tro; con_tro = new (int); 8ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH KHỞI TẠO VÀ HỦY BỎ CON TRỎ (tt) • ðể giải phĩng vùng nhớ sau khi sử dụng xong, ta cần yêu cầu xĩa đi vùng nhớ đĩ. Cĩ 2 cách: • Nếu con trỏ chỉ đến 1 ơ nhớ: delete con_tro; • Nếu con trỏ là mảng: delete [ ] con_tro; 9ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TRUY XUẤT VÙNG NHỚ VÀ GIÁ TRỊ • ðối với bộ nhớ tĩnh: – Khai báo: int i; – Truy xuất giá trị: i – Truy xuất địa chỉ: &i • ðối với bộ nhớ động: – Khai báo: int * con_tro; – Truy xuất giá trị: * con_tro – Truy xuất địa chỉ: con_tro 10 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TRUY XUẤT VÙNG NHỚ VÀ GIÁ TRỊ (tt) • Ví dụ: int i; int * con_tro; truy xuất giá trị // *con_tro = i; // giá trị của i truy xuất địa chỉ // con_tro = &i; // địa chỉ của i 11 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH ỨNG DỤNG CON TRỎ CHO MẢNG • Con trỏ được dùng để truy xuất mảng: – Khai báo mảng: int Mang[10]; – Khai báo con trỏ: int * con_tro; – Con trỏ chỉ đến mảng: con_tro = & Mang[0]; – Dùng con trỏ truy xuất mảng:Mang[0]  *con_tro Mang[1]  *(con_tro+1) Mang[n]  *(con_tro+n) 12 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH ỨNG DỤNG CON TRỎ CHO MẢNG (tt) • Con trỏ thay thế hồn tồn mảng: – Khai báo con trỏ: int * con_tro; – Mảng tạo bởi con trỏ: con_tro = new int[10]; – Truy xuất giá trị mảng: * (con_tro+0) hoặc con_tro[0] * (con_tro+1) hoặc con_tro[1] 13 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TĨM TẮT • Con trỏ là biến sử dụng bộ nhớ động, khắc phục hạn chế của bộ nhớ tĩnh về cấp phát bộ nhớ khi cần thiết/ khơng cần thiết, • Con trỏ lưu địa chỉ vùng nhớ tương ứng của nĩ, • Kiểu dữ liệu của con trỏ là kiểu dữ liệu của giá trị đang lưu trong vùng nhớ tương ứng của con trỏ, • Con trỏ cĩ thể chỉ đến vùng nhớ tĩnh đã được tạo ra trước đĩ hoặc tạo mới với new và xĩa bỏ với delete, • Con trỏ cĩ thể trỏ đến mảng hoặc thay thế cho mảng. 1ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH CHUỖI KÝ TỰ (Chương 3) ThS VÕ NHẬT VINH 2ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TỔNG QUAN • Nhắc lại về mảng và con trỏ, • Giới thiệu chuỗi ký tự: – Khái quát chuỗi ký tự, – Khai báo chuỗi ký tự, – Khởi tạo chuỗi ký tự, – Truy xuất chuỗi ký tự, • Một số hàm xử lý văn bản, • Mở rộng vấn đề, • Tĩm tắt. 3ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH NHẮC LẠI VỀ MẢNG VÀ CON TRỎ • Mảng: – Tập hợp các dữ liệu cùng kiểu, cùng tên và xếp liên tiếp nhau trong bộ nhớ, – Kiểu dữ liệu cĩ thể là ký tự, – Chỉ cĩ thể truy xuất được từng phần tử, • Con trỏ: – Là biến truy xuất bộ nhớ động, cĩ giá trị là địa chỉ vùng nhớ, – Nội dung của vùng nhớ cĩ thể là kiểu ký tự, – Cĩ thể dùng con trỏ thay thế hồn tồn cho mảng. 4ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU VỀ CHUỖI KÝ TỰ • Khaí quát chuỗi ký tự: – Tập hợp các ký tự được xếp liên tiếp nhau trong bộ nhớ và cĩ ký hiệu đặc biệt kết thúc ở cuối, – Cĩ thể sử dụng mảng, con trỏ để lưu trữ chuỗi ký tự, – Visual C++ cho phép cĩ một số tác động khác lên chuỗi so với mảng ký tự, • Khai báo chuỗi ký tự: – Chuỗi ký tự sử dụng mảng, – Chuỗi ký tự sử dụng con trỏ, 5ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU VỀ CHUỖI KÝ TỰ (2) • Khai báo chuỗi ký tự: Cần khai báo thư viện các hàm xử lý chuỗi và vùng nhớ để nạp chuỗi ký tự. #include using namespace std; – Chuỗi ký tự sử dụng mảng: • Khai báo tên, kích thước, kiểu dữ liệu ký tự, • Kích thước là độ dài tối đa của chuỗi và ký tự đặc biệt kết thúc chuỗi, • Trong Visual C++: char tên_mảng [kích_thước]; – Chuỗi ký tự sử dụng con trỏ: • Khai báo tên con trỏ, kiểu dữ liệu ký tự, • Trong Visual C++: char * tên_con_trỏ; 6ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU VỀ CHUỖI KÝ TỰ (3) • Khởi tạo chuỗi ký tự: – Ngay khi khai báo: • Cĩ thể gán trực tiếp chuỗi ký tự hoặc tập hợp các phần tử của chuỗi ký tự, • Trong Visual C++: char tên_mảng [kích_thước] = “chuỗi_ký_tự”; char tên_mảng[ ] = {‘kytu1’, ‘kytu2’,’kytu3’,’\0’}; char * tên_con_trỏ = “chuỗi_ký_tự”; • VC++ hỗ trợ cấp một vùng nhớ cho chuỗi ký tự hằng, – Sau khi khai báo: • Chuỗi dùng con trỏ: cĩ thể gán trực tiếp chuỗi hằng (sau khi khởi tạo bằng new), • Chuỗi dùng mảng: phải gán từng phần tử của mảng. 7ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU VỀ CHUỖI KÝ TỰ (4) • Truy xuất chuỗi ký tự: – Xuất chuỗi ký tự: • Xuất từng ký tự, • Xuất tồn bộ chuỗi cùng 1 lúc (điểm khác biệt với mảng kiểu dữ liệu khác). – Nhập chuỗi ký tự: • Dùng cin >>, • Dùng cin.getline(tên_chuỗi, kích thước), – Truy xuất từng phần tử của chuỗi: giống như truy xuất mảng và con trỏ thơng thường. 8ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH MỘT SỐ HÀM XỬ LÝ VĂN BẢN • Kích thước: size(), strlen() • Nối hai chuỗi: strcat(), strncat() • Thay đổi nội dung của chuỗi bằng chuỗi khác: strcpy(), strncpy() • ðịnh vị một ký tự trong chuỗi: strchr() • Lưu ý: – Gán trực tiếp một chuỗi hằng cho một chuỗi bằng con trỏ: con trỏ được liên hết với vùng nhớ đang chứa chuỗi hằng, – Nên sử dụng strcpy() thay phép gán. 9ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH MỞ RỘNG VẤN ðỀ • Chuỗi dữ liệu nhập dài và được sử dụng nhiều lần: nếu nhập từ bàn phím rất bất tiện, • Chuỗi dữ liệu xuất ra màn hình dài nên khĩ theo dõi và khơng lưu trữ để sử dụng lần sau được, • Việc nhập/ xuất dữ liệu thơng qua tập tin (file) sẽ giúp ta giải quyết vấn đề trên. 10 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TĨM TẮT • Chuỗi ký tự là tập hợp các ký tự được xếp liên tiếp nhau và cĩ ký tự đặc biệt kết thúc ở cuối, • Chuỗi ký tự cĩ thể được khai báo bằng cách dùng mảng và con trỏ, • Với sự hỗ trợ của Visual C++, chuỗi ký tự cĩ thể được xuất/ nhập tồn bộ các phần tử, • Một số hàm hỗ trợ xử lý văn bản, • Lưu ý việc gán giá trị chuỗi cho chuỗi ký tự, • Tập tin sẽ tạo thuận tiện cho việc nhập/ xuất. ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH CHƯƠNG 4 (Tập tin và luồng) ThS Võ Nhật Vinh 2ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TỔNG QUÁT • ðặt vấn đề, • Giới thiệu tập tin, • Giới thiệu lớp, đối tượng, • Truy xuất tập tin – Các lớp và đối tượng trong VC++, – Nhập dữ liệu từ tập tin, – Ghi dữ liệu vào tập tin, • Mở rộng vấn đề, • Tĩm tắt. 3ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH ðẶT VẤN ðỀ • Nhập dữ liệu từ bàn phím: khơng thể quay lui để sửa sai những dữ liệu vừa nhập trước đĩ, • Mỗi lần thực hiện chương trình, phải tiến hành nhập lại dữ liệu từ bàn phím trong khi dữ liệu cĩ thể khơng khác lần thực hiện trước, • Kết quả chương trình được hiển thị ra màn hình khơng thể lưu trữ lại được để kiểm tra hoặc sử dụng sau này, • Cần cĩ cơ chế nhập/ xuất dữ liệu khác: tập tin. 4ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU TẬP TIN • Tập tin dùng để lưu trữ dữ liệu trên ổ đĩa, cĩ thể được truy xuất nhiều lần và lâu dài, • Tập tin sắp xếp các dữ liệu theo tuần tự, muốn truy xuất 1 dữ liệu nào đĩ thì phải truy xuất lần lượt các dữ liệu được xếp trước đĩ, • Sau dữ liệu cuối cùng trong tập tin là ký hiệu kết thúc tập tin. 5ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU LỚP, ðỐI TƯỢNG • Lớp (class) giống như một kiểu dữ liệu do người lập trình định nghĩa và cĩ thể bao gồm nhiều kiểu dữ liệu và hàm khác, – VD: Lớp lớp_ðH_Mở • ðối tượng (object) là giá trị cĩ thể được tạo, lưu trữ và thao tác trong một ngơn ngữ lập trình, • Mọi đối tượng phải thuộc 1 lớp nào đĩ – VD: ðối tượng T7B2 thuộc lớp lớp_ðH_Mở. 6ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TRUY XUẤT TẬP TIN • Các lớp và đối tượng trong VC++: – Biểu diễn các luồng xuất nhập từ bàn phím và ra màn hình: • ðối tượng cin của iostream kết nối với bàn phím, • ðối tượng cout của iostream kết nối với màn hình, – Biểu diễn các luồng xuất nhập từ tập tin: • ðối tượng của ifstream kết nối dữ liệu đọc từ tập tin, • ðối tượng của ofstream kết nối dữ liệu ghi vào tập tin, • Các lớp này nằm trong thư viện fstream.h 7ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TRUY XUẤT TẬP TIN (2) • Nhập dữ liệu từ tập tin: – Khai báo thư viện, – Khai báo đối tượng của lớp ifstream, – Nhập dữ liệu: • Mở tập tin, • ðọc dữ liệu, • ðĩng tập tin, • VD trong VC++: # include ifstream đối_tượng_nhập; đối_tượng_nhập.open (“tên_tập_tin”); đối_tượng_nhập >> n; đối_tượng_nhập.close(); 8ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TRUY XUẤT TẬP TIN (3) • Ghi dữ liệu vào tập tin: – Khai báo thư viện, – Khai báo đối tượng của lớp ofstream, – Ghi dữ liệu: • Mở tập tin, • Ghi dữ liệu, • ðĩng tập tin, • VD trong VC++: # include ofstream đối_tượng_xuất; đối_tượng_xuất.open (“tên_tập_tin”); đối_tượng_xuất << n; đối_tượng_xuất.close(); 9ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TRUY XUẤT TẬP TIN (4) • So sánh việc xuất nhập từ bàn phím/ màn hình với xuất nhập bằng tập tin: – Thay vì sử dụng đối tượng cin, ta sẽ dùng 1 đối tượng nhập của ifstream, – Thay vì sử dụng đối tượng xuất cout, ta sẽ dùng 1 đối tượng xuất của ofstream, – Các thao tác cho cin và cout cĩ thể được sử dụng cho các đối tượng xuất nhập bằng tập tin, – Vd: các tốn tử và hàm >, getline() ... vẫn được sử dụng. 10 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH MỞ RỘNG VẤN ðỀ • Sinh viên đã được học cách xây dựng chương trình dựa trên cách tổ chức, các kiểu dữ liệu cơ bản, các cấu trúc điều khiển, • Cấu trúc tuần tự, cấu trúc điều kiện và cấu trúc lặp là 3 cấu trúc điều khiển để xây dựng chương trình, • Cĩ những bài tốn, cách suy nghĩ thuần túy dựa trên 3 cấu trúc điều khiển này khơng thể giải quyết được, • ðệ quy là một hướng giải mới sẽ được xem xét. 11 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TĨM TẮT • Nhập/ghi dữ liệu qua tập tin tiện lợi hơn, tập tin lưu dữ liệu theo kiểu tuần tự, • Lớp giống như một kiểu dữ liệu được tạo ra và đối tượng là một giá trị được tạo ra – lưu trữ - thao tác. ðối tượng phải thuộc 1 lớp nào đĩ, • Việc nhập/ghi dữ liệu qua tập tin theo các bước: mở tập tin, nhập/ghi dữ liệu, đĩng tập tin, • Sử dụng đối tượng nhập thuộc ifstream, đối tượng xuất thuộc ofstream để đọc/ghi tập tin, • Cĩ nhiều bài tốn mà các thuật tốn hiện nay chưa xử lý tốt bằng cấu trúc vịng lặp. ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH CHƯƠNG 5 (ðệ quy) ThS Võ Nhật Vinh 2ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TỔNG QUÁT • ðặt vấn đề, • Giới thiệu đệ quy: – Nhận diện bài tốn đệ quy, – Phần chính của đệ quy, – ðiều kiện dừng của đệ quy, • Ví dụ về đệ quy, • Mở rộng vấn đề, • Tĩm tắt. 3ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH ðẶT VẤN ðỀ • Bài tốn: hàm luy_thua(n) trả giá trị 2n, • Cách suy nghĩ 1: 2n = 2 x 2 x 2 x x 2 (n lần), – Sử dụng vịng lặp để tính sự tích lũy, • Cách suy nghĩ 2: 2n = 2 x 2n-1, 2n-1 = 2 x 2n-2 – Gọi hàm luy_thua(n) sẽ cho giá trị 2n, – Gọi hàm luy_thua(n-1) sẽ cho giá trị 2n-1, – Cĩ thể viết lại: luy_thua(n) = 2 x luy_thua(n-1), • Cĩ thể giải một số bài tốn bằng phương pháp “gọi lại chính nĩ”. 4ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU ðỆ QUY • Nhận diện bài tốn đệ quy: – Cấu trúc lặp được sử dụng, – Mỗi bước lặp lại được thực hiện với tham số thay đổi, – Kết quả lần tính sau được tính dựa trên lần tính trước, – Bài tốn đệ quy sẽ gồm 2 phần: phần chính và phần điều kiện dừng. 5ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU ðỆ QUY • Phần chính của đệ quy: – Tính tốn kết quả cần trả ra dựa trên kết quả của lần tính tốn trước (xem như đã biết), – Lưu ý sự thay đổi của tham số, – Vd: với luy_thua(n) ta sẽ return 2 * luy_thua (n-1). 6ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH GIỚI THIỆU ðỆ QUY • ðiều kiện dừng của đệ quy: – Tham số của lời gọi đệ quy sẽ thay đổi, – Tham số phải thay đổi và phải hội tụ về 1 giá trị được xác định trước, – Khi tham số đạt được giá trị hội tụ đĩ, một kết quả xác định trước phải được trả ra và khơng thực hiện lời gọi đệ quy nữa, – Vd: • luy_thua(n) sẽ cho return 2*luy_thua(n-1), • Với n = 0, luy_thua(0) sẽ cho return 1. 7ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH VÍ DỤ VỀ ðỆ QUY • Bài tốn tính 2n: int luy_thua(int n) { if (n==0) return 1; else return 2*luy_thua(n-1); } • Bài tốn tính n!: int giai_thua(int n) { if (n==0)||(n==1) return 1; else return n*giai_thua(n-1); } 8ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH MỞ RỘNG VẤN ðỀ • Các kiểu dữ liệu cơ bản được cung cấp sẵn khơng đủ để biểu diễn các dữ liệu trong thực tế, • Ta cĩ thể tạo “kiểu dữ liệu” mới gọi là “lớp” với các giá trị cụ thể “đối tượng” để quản lý chương trình dễ hơn, • Lập trình hướng đối tượng (OOP) sẽ sử dụng đối tượng và lớp, • Chương 6 sẽ đề cập đến vấn đề này. 9ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TĨM TẮT • ðệ quy là lời giải tự nhiên cho những bài tốn lặp mà kết quả sau phụ thuộc trực tiếp kết quả trước, • ðệ quy gồm 2 phần: phần chính biểu diễn quan hệ của các lần thực hiện và phần điều kiện dừng của đệ quy, • Lập trình hướng đối tượng giúp ta quản lý chương trình hiệu quả hơn với kiểu dữ liệu phù hợp với dữ liệu tự nhiên. ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH CHƯƠNG 6 (Lớp) ThS Võ Nhật Vinh 2ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TỔNG QUÁT • ðặt vấn đề, • Xây dựng kiểu dữ liệu với struct: – ðịnh nghĩa một kiểu dữ liệu mới, – Truy xuất thuộc tính, • Xây dựng lớp (class): – ðịnh nghĩa một lớp, – Xây dựng các phương thức, – Truy xuất thuộc tính, phương thức, – Xây dựng tốn tử nạp chồng, • Mở rộng vấn đề, • Tĩm tắt. 3ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH ðẶT VẤN ðỀ • Cĩ những đối tượng trong cuộc sống mà ta cần miêu tả chúng, • Một đối tượng cĩ nhiều khía cạnh cần được miêu tả, mỗi khía cạnh là một dữ liệu, • Vì vậy, để miêu tả được một đối tượng dưới dạng dữ liệu, ta cần nhiều phải sử dụng nhiều biến dữ liệu, • Cần phải tạo liên kết cho các dữ liệu với nhau để biết rằng chúng cùng để miêu tả 1 đối tượng,  Xây dựng kiểu dữ liệu mới bao gồm nhiều dữ liệu con. 4ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG KIỂU DỮ LIỆU STRUCT • ðịnh nghĩa kiểu dữ liệu mới trong Visual C++: struct ten_kieu { kiểu_dữ_liệu_1 biến_1; kiểu_dữ_liệu_2 biến_2; kiểu_dữ_liệu_3 biến_3; } 5ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG KIỂU DỮ LIỆU STRUCT (2) • Khai báo một “biến” thuộc kiểu dữ liệu vừa tạo ra: ten_kieu tên_biến; • Truy xuất thuộc tính: – Các biến dữ liệu bên trong kiểu dữ liệu mới được gọi là các “thuộc tính”, – Sử dụng tốn tử dấu chấm (biến thơng thường) và tốn tử mũi tên (biến con trỏ) để truy xuất các “thuộc tính”. 6ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG KIỂU DỮ LIỆU STRUCT (3) • Ví dụ: – Kiểu dữ liệu Books: struct Books { int nam_xuat_ban; int gia_tien; }; – Khai báo “biến” MyBook kiểu Books: Books MyBook; – Truy xuất các thuộc tính của MyBook: MyBook.nam_xuat_ban MyBook.gia_tien 7ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG LỚP • Lớp (Class) cũng cĩ thể được xem là kiểu dữ liệu được người dùng định nghĩa giống như struct nhưng ngồi các thuộc tính, nĩ cịn chứa những cách thức tác động lên dữ liệu của nĩ (hàm), • Lớp cĩ thể hiểu là tập hợp những đối tượng giống nhau mà ta cần miêu tả, • Lớp cho phép che các dữ liệu của nĩ khi nhìn từ bên ngồi. 8ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG LỚP (2) • ðịnh nghĩa một lớp mới trong VC++ như sau: class tên_lớp { public: // khai báo các biến // khai báo các phương thức (hàm) private: // khai báo các biến // khai báo các phương thức (hàm) } 9ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG LỚP (3) • Xây dựng các phương thức của lớp: – Phương thức đặc biệt khởi tạo dùng để khởi tạo các giá trị ban đầu cho dữ liệu của đối tượng. Phương thức khởi tạo cùng tên với tên lớp và khơng trả trị. Các giá trị của dữ liệu KHƠNG thể được khởi tạo lúc khai báo, – Phần định nghĩa của các phương thức (hàm thành viên) cĩ thể được đặt trong hoặc ngồi phần định nghĩa lớp. Nếu đặt ngồi, trước tên hàm phải cĩ tên của lớp và tốn tử ::. 10 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG LỚP (4) • VD xây dựng phương thức của lớp trong VC++: class Car { public: Car(); int Seats; private: int Model_Year; }; Car::Car() { Seats = 4; Model_Year = 2008; } 11 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG LỚP (5) • Truy xuất thuộc tính, phương thức: – Truy xuất giống như trong trường hợp struct, – ðối với các thuộc tính và phương thức ở chế độ private, chúng chỉ được truy xuất trong các phương thức của chính đối tượng đĩ, • Ví dụ: Car Vios; Vios.Seats = 4; // hợp lệ Vios.Model_Year = 2002 // khơng hợp lệ 12 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH XÂY DỰNG LỚP (6) • Xây dựng tốn tử nạp chồng: – Tốn tử nạp chồng là những tốn tử đã được định nghĩa sẵn nhưng khơng thể áp dụng cho các đối tượng này mà cần được định nghĩa lại, – VC++ cho phép ta định nghĩa lại các tốn tử đã cĩ mà hình thức bên ngồi vẫn như vậy, – VD: • VC++ hỗ trợ phép tốn + giữa 2 số kiểu int, • Lớp phan_so được định nghĩa để thể hiện một phân số, • Làm sao để thực hiện phép tốn + giữa 2 đối tượng phan_so? 13 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH MỞ RỘNG VẤN ðỀ • Các tốn tử nạp chồng rất cần thiết cho việc thao tác trên các đối tượng của lớp, • Các tốn tử nạp chồng cơ bản bao gồm: nhập, xuất, tốn tử 1 ngơi, tốn tử 2 ngơi, • Phần sau của chương này sẽ trình bày thêm về cách thức xây dựng các tốn tử nạp chồng nĩi trên. 14 ðại học Mở TP.Hồ Chí Minh Khoa Cơng Nghệ Thơng Tin KỸ THUẬT LẬP TRÌNH TĨM TẮT • Cần cĩ các kiểu dữ liệu để miêu tả các đối tượng trong tự nhiên, • Cĩ thể dùng struct để định nghĩa kiểu dữ liệu mới hoặc lớp (class) để định nghĩa kiểu dữ liệu mới và các hành vi tương tác lên các dữ liệu bên trong (phương thức – hàm thành viên), • Các tốn tử nạp chồng cho phép định nghĩa lại những tốn tử đã được định nghĩa sẵn trước đĩ và phù hợp với các đối tượng của chúng ta.

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

  • pdftailieu.pdf
Tài liệu liên quan