bài viết giúp cho các bạn Trình bày được vai trò của việc xây dựng dữ liệu trong lập trình,Phân biệt và hiểu được kiểu dữ liệu căn bản và nâng cao trong các ngôn ngữ lập trình,Trình bày và áp dụng được STRUCT trong việc xây dựng dữ liệu mới Áp dụng được bài toán duyệt danh sách tìm phần tử đầu tiên trong việc tổ hợp dữ liệu từ các file khác nhau
www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Struct và Struct và Bài Toán Duyệt Danh Sách Bài Toán Duyệt Danh Sách Tìm Phần Tử Đầu Tiên Tìm Phần Tử Đầu Tiên 1 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Người học sẽ đạt được Trình bày được vai trò của việc xây dựng dữ liệu trong lập trình? Phân biệt và hiểu được kiểu dữ liệu căn bản và nâng cao trong các ngôn ngữ lập trình Trình bày và áp dụng được STRUCT trong việc xây dựng dữ liệu mới Áp dụng được bài toán duyệt danh sách tìm phần tử đầu tiên trong việc tổ hợp dữ liệu từ các file khác nhau 2 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Dữ liệu và thuật giải Chương trình = Thuật giải + Dữ liệu Hai bộ môn liên quan đến Lập trình: Kỹ thuật lập trình (Thuật giải) + Hệ thống thông tin (Dữ liệu) Vị trí “Quản lí dự án” khi đi phỏng vấn luôn bị xoáy xâu vào 2 chủ đề căn bản về lập trình: UML (Kỹ thuật thiết kế xây dựng các ĐỐI TƯỢNG + CHỨC NĂNG) CSDL (Kỹ thuật thiết kế xây dựng CSDL ) 3 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Bài toán xây dựng Dữ liệu Phải đảm bảo những yêu cầu sau: “Giống thật”: Mô tả chính xác đối tượng và các mối quan hệ ràng buộc của chúng “Hiệu quả”: Nhanh, an toàn, dễ dàng mở rộng, … “Giống thật”: Là một vấn đề nan giải Các HTTT, Ngôn ngữ lập trình đều hướng tới Assembly Ngôn ngữ C đơn giản C++ Java, C# : Càng ngày càng giúp LẬP TRÌNH VIÊN mô tả THẾ GIỚI THỰC dễ dàng hơn Các biến số Các file dữ liệu CSDL (kiểu bảng) XML: Đưa ràng buộc vào để mô tả THẾ GIỚI THỰC 4 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Kiểu dữ liệu căn bản Kiểu dữ liệu căn bản Kiểu dữ liệu căn bản: Là các kiểu dữ liệu: Đơn giản, phổ biến nhất Được cài sẵn Ví dụ: C có các kiểu cơ bản như: byte, int, char, float, double (Không có các kiểu: string, list, set, …) C#: Có thêm rất nhiều kiểu dữ liệu căn bản khác như: string, list, hash, … Câu hỏi: Thế giới thực phức tạp Các kiểu cơ bản không bao giờ đủ Làm thế nào đây ??? 5 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Kiểu dữ liệu nâng cao Kiểu dữ liệu nâng cao Kiểu dữ liệu nâng cao: Cho phép người dùng tự định nghĩa kiểu dữ liệu riêng cho mình Ngôn ngữ lập trình càng mạnh KHẢ NĂNG TỰ ĐỊNH NGHĨA kiểu dữ liệu mới càng dễ dàng !!! Ngôn ngữ C cung cấp 3 phương tiện căn bản nhất: Struct (Tìm hiểu bài giảng này) Mảng (Array) Bài giảng tuần 5 Con trỏ Bài giảng tuần 6 Ngôn ngữ C++, C#, Java lại cung cấp CLASS, KẾ THỪA, … mạnh mẽ hơn (Môn Lập trình hướng đối tượng) 6 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Khai báo kiểu dữ liệu mới trong C Dùng từ khóa typedef Cách dùng: typedef <Định nghĩa dữ liệu> Tên_dữ_liệu_mới; typedef int MATK, MAKH; typedef long SOTIEN; /* now declare some objects */ MATK maTK; SOTIEN s; MAKH maKH; www.hoasen.edu.vn 7 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Khái niệm về Struct (I) Khái niệm về Struct (I) Dữ liệu mô tả cùng một sự vật LUÔN ĐI VỚI NHAU Bởi vì chúng nói lên các thuộc tính khác nhau của sự vật Ví dụ: Tài khoản ngân hàng mã số tài khoản, số tiền tài khoản, mã số khách hàng, lãi suất LUÔN ĐI VỚI NHAU Sinh viên Tên, ngày sinh, giới tính, khóa học, ngành theo học LUÔN ĐI VỚI NHAU Những thuộc tính của một sự vật LUÔN ĐI VỚI NHAU GOM LẠI Kiểu dữ liệu mới = STRUCT biểu diễn sự vật đó !!! 8 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Định nghĩa Struct Định nghĩa Struct Trong ngôn ngữ C các thuộc tính sau mô tả cùng sự vật A: Kiểu_dữ liệu_1 Tên_thuộc_tính_1 … Kiểu_dữ_liệu_n Tên_thuộc_tính_n Gom chúng lại thành kiểu dữ liệu mới struct A: struct A { Kiểu_dữ liệu_1 Tên_thuộc_tính_1 … Kiểu_dữ liệu_n Tên_thuộc_tính_n } ; 9 www.hoasen.edu.vn Cùng Đại học Hoa Sen xây dựng tương lai Ví dụ về Struct Ví dụ về Struct Tọa độ phẳng có 2 thuộc tính int X, int Y struct Toado { int X; int Y; } Hoặc struct Toado { int X, Y; } 10 Tài khoản có 4 thuộc tính: masoTK, masoKH, sotienTK, laisuat struct Tai khoan { int masoTK; int masoKH; long sotienTK; float laisuat; } [...]... www.hoasen.edu.vn Lưu ý về Struct Struct biểu diễn sự vật Nhiều thuộc tính gộp thành Thuộc tính của Struct : Kiểu dữ liệu đã được định nghĩa trước (float, int, char, long, …) hoặc các kiểu dữ liệu mới định nghĩa thêm (Struct có thể nằm lồng trong Struct !!!) Muốn gọi thuộc tính của Struct chỉ cần dùng phép toán CHẤM (.) Dùng typedef để rút ngắn lại cách gọi struct cũng như các kiểu dữ liệu nâng cao... phần tử struct Tênstruct.Tênbiếnthànhphần Ví dụ: sinhvien.hoten sinhvien.diemtb Cùng Đại học Hoa Sen www.hoasen.edu.vnxây dựng tương lai 11 www.hoasen.edu.vn Sử dụng Struct với biến số struct Toado toado; toado.X= 5; toado.Y= 7; VD: tính khoảng cách giữa 2 điểm a, b float Dis( struct Toado a, struct Toado b) { return sqrt((a.X-b.X)*(a.Xb.X) + (a.Y-b.Y)*(a.Y-b.Y)); } VD: nhập dữ liệu vào thuộc... dựng tương lai 29 www.hoasen.edu.vn Kết luận Ngoài dữ liệu có sẵn tạo thêm kiểu dữ liệu mới C có 3 công cụ mạnh: Struct, Array, Con trỏ Struct là công cụ quan trọng nhất để biễu diễn các đối tượng bằng cách gộp các thuộc tính lại Struct lồng nhau là công cụ hữu hiệu mô tả thế giới dữ liệu Bài toán Duyệt danh sách không những áp dụng cho việc tính tổng, Max, đếm số phần tử mà còn ứng dụng... Duyet_Xuly() Don_dep() Kết thúc Chương_Trình Bắt đầu Chuan_bi da_tt= 0 Kết thúc Chuan_bi Bắt đầu Duyet_Xuly Duyệt phần tử x Nếu x thỏa mãn da_tt=1 PTDT =x Kết thúc Duyet_Xuly Bắt đầu Don_dep Kết thúc Don_dep Bắt đầu Chua_Duyet_Het Nếu da_tt=1 thì trả về 0 Kết thúc Chua_Duyet_Het Cùng Đại học Hoa Sen xây dựng tương lai 27 www.hoasen.edu.vn Dùng Struct trong bài B1,B2 typedef struct { int maKH, maTK;... tương lai 23 www.hoasen.edu.vn Những điểm khác biệt Học cách dùng struct để biểu diễn tài khoản và giao dịch Học cách vận dụng bài toán Duyệt danh sách vào bài toán Duyệt danh sách tìm phần tử đầu tiên Cùng Đại học Hoa Sen www.hoasen.edu.vnxây dựng tương lai 24 www.hoasen.edu.vn Duyệt danh sách tìm PT đầu tiên Đưa vào một biến mới: int da_tim_thay; da_tim_thay sẽ nhận giá trị 1 nếu chúng... không? Haỹ tính diện tích, chu vi tam giác, … Hãy xây dựng hình thoi, hình tròn, … TẤT CẢ THẾ GIỚI HÌNH HỌC LỚP 7-8-9 đều có thể mô phỏng được bằng STRUCT !!! Cùng Đại học Hoa Sen xây dựng tương lai 20 www.hoasen.edu.vn Bài toán tổ hợp dữ liệu - Bài toán: Ngân hàng ABC chứa danh sách các tài khoản trong file taikhoan.txt theo đúng mô tả của coursework!!! Cứ sau một thời gian, khắp nơi lại gửi... dữ liệu vào thuộc tính của taikhoan từ tập tin struct Taikhoan taikhoan; void Duyet() { fscanf(fin,”%d\t%d \t%l\t%f”, &taikhoan.maTK, &taikhoan.maKH, &tai.khoan.sotien, &tai.khoan.laisuat); } Cùng Đại học Hoa Sen xây dựng tương lai 12 www.hoasen.edu.vn Struct dùng với typedef Khai báo struct với typedef để có thể dùng như 1 kiểu dữ liệu mới typedef struct { int X,Y; } TOADO; TOADO a,b; a.X=5; a.Y=6;... typedef struct { int maGK, maTK, thanhcong, loaiGD ; long sotien; } GIAODICH; Cùng Đại học Hoa Sen xây dựng tương lai 28 www.hoasen.edu.vn Triển khai code C cho B1 Sinh viên hãy chú ý cách giảng viên viết code lên bảng hoặc bài giải mẫu trên elearning June 17, 2014 Cùng Đại học Hoa Sen www.hoasen.edu.vnxây dựng tương lai 29 www.hoasen.edu.vn Kết luận Ngoài dữ liệu có... xây dựng tương lai 16 www.hoasen.edu.vn Con trỏ struct Chúng ta có thể truy xuất struct bằng cách sử dụng con trỏ chỉ đến struct đó Truy xuất đến phần tử của con trỏ struct bằng toán tử –> Cùng Đại học Hoa Sen xây dựng tương lai 17 www.hoasen.edu.vn Con trỏ struct #include #include struct SINHVIEN { char Hoten[15], int Tuoi; }; void main() { SINHVIEN *sv = new SINHVIEN;... www.hoasen.edu.vn Bài toán B1 Input: giaodich.txt và taikhoan.txt Output: giaodichthanhcong.txt Minh định thuật giải • Duyệt Danh sách các giao dịch • Tại mỗi giao dịch ở bước xử lý • Duyệt Danh sách tìm phần tử đầu tiên của tài khoản có mã tài khoản trùng với giao dịch đang xét • Căn cứ vào tài khoản đó xác định giao dịch có thất bại hay không? • Viết giao dịch với trạng thái vào file giaodichthanhcong.txt . 17 Chúng ta có thể truy xuất struct bằng cách sử dụng con trỏ chỉ đến struct đó. Truy xuất đến phần tử của con trỏ struct bằng toán tử –> Con trỏ struct Con trỏ struct www.hoasen.edu.vn Cùng. dụng Struct với biến số Sử dụng Struct với biến số struct Toado toado; toado.X= 5; toado.Y= 7; VD: tính khoảng cách giữa 2 điểm a, b float Dis( struct Toado a, struct Toado b) { return sqrt((a.X-b.X)*(a.X- b.X). Đại học Hoa Sen xây dựng tương lai Lưu ý về Struct Lưu ý về Struct Struct biểu diễn sự vật Nhiều thuộc tính gộp thành Thuộc tính của Struct : Kiểu dữ liệu đã được định nghĩa trước