Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 49 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Tiêu đề
Kỹ Thuật Lập Trình
Thể loại
Sách
Định dạng
Số trang
49
Dung lượng
2,12 MB
Nội dung
Mục lục LỜ I NÓ I ĐÀU ChưoTig Máy tính - Phưong pháp luận lập trình Giới thiệu 10 1.1 Máy tính 1.2 Phần cứng phần mềm máy tính 1.3 Hệ thống sổ 1.4 Ngơn ngừ lập trình 1.5 Giải thuật 1.6 Phương pháp luận lập trình Tóm tắt Bài tập 10 10 24 31 34 38 53 59 Chương Các thành phần củachưong trình Giới thiệu 2.1 Cấu trúc chương trình 2.3 Kiểu liệu 2.4 Biến hàng 2.5 Biểu thức 2.6 Phát biểu 2.7 Toán tử 2.8 Nhập / Xuất Tóm tắt Bài tập Chương Cấu trúc điều khiển Giới thiệu 3.1 Cấu trúc 3.2 Phát biểu g o to 3.3 Cấu trúc điều kiện 3.4 Cấu trúc lặp 3.5 Khối phát biểu tầm vực biến 3.6 Lập trình g o to lập trình có cấu trúc 63 64 64 74 94 104 106 110 121 147 151 153 154 154 156 158 171 203 206 3.7 Độ phức tạp giải thuật Tóm tắt Bài tập Chương Chuỗi ký tự - Mảng - Bản ghi Giới thiệu 4.1 Chuồi ký tự 4.2 Mảng 4.3 Bản ghi 4.4 Giải vấn đề dùng lập trình có cấu trúc Tóm tắt Bài tập Chương Hàm - Đệ quy Giới thiệu 5.1 Chương trình 5.2 Định nghĩa hàm 5.3 Mầu hàm 5.4 Tầm vực cùa danh hiệu 5.5 Gọi hàm truyền tham số 5.6 Tính kết nối tính kết dính 5.7 Đệ quy Tóm tắt Bài tập Chương Con trỏ Giới thiệu 6.1 Khai báo khỏi tạo biến trỏ 6.2 Biến tham khảo biến trỏ 6.3 Các toán tử trỏ 6.4 Truyền trỏ 6.5 Trà địa 6.6 Sử dụng const với trò 6.7 Biểu thức trỏ số học trỏ 6.8 Sự liên hệ trỏ mảng 225 232 237 243 244 244 251 297 304 312 313 326 327 327 328 334 339 357 405 409 430 440 445 447 447 450 453 460 468 472 476 477 6.9 Xử lý chuỗi-dựa-vào-con-trỏ 6.10 Mảng trỏ 6.11 Con trỏ hàm 6.12 Cấp phát giải phóng vùng nhớ 6.13 Con trỏ c# 6.14 Danh sách liên kết 6.15 Chồng 6.16 Hàng đợi 6.17 Cây Tóm tắt Bài tập 491 494 496 499 504 510 530 537 541 550 553 Chưong Cấu trúc - Lóp - Tính đóng gói 558 Giới thiệu 7.1 Cấu trúc 7.2 Lớp đối tượng 7.3 Tính đóng gói che giấu liệu 7.4 Mối liên kết has-a 7.5 Hoạt tải toán tử 7.6 Đối tượng phương thức hàng 7.7 Biến lớp 7.8 Con trỏ tham khảo đối tượng 7.9 Danh sách liên kết 7.10 Chồng 7.11 Hàng đợi 7.12 Cây Tóm tắt Bài tập Chương Tính thừa kế - Tính đa hình Giới thiệu 8.1 Lớp sở lớp dẫn xuất 8.2 Tính thừa kế 8.3 Lớp bạn 8.4 Phương thức tạo 560 560 578 617 629 647 671 675 681 684 704 714 718 727 734 745 746 746 753 780 784 790 852 860 8.5 Tính đa hình Tóm tắt Bài tập Phu• luc • A Các hàm xử lý chuỗi ký tự C++ Phu• luc • B Các thuộc tính phương thức lý chuỗi kýtự c# 872 c Các hàm tốn học C++ 891 xử Phu• luc • 861 Phu• luc • D Các phương thức tốn học c# 909 Từ viết tắt 926 Thuật Itgĩi ‘A n h - Việt 927 Tài liệu tham khảo 945 LỜI NĨI ĐẰU Quyển sách Kỹ thuật lập trình trình bày kiểu lập trình: lập trình goto (goto programming), lập trình có cấu trúc (structuredprogramming) lập trình hướng đối tượng (object-orientedprogramming) Các kiểu lập trình chương trinh máy tính sách minh họa bàng ngơn ngữ lập trình C++ c# Quyển sách bao gồm chương phụ lục Chương Mảy tính - Phương pháp luận lập trình Giới thiệu phần cứng phần mềm máy tính, hệ thống số, ngơn ngữ lập trình, giải thuật phương pháp luận lập trình, bao gồm bước công việc bước để xây dựng phần mềm Chương Các thành phần chương trình Trình bày cấu trúc chương trình, thành phần sử dụng chương trình: kiểu liệu chuyển đổi kiểu, hằng, biển, toán tử, biểu thức, phát biểu Chương cẩu trúc điều khiển Trình bày cấu trúc điều khiển chương trình bao gồm cẩu trúc tuần tự, cấu trúc điều kiện cấu trúc lặp, tầm vực biến, độ phức tạp giải thuật Phần cuối chương giới thiệu kiểu lập trình goto, trình bày ngun tắc kiểu lập trình có cấu trúc Chương Chuỗi kỷ tự - Mảng - Bản ghi Trình bày cấu trúc liệu thường dùng bao gồm chuỗi ký tự, mảng, ghi tác vụ cấu trúc này, giải thuật thứ tự tìm kiếm Phần cuối chương trình bày vấn đề tương đối phức tạp giải cách sử dụng lập trình có cấu trúc cấu trúc liệu Chương Hàm - Đệ quy Trình bày định nghĩa chương trình con, tầm vực danh hiệu, gọi chương trình con, cách truyền tham số trả kết quả, tính kết nối tính kết dính chương trình con, loại đệ quy Chương Con trỏ Trình bày trỏ tham khảo (tham chiếu), truyền trả trỏ, biểu thức số học trỏ, trỏ hàm, cấp phát giải phóng vùng nhớ Phần cuối chương giới thiệu cấu trúc liệu động sử dụng trỏ gồm có danh sách liên kết, chồng, hàng đợi theo kiểu lập trình có cẩu trúc Chương cấu trúc - Lớp - Tính đóng gói Trình bày cấu trúc, lớp đối tượng, tính đóng gói che giấu liệu, mối liên kết has-a, hoạt tải (tải bội) toán tử Phần cuối chương giới thiệu cẩu trúc liệu động gồm có danh sách liên kết, chồng, hàng đợi theo kiểu lập trình hướng đối tượng Chương Tính thừa kế - Tỉnh đa hình Trình bày lóp sở lớp dẫn xuất, tính thừa kế lớp (mối liên kết is-a), tính đa hình (đa xạ) lớp Phụ lục A Các hàm xử lý chuỗi kỷ tự C++ Phụ ỉục B Các thuộc tính phương thức x lý chuỗi kỷ tự cu Phụ lục c Các hàm toán học C++ Phụ lục D Các phương thức toán học cu Quyển sách Kỹ thuật lập trình tài liệu học tập cho sinh viên chun ngành Cơng nghệ Thơng tin, Khoa học Mảy tính, Kỹ thuật Máy tỉnh, Công nghệ Phần mềm hệ đào tạo quy bậc đại học Quyển sách trình bày nhiều nội dung chi tiết, nhiều ví dụ dễ hiểu nhiều tập chương, tài liệu tham khảo cho sinh viên thuộc hệ đào tạo từ xa bậc đại học bậc cao đẳng ngành Cơng nghệ Thơng tin lập trình viên Tại Trường Đại học Bách khoa - Đại học Quốc gia TP HCM, sách tài liệu học tập cho sinh viên chuyên ngành hệ đào tạo quy hệ đào tạo từ xa qua mạng Tác giả trân trọng cảm ơn Ban chủ nhiệm giảng viên Khoa Khoa học Kỹ thuật Mảy tính, Ban Giáo trình Trường Đại học Bách Khoa - Đại học Ọuổc gia TP HCM tạo điều kiện giúp đỡ để sách xuẩt Mặc dù tác giả nỗ lực biên soạn, nhiên, sách tránh khỏi thiếu sót Tác giả mong nhận ý kiến đóng góp quý báu độc giả xin gừi về: Khoa Khoa học Kỹ thuật Máy tính, Trường Đại học Bách Khoa Đại học Quốc gia TP Hồ Chí Minh, 268 Lý Thường Kiệt, Phường 14, Quận lõ, TP Ho Chí Minh Email: nttruc@hcmut.edu.vn, truc@cse.hcmut.edu.vn Tác giả NGUYỄN TRUNG TRựC Chương Máy tính - Phương pháp luận lập trình Giới thiệu 10 1.1 Máy tính 10 1.2 Phần cứng phần mềm máy tính 10 1.2.1 Phần cứng 10 1.2.2 Phần mềm 19 1.3 Hệ thống số 24 1.3.1 Các hệ thống số 24 1.3.2 Biểu diễn số nguyên 27 1.3.3 Biểu diễn số thực 28 1.4 Ngơn ngũ- lập trình 31 1.5 Giải thuật 34 1.5.1 Mã giả 35 1.5.2 Sơ đồ tiến trình 36 1.6 Phương pháp luận lập trình 38 1.6.1 Đặc tả phần tích vấn đề 39 1.6.2 Thiết kế giải thuật 40 1.6.3 Xây dựng chiến lược kiểm thử 44 1.6.4 Viết chương trình 45 1.6.5 Thực kiểm thử chương trình 49 1.6.6 Bảo trì chương trình 51 Tóm tắt 53 Bài tập 59 Chương I Máy tinh - Phương pháp luận lập trình 10 G iói thiệu Chương giới thiệu hoạt động thành phần phần cứng máy tính thiết bị kết nối với máy tính Các phần mềm thực máy tính bao gồm phần mềm hệ thống phần mềm ứng dụng Hệ điều hành phần mềm hệ thống, thực chức bản, cho phép thành phân máy tính làm việc chung với nhau, cung cấp tảng để chạy phần mềm hệ thống mức cao phần mềm ứng dụng Cuối cùng, chương trinh bày phương pháp luận lập trình bao gồm bước công việc cùa mồi bước để xây dựng phẩn mềm máy tính 1.1 M áy tính Máy tỉnh (computer) thiết bị có mục đích chung (generalpurpose device) lập trình đế thực phép toán số học (arithmetic operation) phép toán luận lý (logical operation) cách tự động Máy tính thực hàng tỷ phép tính giây nhanh Chuồi phép tốn thay đổi dễ dàng Do đó, máy tính giải nhiều loại tốn khác Chuỗi thị (instruction) mà máy tính thực gọi clnrơng trình máy tính (computer program) gọi tát chương trình (program) Người viết chương trình gọi người lập trình (programmer) Các thị chương trình chứa nhớ máy tính Chu kỳ tính tốn (computation cycle) cùa máy tính bao gồm lấy thị nhớ, thực tính tốn sau đỏ lấy lệnh gặp thị "halt” (dừng) 1.2 Phần cứng phần mềm máy tính 1.2.1 Phần cứng Phần cứng (hardware) thuật ngừ chung nói đến dụng cụ vật lý cơng nghệ Nó có nghĩa thành phần vật lý hệ thống máy tính gọi phần cứng máy tính (computer hardware) Chương Máy tính - Phương pháp luận lập trình Các thiết bị phần cứng thơng dụng bàn phím (kevbocird), hình (screen), chuột (mouse), cần điều khiển (ịoystick), đĩa cứng (harci disk), nhớ (memory), đĩa quang (optỉcal clisk), đơn vị xử lý (Processing unit) Kiến trúc máy tỉnh (Computer architecturc) tập quy tắc mô tả chức năng, tô chức thực hệ thống máy tính Kiến trúc Von Neumann (Von Neumann architechture) cho thấy chương trình thực bên nhớ máy tính với dừ liệu chương trình Kiến trúc cịn gọi máy tính chứa chương trình (storedprogram Computer) Kiến trúc Von-Neumann có ba đơn vị chính: - Bộ nhớ (inemory) chứa chương trinh dừ liệu - Đơn vị x ¡ý trung tâm (CPU —Central Processing Unit) truy xuất chương trinh liệu ỡ nhớ thực phép toán - Đơn vị Nhập /X u ấ t (I/O unit) cung cấp truy xuất đến thiết bị để nhập xuất liệu Input device ► Output device Hình 1.1 Kiến trúc Von-Neiinmnn Chương Máy tinh —Phương pháp luận lập trình 12 a Các thiết bi nhập / xuất Các thiết bị nhập / xuất {I/o device), gọi thiết bị ngoại vi (peripheral device), dùng để đưa dừ liệu vào máy tính nhận liệu từ máy tính Các thiết bị nhập / xuất gồm có bàn phím, chuột, cần điều khiển, đĩa cứng, nhớ, đĩa quang, USB {Universal Serial Bus), hình, b Đon vị xử lý trung tâm CPU Thơng thường, máy tính phải có đơn vị xử lý trung tâm CPU nhớ Đơn vị xử lý trung tâm CPU thực phép tốn sơ học luận lý điều khiển hoạt động truy xuất dừ liệu nhớ Một chu kỳ lặp {repetive cycle) máy tính Von Neumann gồm có: Nạp thị chương trinh từ nhớ đưa vào CPU Giải mã {decode) thực chì thị Việc thực thị là: - Thực phép toán số học luận lý - Nạp {load) lưu trữ {store) liệu nhớ Khi thực xong thị, CPU lấy thị nhớ thực thị CPU bao gồm hai đơn vị đơn vị điều khiển đơn vị tính tốn số học luận lý - Đon vị điều khiển {CU - Control Unit) trì chu kỳ không thay đổi ỉấy-và-thực-hiện {cycle offetchs-and-execute) - Doit vi tính tốn số học vù luận lý {ALU - Arithmetic and Logic Unit) mạch điện tử thực phép toán số học {arithmetic operation), phép so sánh giá trị {values comparison) phép toán luận lý bit {bitwise logical operation) sô nhị phân nguyên {integer binaiy number) Cả hai đơn vị c u ALU có nhớ đặc biệt, tốc độ truy xuất nhanh, chúng gọi ghi {register) Một số ghi có chức đặc biệt, ví dụ ghi hộ (lent chương trình {PC - Program Counter), ghi thị {IR - Instruction Register) Clncơng Máy tính - Phương pháp luận lập trình 37 Các sơ đồ tiến trình sử dụng việc phàn tích, thiết kể, lập tài liệu quản lý trinh chương trình nhiều lãnh vực khác Sơ đồ tiến trình chương trình {program flowchart) cho thấy cơng việc thực điều khiển {control) chưong trình ( ỵ ) Bắt đầu / Kết Tài liệu in ị Nhiều tài liệu Nhập / Xuất Hành động / Q trinh Nhập bàng tay Dịng tiến trình o d > Chuẩn bị cho bước khác Quyết định / Rẽ nhánh Trộn nhiều trình thành Điểm kết nối Định dạng liệu ® Điểm phân kỳ í chianhiêu nhiêu r lnn (chia dòng) Điểm Điềm hội tụ (gộp nhiều dịng) Sắp xếp theo tiêu chí Trì hồn Gọi chương trình Lặp két \\ J !rặ] thúc thú Cơ sờ dừ liệu Lưu trữ nhớ ) Hiến thị thông tin ^ Ị^J n c Dừ liệu dược lưu trừ D Kết nối trang khác Phiếu đục lỗ Ghi Hình 1.11 Các ký hiệu cùa sơ đồ tiến trình 38 Chương Máy tinh - Phương pháp luận lập trình Ví dụ 1.10: Sau sơ đồ tiến trình tìm ước số chung lớn (GCD Greatest Common Divisor) hai số nguyên dương a b bàng giải thuật Euclid (Euclid's algorithm) Hình 1.12 Sơ đồ tiến trình tìm ước sổ chung lớn nhắt cùa a b 1.6 Phương pháp luận lập trình Phương pháp luận lập trình (programming methodology) giải vấn đề phân tích (analysis), thiết kế (design) thực (implementation) chương trình Phương pháp luận lập trình cịn gọi phút triển chương trình (program development) Một phương pháp luận quan trọng cách tiếp cận từ xuống (topdown approach) để phân tích, thiết kế thực Clncơng Máy tính - Phương pháp luận lập trình 39 Quy trình giải vấn đề {problem-solving process) bàng máy tính gồm có giai đoạn {phase) quan trọng sau đây: Đặc tả phân tích vấn đề {problem analysis and specification) Thiết kế giải thuật {algorithm design) Xây dựng chiến lược kiểm thử {testing strategy development) Viết chương trinh {program coding) Thực kiểm tra chương trình {program execution and testing) Bảo trì chương trình {program maintenance) Trong thực tể, giai đoạn thực cách theo mô hình thúc nước {waterfall model) chúng thực lặp vịng nhiều lần theo mơ hình xoắn ốc {spiral model) 1.6.1 Đặc tă phân tích vấn đề Đặc tả ban đầu vấn đề {problem) mơ hồ khơng xác Do đó, giai đoạn cùa quy trinh giải vấn đề xem xét lại {review) vấn đề cách cẩn thận để xác định phần nhập phần xuất vấn đề Giai đoạn gọi hiểu vẩn đề {problem understanding) Giai đoạn khó giai đoạn hồn tồn định Đặc tủ vấn đề {problem specification), gọi định nghĩa vân đê {problem definition), bao gôm định nghĩa xác hai thành phần phần nhập phần xuất liên hệ chúng - Phần nhập {input) thơng tin cho điều quan trọng để giải vấn đề Phần nhập gọi giả thiết {supposition) toán Phần nhập phải xác định dầy đủ đế giải vấn đề - Phần xuất {output) thơng tin phải đạt sau giải vấn đề Phần xuất gọi két luận {conclusion) toán Việc xác định phần nhập phần xuất vấn đề giúp cho ta hiểu vấn đề cách rõ ràng xác Phân tích vẩn đề {problem analysis) q trình hiểu vấn đề, yêu câu người sử dụng đè xuât giải pháp {solution) để giải yêu câu Mục tiêu phân tích vân đề hiếu rõ vắn đề trước giải Chương Máy tính - Phương pháp luận lập trình 40 Người sử dụng nêu vấn đề người giải vấn đề {problem solver) phải làm việc chung với để bảo đảm hai hiểu rõ vấn đề Các bước phân tích vấn đề gồm có: Đạt chấp thuận (agreement) định nghĩa vấn đề: Một cách đơn giản để có chấp thuận người giải quyêt vân đề phải ghi chép vấn đề rõ ràng vả bàn luận với người sử dụng Các nguyên tắc ghi chép KISS {Keep It Simple Stupid) SVDPĨ {Subject-VerbDirect-Preposition-Indirect) Hiểu nguyên nhân {root cause): vấn đề đẳng sau vấn đề Phân tích nguyên nhân cách làm có hệ thống để làm rõ nguyên nhân tim ẩn cùa vấn đề Xác định người sử dụng {user) người có Hên quan {stakeholder) Hiểu yêu cầu người sử dụng người có liên quan yếu tố để xây dựng giải pháp hiệu Người có liên quan người chịu ảnh hường chủ yếu việc thực giải vấn đề hệ thống {system) ứng dụng {application) Xác định phạm vi hệ thống {system boundary) Phạm vi hệ thống giao tiếp {interface) với mơi trường ngồi với hệ thống khác Xác định ràng buộc {constraint) áp đặt cho giải phcáp Ràng buộc hạn chế giới hạn cần phải tuân thủ đề xuất giải pháp Ví dụ 1.11: Vấn đề ban đầu ià giải phương trình bcậc hai trường số thực ax2 + bx + c = Phần nhập: cho ba hệ số a, b, c số thực Phần xuất: tìm nghiệm X số thực 1.6.2 Thiết kế giải thuật Giai đoạn thiết kế giải thuật {algorithm design) gồm có hai bước: - Thiết kế giải pháp - Tinh chế giải pháp Trong bước thiết kế giãi pháp {solution design), ta xác định giải pháp sơ Ta chia vấn đề ban đầu thành nhiều vấn đề nhỏ hơn, dễ giải quỵêt hom vấn đề cuối giải Khi đỏ, ta tìm giải pháp cuối 41 Chương Máy tinh - Phương pháp luận lập trình Các giải pháp phần để giải vấn đề giải pháp cuối để giải vấn đề ban đầu trình bày dạng ỷ tưởng {idea), chưa đề cập đến yểu tố kỹ thuật cụ thể Cách tiếp cận cách tiếp cận từ xuống {top-down approach) với chiến lược chia đe trị {devide and conquer) Các giải pháp cần phải có tính tung qt Tuy nhiên, ta cần phải lưu ý khía cạnh riêng biệt {particular aspect) vấn đề để tìm giải pháp thích hợp cho chúng Ví dụ 1.12: vấn đề ban đầu giải phương trình bậc hai a x + b x + c = trường số thực, vấn đề chia thành hai vấn đề nhỏ sau: - Vấn đề ban đầu: Neu a = giải phương trinh bậc b x + c = 0, ngược lại giải phương trình bậc hai đủ a x + b x + c = - Vấn đề I: giải phương trình bậc b x + c = , Giải pháp phần tìm nghiệm X (bậc nhất), có a = - Vắn đề 2: giải phương trình bậc hai đủ a x + b x + c = 0, a # Giải pháp phần tìm nghiệm X (bậc hai), có Trong bước tinh chế giải pháp {solution refinement), giải pháp phải mô tả chi tiết chuồi hành động {action) cụ thể thực dừ liệu phần nhập kết phần xuất gọi giải thuật {algorithm) Quá trình tinh chế {refinement process) thực chi tiết hóa giải pháp đạt mơ tả giải thuật tương tự với chương trình Quy trình gọi tinh chế dần bước {stepwise refinement) Chương trình thực giải thuật phải viết bàng ngơn ngừ mà máy tính hiêu Ngơn ngữ gọi ngơn ngữ lập trình {progì amm ỉng language) Do đó, ta thường mơ tà giải thuật ngơn ngữ tương tự vói ngơn ngữ ỉập trình, ngơn ngữ gọi ngơn ngữ lập trình giả {pseudoprogramming language) thường gọi mã gia {pseudocode) Ngôn ngũ' pha trộn giũa ngôn ngữ tự nhiên {natuaral language) ký hiệu tốn học {mathematical notation) Mã giã khơng phải ngơn ngữ lập trình {programming language) đưọ'c dùng cho máy tính 42 Chirơng Máy tinh - Phương pháp luận lập trình Khơng giống ngơn ngữ lập trinh mức cao (high-level programming language) Pascal, C++, c#, Java, ta khơng có tập quy tăc để định nghĩa cách xác ngơn ngừ mã giả, ngôn ngữ không mã giả Mã giả thay đổi từ nhóm lập trình đến nhóm lập trình khác Sau số đặc điểm mã giả khác nhau: - Các ký hiệu máy tính thơng thường sử dụng cho phép toán số học (arithmetic operation): + phép cộng (addition), - phép trừ (subtraction), * phép nhân (multiplication) / phép chia (division) - Các tên ký hiệu (symbolic name) danh hiệu (identifier) dùng để biểu diễn đại lượng xử lý giải thuật - Các ghi (comment) dùng đề giải thích cho bước, thành phần giải thuật Các ghi thường ghi cặp (* *), cặp / * * / / / - Một số từ ngôn ngữ tư nhiên sử dụng làm từ khóa (keyword)', read, e n te r, in p u t dùng để nhập liệu, w rite , outp u t, d isp la y , p r i n t dùng để xuất liệu, compute dùng để tính tốn - Thụt đầu dịng (indentation) dùng để trình bày cấu trúc điều khiển cho dễ đọc Mô tả giải thuật mã giả phải rõ ràng cho thấy luận lý chương trình (program) thực giải thuật Giai thuật có cẩu trúc (structured algorithm) giải thuật thiết kế bàng cách sử dụng ba cấu trúc điều khiển sau đây: - Cấu trúc (sequence structure): chuồi hành động thực cách tuần tự, hành động thực lần - Cấu trúc diều kiện (conditional structure): Một nhiều hành động khác chọn thực - Cấu trúc lặp (iterational structure): nhiều hành động thực lặp lại Ba cấu trúc điều khiển đơn giản Tuy nhiên, thực tế, bu cấu trúc điều khiển dùng dể mô tủ but kỳ giủi thuật Chương Máy tính - Phương pháp luận lập trình 43 Cấu trúc giải thuật trình bày hình vẽ, hình gọi sơ đồ cẩu trúc (structure diagram) Sơ đồ cấu trúc cho thấy công việc khác phải thực mối liên hệ chúng Sơ đồ cấu trúc đặc biệt hữu ích để mơ tả giải thuật vấn đề phức tạp Hình 1.13 Sơ đồ cấu trúc Vỉ dụ 1.13: Tinh chế giải pháp để giải vấn đề ban đầu, vấn đề vấn đề mã giả - Vẩn đề ban đầu: Giải phương trình bậc bậc hai ax2 + bx + c = read a, b, c; if (a = ũ) Giải phương trình bậc bx + c = 0; else Giải phương trình bậc hai đủ ax2 + bx -t- c = 0; - Vấn đề 1: Giải phương trình bậc bx + c = , a = Giải pháp tịng phần tìm nghiệm X (bậc nhất), có if (b = 0) if (c = ũ) write "Phương trình có vơ số nghiệm"; else write "Phương trình vơ nghiệm"; else { compute X = -c / b; write x; } Chương Máy tính - Phương pháp luận lập trình 44 - vấn đề 2: Giải phương trình bậc hai đủ a x + b x + c = 0, a ^ Giải pháp phần tìm nghiệm X (bậc hai), có delta = b * b - * a * c ; if (delta < 0) write "Phương trình vơ nghiệm"; else if (delta = 0) { compute X = -b / (2 * a); write "Nghiệm kép = ", x; } else { compute xl = (-b compute x2 = (-b write "Nghiệm xl write "Nghiệm x2 + = = sqrt(delta)) / (2 * a); sqrt(delta)) / (2 * a); ", xl; ", x2; } 1.6.3 Xây dựng chiến lược kiểm thử Giải thuật dùng đe viết chương trình cho máy tính thực Ta cần phải chạy thử chương trình với nhiều tổ hợp liệu nhập khác để bảo đàm chương trình ln ln cho kết trường hợp Một tổ họp dừ liệu nhcập để chạy kiểm tra chương trình gọi trường hợp kiếm thử (test-case) Để kiểm thử chương trinh cách hoàn toàn kỳ lưỡng, ta phải phàn loại trường hợp kiểm thử cho chúng bao quát giá trị nhập thông thường (normal input value) giá trị nhập ngưỡng {extreme input value) đế kiểm tra giới hạn chương trình Các tổ họp đặc biệt liệu nhập dùng đế kiếm tra chương trình thực khía cạnh riêng biệt vấn đề Lun ý ràng đổi với tất trường họp kiểm thử, kết mong đợi phải xác định trước viết chương trình Việc hồn thành trường họp kiểm thử giúp cho việc kiếm tra giải thuật chương trình hiệu Ví dụ 1.14: Các trường họp kiểm thử để kiểm tra chương trình giải phương trình bậc hai a x + fox + c = sau: Chương Máy tính - Phương pháp luận lập trình 45 Bảng 1.2 Các trường hợp kiểm thử Test-case a b c Kết q mong đọi TCI 0 Phương trình có vơ số nghiệm Tc i 0 Phương trình bậc vô nghiệm TC3 Nghiệm bậc TC4 1 Phương trình bậc hai vơ nghiệm TC5 Nghiệm kép TC6 -3 Hai nghiệm x l = x2 = X = X = -2 -1 1.6.4 Viết chưoìig trình Các giải thuật mă giả khơng thể thực trực tiếp máy tính Q trình chuyển giải thuật mã giả thành chương trình ngơn ngữ lập trìnil gọi viêt chương trình lập trình {programming, coding) Nhiều ngơn ngữ lập trình có giới hạn thực chương trinh máy tính Do đó, việc lập trình gặp khó khăn giới hạn xảy Ví dụ, tốn học sổ ngun {integer number) lớn, nhiều phần mềm ngôn ngữ lập trình chứa số ngun byte có giá trị từ đến 4.294.967.295 (sổ nguyên không dấu) Ta phải chọn phần mềm ngơn ngữ lập trinh thích hợp với giải thuật thiết kế để viết chương trình Hiện có nhiều ngơn ngữ lập trình mức cao {high-level programming language) Pascal, C++, c#, Java, Mỗi ngơn ngữ lập trình có đặc điểm riêng biệt Sau ta chọn ngơn ngừ lập trình, việc viết chương trình phải bảo đảm chương trình chạy đủng {correct), dễ đọc {readable) dễ hiểu {understandable) Các nguyên tắc viết chương trình là: - Chương trình nên có cấu trúc tốt {well-structured) - Mỗi chương trình nên lập tài liệu {program documentation) - Chương trình nên định dạng (formatted) Chương Máy tính - Phương pháp luận lập trình 46 a Chưong trình có cấu trúc tốt - Sử dụng cách tiếp cận từ xuống (top-down approach) phát triển chương trình để giải vấn đề phức tạp Phân chia vấn đề ban đầu thành nhiều vấn đề ngày đon giản Sau đó, ta viết đơn thể chương trình riêng biệt để giải vấn đề Cách làm gọi lập trình đơn thê (modular programming) - Cố gắng đạt tính đon giản (simplicity) tính sáng {clarity) Nên tránh kiểu lập trình thơng minh nhằm mục đích chứng minh khéo léo người lập trình viết đoạn mã lệnh để chạy nhanh chút b Lập tài liệu cho đon vị chng trình - Mỗi đơn vị chương trình {program unit) nên có tài liệu mở {opening documentation) Nên có ghi {comment) đầu mồi chương trình (thủ tục, hàm) để giải thích chương trình làm {what), làm {how), giải thuật {algorithm) sử dụng, thông tin người lập trình, ngày viết ngày cập nhật chương trình, tài liệu tham khảo đê bổ sung thơng tin vê chương trình, giải thích biên sử dụng chương trình - Các đoạn chương trình {program segment) quan trọng nên có ghi Tuy nhiên, nhiều ghi chi tiết không cần thiết làm cho chương trình khó đọc khó hiểu - Nên sử dụng danh hiệu có nghĩa {meaningful identifier) Ví dụ: danh hiệu có nghĩa found, fir stn a m e , c Định dạng chuưng trình Chương trình nên định dạng theo kiểu mẫu {style) để làm tăng tính dễ đọc {readability) Điều gọi phong cách lập trình (programming style) - Sử dụng khoảng trống {space) thành phần phát biểu để dễ đọc Ví dụ nên có khoảng trổng trước sau tốn tử - Thêm hàng trống {blank line) phần {section) chương trinh chỗ thích hợp chuỗi phát biểu để tạo thành nhỏm phát biểu - Tuân theo cách nghiêm ngặt hướng dẫn sẳp thẳng hàng {alignment) thụt đầu dịng {indentation) để làm bật mơi liên hệ phần khác chương trình Chương Máy tính - Phương pháp luận lập trình 47 Vỉ dụ 1.15: Chương trình sau giải phương trình bậc hai ax2 + bx + c = Chương trình C++: #include #include using namespace std; // giải phương trình bậc ax + b = ũ void PTBacl(double a, double b) { if (a == 0) if (b == 0) cout « "Phuong trinh co vo so nghiêm" « endl; else cout « "Phuong trinh bac nhat vo nghiêm"