Bài giảng Lập trình cơ bản - Chương 7: Kiểu dữ liệu có cấu trúc - Lê Đức Long

pdf 16 trang huongle 6940
Bạn đang xem tài liệu "Bài giảng Lập trình cơ bản - Chương 7: Kiểu dữ liệu có cấu trúc - Lê Đức Long", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_co_ban_chuong_7_kieu_du_lieu_co_cau_truc.pdf

Nội dung text: Bài giảng Lập trình cơ bản - Chương 7: Kiểu dữ liệu có cấu trúc - Lê Đức Long

  1. KIỂU DỮ LIỆU CÓ CẤU TRÚC LÊ ĐỨC LONG-NGÔ QUỐC VIỆT 2011
  2. Đặt vấn đề SỐ DANH BỘ char SDB[10]; HỌ VÀ TÊN char Hoten[100]; THÔNG TIN CỦA 1 HỌC SINH: ĐIỂM VĂN int Van, Toan; ĐIỂM TOÁN float TB; TRUNG BÌNH Nhận xét cách khai báo trên:  Thểhi ện 1 cách độc lập, không liên quan – trong khi thực tế các thuộc tính có sự liên hệ với nhau (thuộc tính thông tin vềm ột học sinh)  Thông tin của nhiều học sinh – ví dụ trong một lớp ???  Mở rộng các đối tƣợng trong thếgi ới thực – thông tin về1 đối tƣợng thực tế thƣờng phức tạp và có nhiều thuộc tính có ý nghĩa vàki ểu dữ liệu khác nhau. PHÁT SINH MỘT KIỂU DỮ LIỆU MỚI: CẤU TRÚC (BẢN GHI/MẪU TIN) Ngô Quốc Việt-Lập trình cơ bản 2
  3. Khai báo cấu trúc Đặt sau từ khoá #include . Và #define CÁCH 1: struct Kiểu_cấu_trúc { //Khai báo các thành phần của cấu trúc }; Ví dụ: struct Hocsinh { char SDB[10]; char Hoten[100]; int Van,Toan; float TB; }; Ngô Quốc Việt-Lập trình cơ bản 3
  4. Khai báo cấu trúc CÁCH 2: typedef struct { //Khai báo các thành phần của cấu trúc } Kiểu_cấu_trúc; Ví dụ: typedef struct { char SDB[10]; char Hoten[100]; int Van,Toan; float TB; }Hocsinh; Ngô Quốc Việt-Lập trình cơ bản 4
  5. Khai báo cấu trúc CÁCH 3: struct Kiểu_cấu_trúc { //Khai báo các thành phần của cấu trúc }; typedef struct Tên_kiểu Kiểu_cấu_trúc; Ví dụ: struct Hocsinh { char SDB[10]; char Hoten[100]; int Van,Toan; float TB; }; typedef struct HS Hocsinh; Ngô Quốc Việt-Lập trình cơ bản 5
  6. Khai báo biến cấu trúc TƢƠNG TỰ NHƢ KHAI BÁO BIẾN BÌNH THƢỜNG Kiểu_cấu_trúc Tên_biến; Ví dụ: Hocsinh HS1, HS2; Hocsinh stu; Cần lƣu ýthêm: 10 Byte 100 Byte 2 Byte 2 Byte 4 Byte SDB Hoten Van Toan TB Số lƣợng byte chiếm trong bộnh ớ(sizeof (Hocsinh)) Ngô Quốc Việt-Lập trình cơ bản 6
  7. Truy xuất các thành phần cấu trúc Tên_biến . Tên_thành_phần; Ví dụ: HS1.Hoten truy xuất đến thành phần Họ Tên của biến HS1 HS1.TB truy xuất đến thành phần điểm TB của biến HS1 HS2.Van truy xuất đến thành phần điểm Văn của biến HS2 Với 1 học sinh có các thuộc tính nhƣ trên Lớp học có n học sinh sẽntn ???  Khai báo biến mảng: Hocsinh HS[50]; // biểu diễn cho 1 mảng tối đa 50 phần tử có kiểu dữ liệu Hocsinh  Thông tin của học sinh thứi: HS[i].SDB; HS[i].Hoten; HS[i].Van; HS[i].Toan; HS[i].TB; HS 50 phần tử – mỗi phần tử làm ột cấu trúc Ngô Quốc Việt-Lập trình cơ bản 7
  8. Ví dụ minh hoạ Bài toán: Nhập vào thông tin học sinh của một lớp (tối đa 50 hs), tính điểm trung bình của mỗi hs, trung bình lớp, và xuất ra danh sách gồm thông tin kết quả của từng học sinh main SƠ ĐỒ THỦ CTỤ /HÀM Nhap_lop Tinh_TB_lop Xuat_DS Nhap_HS Tinh_TB_HS Xuat_TT_HS PROTOTYPE void Nhap_HS(Hocsinh &h); void Nhap_lop(Hocsinh h[ ], int &n); void Tinh_TB_HS(Hocsinh &h); void Tinh_TB_lop(Hocsinh h[ ], int n); void Xuat_TT_HS(Hocsinh h); void Xuat_DS(Hocsinh h[ ], int n); Ngô Quốc Việt-Lập trình cơ bản 8
  9. Ví dụ minh hoạ Bài toán 1: Viết chƣơng trình nhập toạ độ tâm, và bán kính của 1 đƣờng tròn trong mặt phẳng Oxy. Tính diện tích và chu vi của nó rồi xuất kết quả. Phân tích: Thiết kế:  Thành phần dƣ̃ liệu:  Input: toạ độ tâm (x,y) và bán kính R struct DIEM struct DUONGTRON  Output: diện tích S, và chu vi P { {  Thành phần xƣ̉ lý: float x; DIEM I;  Nhập toạ độ (x,y) và bán kính R float y; float R;  Tính diện tích: S = Pi * R * R }; };  Tính chu vi: P = 2 * Pi * R  Xuất S, P. main PROTOTYPE void Nhap_Diem(DIEM &p);  void Nhap(DUONGTRON &c); Nhap Xuat  float Tinh_S(DUONGTRON c);  float Tinh_P(DUONGTRON c);  void Xuat(DUONGTRON c); Nhap_Diem Tinh_S Tinh_P Ngô Quốc Việt-Lập trình cơ bản 9
  10. Ví dụ minh hoạ BÀI TOÁN 2: VIẾT CHƢƠNG TRÌNH NHẬP VÀO TỌA ĐỘ BA ĐỈNH CỦA MỘT TAM GIÁC, XUẤT RA CHU VI, DIỆN TÍCH, VÀ TÍNH CHẤT CỦA TAM GIÁC (ĐỀU, CÂN, VUÔNG) MỘT SỐ NỘI DUNG CHUẨN BỊ: -Đọc sách giáo khoa MÔN TIN HỌC LỚP 11, Bài tập và thực hành 7, trang 105 – 108 -Xác định bài toán, tìm hiểu cách xử lý bài toán bằng toán học -Hiểu tại sao cần phải định nghĩa kiểu dữ liệu có cấu trúc (DIEM, TAMGIAC) -Hiểu tại sao cần phải sử dụng các thủ tục, hàm như trong bài mẫu của SGK YÊU CẦU: chương trình được xây dựng dưới dạng các chương trình con (thủ tục và hàm), tận dụng việc khai kiểu dữ liệu có cấu trúc (record cho điểm vàtam giác) 1. XÁC ĐỊNH BÀI TOÁN Input: Tọa độ 3 đỉnh tam giác ABC,với A(xA, yA), B(xB, yB), C(xC, yC) Output: chu vi, diện tích, tính chất: đều, cân, vuông Ngô Quốc Việt-Lập trình cơ bản 10
  11. 2. PHÂN TÍCH VÀ THIẾT KẾ 2.1. Phân tích: -Thành phần dƣ̃ liệu: Input: số thực xA, yA, xB, yB, xC, yC Output: số thực chuvi, dientich chuỗi thông báo “tam giac can”, “tam giac deu”, “tam giac vuong” -Thành phần xƣ̉ lý: Nhập tọa độ đỉnh •Tính đô ̣ dài cạnh a, b, c •Tính chu vi = a + b + c •Tính diện tích = sqrt(p(p-a)*(p-b)*(p-c)) với p = (a+b+c)/2 •Kiểm tra tính chất Nếu a = b = c thì là “deu” Nếu a = b hoặc b = c hoặc c = a thì là “can” Nếu a2+b2=c2 hay a2+c2=b2 hay b2+c2=a2 thì là “vuong” •Xuất chu vi, diện tích, tính chất: đều, cân, vuông tƣơng ứng 2.2. Thiết kế -Đơn vịd ƣ̃ liệu: Input: xA, yA, xB, yB, xC, yC = real; Output: chuvi, dientich: real; deu, can, vuong: boolean; Cải tiến: sƣ̉ dụng cách định nghĩa kiểu dƣ̃ liệu có cấu trúc (RECORD) (*MO TA DIEM CUA TAM GIAC *) Diem = record x, y: real; End; (* MO TA TAM GIAC VOI BA DINH A,B,C *) Tamgiac = record A,B,C: Diem; End; Ngô Quốc Việt-Lập trình cơ bản 11
  12. -Đơn vị xử lý: sƣ̉dụng các chƣơng trình con nhƣ sau Lƣu ý: tìm hiểu sƣ̣khác biệt khi sƣ̉dụng hàm vàthủtục, cách truyền tham biến vàtruyền tham trị trong các hàm vàthủtục của chƣơng trình này. (*HAM TINH KHOANG CACH GIUA 2 DIEM P, Q *) Function Kh_cach (P,Q: Diem):real; (*THU TUC NHAN DAU VAO LA BIEN MO TA TAM GIAC R VA DAU RA LA DO DAI CUA 3 CANH a,b,c*) Procedure Daicanh(var R: Tamgiac;var a,b,c: real); (* HAM TINH CHU VI TAM GIAC R *) Function Chuvi(var R: Tamgiac): real; (* HAM TINH DIEN TICH CUA TAM GIAC R *) Function Dientich(var R: Tamgiac): real; (* THU TUC HIEN THI TOA DO 3 DINH TAM GIA LEN MAN HINH *) Procedure Hienthi(var R: Tamgiac); (* THU TUC NHAN DAU VAO LA BIEN MO TA TAM GIAC R VA DAU RA LA TINH CHAT TAM GIAC *) Procedure Tinhchat(var R:Tamgiac;var Deu,Can,Vuong:boolean); •Sơ đồthủtục/hàm: Tinh_chat_tam_giac Hienthi Chuvi Dientich Tinhchat •BỘ DỮ LIỆU KIỂM TRA (EPS=1.0E-3) A B C Chu vi Diện tích Tính chất 1 1 12 12 -9 -9 59.397 0.000 SAI Daicanh 7 9 13 6 0 12.5 29.069 0.000 SAI 2 -3 3 -2 1 -1 5.886 1.500 TGIAC CAN -1 2 3 4 3 2 10.472 4.000 TGIAC VUONG 2 30 15 20 15 40 52.802 130.000 TGIAC CAN 0 0 3 4 4 3 11.414 3.500 TGIAC CAN Kh_cach Ngô Quốc0 Việt -Lập0 trình3 cơ0 bản 1.5 2.599 9.002 3.899 TGIAC DEU 12
  13. We have already seen that a string can be represented as a one-dimensional character- type array. Each character within the string will be stored within one element of the array. Some problems require that the characters within a string be processed individually. However, there are many other problems which require that strings be processed as complete entities. Such problems can be simplified considerably through the use special string-oriented library functions. (Xem trong ví dụ 9.14. trang 254 – 259, tài liệu Programming with C, Gottfried (1996) – đã upload) Most C compilers include library functions that allow strings to be compared, copied or concatenated (i.e., combined, one behind another). Ngô Quốc Việt-Lập trình cơ bản 13
  14. Nhắc lại Strings (i.e., character arrays) are handled SAI somewhat differently.The proper array size will be assigned automatically. This will include a provision for the null character \0, which is automatically added at the end of every string. ĐÚNG ĐÚNG Ngô Quốc Việt-Lập trình cơ bản 14
  15. Hướng dẫn ôn tập  Vấn đề nộp đồ án – điểm thành phần  Vấn đề thi thực hành:  Thời gian, địa điểm: t.Khánh (quyết định)  Vấn đề miễn thi, cấm thi  Vấn đề thi lý thuyết:  Thời gian: 90phút – không sử dụng tài liệu  Nội dung: toàn bộ chương trình  Hình thức: trắc nghiệm – tự luận (3-5 bài tập lập trình)  Đề thi chung 2 lớp năm 1: SP tin, CNTT Ngô Quốc Việt-Lập trình cơ bản 15
  16. CÁM ƠN ĐÃ THEO DÕI TP.HCM - 2011