SKKN Rèn luyện kỹ năng lập trình hiệu quả cho học sinh trường THPT Yên Định 3
Việt Nam đang đổi mới một cách căn bản, toàn diện nền giáo dục để nền giáo dục Việt Nam phát triển hòa nhập với quốc tế, theo kịp với sự phát triển như vũ bão của khoa học - kĩ thuật - công nghệ và tri thức của loài người đang gia tăng nhanh chóng. Đổi mới giáo dục toàn diện là một lộ trình đã và đang được thực hiện, một trong những bước đi đầu tiên của quá trình đổi mới ấy là đổi mới phương pháp dạy học nhằm phất huy tính tích cực, chủ đông, sáng tạo trong học tập để tạo đà cho các cấp học tiếp theo hoặc trong thực tiễn cuộc sống sau này. Môn tin học được đưa và chương trình THPT và đang tích cực thực hiện đổi mới phương pháp dạy học nhằm mang lại hiệu quả dạy học và giáo dục cao nhất.
Mặt khác môn Tin học không phải là môn khoa học lý thuyết thuần túy vì vậy học sinh không thể nhớ nếu như không hiểu bài. Việc giáo viên bắt học sinh ghi nhớ thụ động từng nội dung trong sách giáo khoa là một điều cực khó, cho dù học sinh có cố gắng ghi nhớ thì vẫn bị lẫn lộn. Hơn nữa, khi gặp các bài toán phải sử dụng thuật toán phức tạp nhiều em lúng lúng. Việc giải các bài toán này thực sự cần thiết cho các em khi làm các học lập trình trong chương trình Tin học phổ thông nói riêng và việc giải quyết các bài toán thực tế nói chung.
Là giáo viên trực tiếp giảng dạy môn Tin học nhiều năm tôi luôn tìm tòi vận dụng những phương pháp dạy học tích cực để giúp các em tiếp cận và giải quyết hiệu quả các bài học Tin học nói chung và các bài tập lập trình nói riêng, trong đó có kỹ năng giúp học sinh lập trình giải các bài toán trên ngôn ngữ lập trình bậc cao (cụ thể là NNLP Pascal) sao cho hiệu quả nhất, hướng đến tính chuyên nghiệp nhất để tạo điều kiện cho các em có thể học lên cao nữa, mặt khác học sinh cần rèn luyện tính kiêm trì, chịu khó, chăm chỉ và làm việc có tổ chức, có kế hoạch trong học tập cũng như lao động sản xuất sau này.
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA TRƯỜNG THPT YÊN ĐỊNH 3 SÁNG KIẾN KINH NGHIỆM RÈN LUYỆN KỸ NĂNG LẬP TRÌNH HIỆU QUẢ CHO HỌC SINH TRƯỜNG THPT YÊN ĐỊNH 3 Họ và tên tác giả: Lê Tiến Lực Chức vụ: Giáo viên SKKN thuộc môn: Tin học THANH HOÁ, NĂM 2019 MỤC LỤC Nội dung Trang 1. Mở đầu 2 1.1. Lí do chọn đề tài 2 1.2. Mục đích nghiên cứu 2 1.3. Đối tượng nghiên cứu 3 1.4. Phương pháp nghiên cứu 3 2. Nội dung sáng kiến kinh nghiệm 4 2.1. Cơ sở lý luận 4 2.2. Thực trạng của vấn đề trước khi áp dụng sáng kiến kinh nghiệm 4 2.3. Các giải pháp đã sử dụng để giải quyết vấn đề 5 2.3.1. Rèn luyện tư duy thuật toán cho học sinh THPT 5 2.3.2. Phong cách lập trình tốt 6 2.3.3. Phong cách viết mã nguồn 7 2.3.4 .Tối ưu sự thực thi mã nguồn 9 2.3.5. Kiểm nghiệm chương trình với các test đầy đủ nhất 10 2.3.6. Các dạng toán cơ bản bồi dưỡng môn Tin cho HSG THPT 10 2.4. Hiệu quả của sáng kiến kinh nghiệm 19 3. Kết luận, kiến nghị 19 1. MỞ ĐẦU 1.1. Lí do chọn đề tài. Việt Nam đang đổi mới một cách căn bản, toàn diện nền giáo dục để nền giáo dục Việt Nam phát triển hòa nhập với quốc tế, theo kịp với sự phát triển như vũ bão của khoa học - kĩ thuật - công nghệ và tri thức của loài người đang gia tăng nhanh chóng. Đổi mới giáo dục toàn diện là một lộ trình đã và đang được thực hiện, một trong những bước đi đầu tiên của quá trình đổi mới ấy là đổi mới phương pháp dạy học nhằm phất huy tính tích cực, chủ đông, sáng tạo trong học tập để tạo đà cho các cấp học tiếp theo hoặc trong thực tiễn cuộc sống sau này. Môn tin học được đưa và chương trình THPT và đang tích cực thực hiện đổi mới phương pháp dạy học nhằm mang lại hiệu quả dạy học và giáo dục cao nhất. Mặt khác môn Tin học không phải là môn khoa học lý thuyết thuần túy vì vậy học sinh không thể nhớ nếu như không hiểu bài. Việc giáo viên bắt học sinh ghi nhớ thụ động từng nội dung trong sách giáo khoa là một điều cực khó, cho dù học sinh có cố gắng ghi nhớ thì vẫn bị lẫn lộn. Hơn nữa, khi gặp các bài toán phải sử dụng thuật toán phức tạp nhiều em lúng lúng. Việc giải các bài toán này thực sự cần thiết cho các em khi làm các học lập trình trong chương trình Tin học phổ thông nói riêng và việc giải quyết các bài toán thực tế nói chung. Là giáo viên trực tiếp giảng dạy môn Tin học nhiều năm tôi luôn tìm tòi vận dụng những phương pháp dạy học tích cực để giúp các em tiếp cận và giải quyết hiệu quả các bài học Tin học nói chung và các bài tập lập trình nói riêng, trong đó có kỹ năng giúp học sinh lập trình giải các bài toán trên ngôn ngữ lập trình bậc cao (cụ thể là NNLP Pascal) sao cho hiệu quả nhất, hướng đến tính chuyên nghiệp nhất để tạo điều kiện cho các em có thể học lên cao nữa, mặt khác học sinh cần rèn luyện tính kiêm trì, chịu khó, chăm chỉ và làm việc có tổ chức, có kế hoạch trong học tập cũng như lao động sản xuất sau này. 1.2. Mục đích nghiên cứu. Theo những tin tức tư vấn của chuyên gia giáo dục, việc kết hợp lý thuyết và thực hành là xu hướng phát triển tất yếu của nền giáo dục để có thể đáp ứng nhu cầu chất lượng nguồn lao động hiện nay. Đây cũng được xem là phương pháp dạy học Tin học hiệu quả. Thực tế, do học sinh phải học quá nhiều môn, cá biệt có em cho rằng Tin học là môn học phụ, không thi THPT quốc gia. Nếu chỉ học lý thuyết chung chung thì học sinh sẽ không thể nắm bắt và sẽ nhanh quên. Bên cạnh đó thì Tin học cũng là môn học đòi hỏi kỹ năng sử dụng máy tính thành thạo. Chính vì thế, cần kết hợp đào tạo lý thuyết và rèn luyện kỹ năng thực hành theo hướng chuẩn và chuyên nghiệp. Đây được xem là yếu tố cần thiết đối với dạy học môn Tin học. Mặt khác qua quá trình nhiều năm giảng dạy thực tế tại đơn vị và trao đổi cùng đồng nghiệp các đơn vị khác, qua quá trình tìm hiểu học sinh, nhất là trong các bài thi của các học sinh giỏi cấp tỉnh những năm qua cho thấy: Một số bài làm của các em còn chưa được viết đúng phong cách lập trình có cấu trúc, chưa có phong cách viết mã nguồn chuyên nghiệp, chưa thực sự tối ưu hóa mã nguồn nên gây khó khăn cho việc hiệu chỉnh và phát triển chương trình. Hầu hết các chương trình của các em học sinh mang tính chú trọng tìm output nên khi đọc chương trình người khác rất khó hiểu và khó hiệu chỉnh theo hướng chuyên nghiệp. Để khắc phục tình trạng này tôi mạnh dạn áp dụng những sáng kiến của mình trong nhiều năm, với nhiều thế hệ học sinh một cách thường xuyên và liên tục trong quá trình dạy học từng bài học, từng tiết học, đặc biệt là trong quá trình bồi dưỡng học sinh khá giỏi môn Tin học. Kết quả bước đầu đạt được là rất đáng khích lệ và tự hào, được đồng nghiệp và học sinh đánh giá cao. 1.3. Đối tượng nghiên cứu. Sáng kiến kinh nghiệm được nghiên cứu và đúc rút kinh nghiệm tập trung vào các vấn đề sau: Rèn luyện tư duy thuật toán cho học sinh THPT Rèn luyện kỹ năng tìm tòi thuật toán giải các bài toán hiệu quả. Xác định rõ INPUT và OUTPUT. Mịn dần thuật toán. Rèn luyện phong cách lập trình tốt cho học sinh THPT . Quy ước về cách đặt tên cho các định danh. Phong cách viết mã nguồn. Tối ưu sự thực thi mã nguồn. Tạo các bộ Test kiểm tra tính đúng đắn của chương trình. Các dạng toán tiêu biểu bồi dưỡng môn Tin học cho HSG THPT 1.Các bài toán số học 2.Các bài toán về mảng một chiều, hai chiều. Các bài toán về xử lý xâu 1.4. Phương pháp nghiên cứu. Để nghiên cứu được đề tài tôi đã sử dụng một số phương pháp sau: Phương pháp nghiên cứu xây dựng cơ sở lý thuyết lập trình. Nghiên cứu các vấn đề lí luận có liên quan đến đề tài như các tài liệu về thuật toán, các bài toán hay trong tin học. Nghiên cứu các tài liệu về phương pháp dạy học tích cực môn Tin học. Nghiên cứu nội dung cấu trúc của chương trình môn Tin học THPT. Phương pháp khảo sát thực tế, thu thập thông tin về học sinh. Trao đổi với giáo viên có kinh nghiệm về phương pháp dạy học tích cực. Tìm hiểu khó khăn của học sinh và giúp đỡ các em trong quá trình học tập, thực hành trên phòng máy. 2. NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1. Cơ sở lí luận. - Cơ sở của việc dạy học bộ môn: Dạy học là một tác động hai chiều giữa giáo viên và học sinh, trong đó học sinh là chủ thể của quá trình nhận thức, còn giáo viên là người tổ chức các hoạt động nhận thức cho học sinh. Nếu giáo viên có phương pháp tổ chức tốt, phù hợp thì học sinh sẽ nắm kiến thức dễ dàng, có thể giải quyết tốt các bài toán, tình huống cụ thể trong thực tiễn và ngược lại. - Cơ sở của việc nắm kiến thức, kĩ năng: + Về mặt kiến thức: Học sinh phải nắm được các đơn vị kiến thức cơ bản trong sách giáo khoa, trong giờ học theo chuẩn kiến thức, kĩ năng do Bộ giáo dục và đào tạo quy định. Đó là nền tảng cơ bản để các em phát triển tư duy, nâng cao năng lực giải quyết vấn đề. + Về kĩ năng: Học sinh biết vận dụng kiến thức đã học trong các giờ học để giải quyết nhanh gọn các dạng bài tập từ đơn giản đến phức tạp, từ tái hiện kiến thức đến vận dụng kiến thức. Điều đó đòi hỏi học sinh phải có phương pháp giải quyết vấn đề cho các dạng bài tập tốt. Việc học của học sinh cần được chú ý ở hai mức độ: mức độ vận dụng và mức độ sáng tạo. Trong đó mức độ sáng tạo đòi hỏi học sinh phải có tố chất, có kĩ năng tổng hợp, phân tích để từ đó có cách giải quyết phù hợp. 2.2. Thực trạng của vấn đề trước khi áp dụng sáng kiến kinh nghiệm. - Qua giảng dạy môn Tin học ở trường THPT, bản thân tôi nhận thấy rằng nhiều học sinh lớp 11 thấy môn lập trình Pascal khó, khô khan và cực kỳ phức tạp. Mới đầu các em cũng rất sợ vì khi thấy giải một bài toán ở ngoài thì đơn giản và chỉ trong vòng vài giây có thể nhẩm ra kết quả còn ở trong lập trình cũng bài toán đó mà phải làm đến hàng chục phút, đưa ra thuật toán mà có thể cho kết quả sai. - Tâm lý một số em đều cho rằng môn Tin học không phải là môn học chính, vì vậy đại đa số các em không tích cực trong học tập và chủ yếu thụ động tiếp thu kiến thức theo hướng dẫn của giáo viên với tâm lý học để lấy điểm cho hết giờ, hết bài mà chưa nhận ra lợi ích thiết thực, lâu dài của bộ môn. - Xét ở một góc độ nào đó lập trình cũng là một phần học khó đối với học sinh THPT. Khó ở đây không phải do tính phức tạp của phần học hay phạm vi kiến thức quá rộng lớn. Nếu đem so sánh lập trình và các môn Toán học, Vật Lý, Hóa học thì lập trình Pascal gọn nhỏ hơn nhưng lại khó tiếp cận hơn. - Lập trình Pascal "khó" đối với học sinh THPT vì môi trường lập trình Pascal có giao diện và các từ khóa đều bằng tiếng Anh, các dòng thông báo hay trợ giúp cũng vậy. Nhìn chung học sinh THPT vốn tiếng Anh không nhiều, nhiều em còn yếu về tiếng Anh.. - Một vấn đề nữa cũng là rào cản đối với việc các học sinh THPT tiếp cận với lập trình Pascal đó là: tư duy Toán học của các em còn hạn chế phụ thuộc vào Sách Giáo Khoa do đó kỹ năng phân tích, tổng hợp, xây dựng thuật toán cho mỗi bài toán hay vấn đề cần lập trình chưa tốt. Các em vẫn thụ động trong việc tiếp cận bài toán, sắp xếp tư duy, xây dựng thuật giải. - Từ thực tế trên, trong quá trình dạy học tôi luôn băn khoăn, trăn trở làm thế nào nâng cao chất lượng kỹ năng lập trình cho học sinh lớp 11 THPT. Việc tiếp cận với môn học rất khó khăn, phải làm rất nhiều lần và thực hành rất nhiều tiết các em mới hiểu việc nhập và xuất dữ liệu. Do đó sẽ rất khó khăn để các em hình thành kỹ năng viết chương trình. Nhất là những năm gần đây Ngành giáo dục luôn thành lập đội tuyển tham dự thi học sinh giỏi môn Tin học,. Điều đó đã thúc đẩy tôi trong quá trình giảng dạy phải nghiên cứu tìm tòi biện pháp, kinh nghiệm để giúp cho các em có sự đam mê học tập về lập trình, giúp các em biết được quy trình lập trình như thế nào và định hướng cho học sinh cách để trở thành một nhà lập trình thì cần phải nâng cao kỹ năng lập trình trên NNLT Pascal theo hướng chuyên nghiệp. Giúp các em hiểu, yêu thích lập trình và học lập trình trong sự hứng thú, phấn khởi. - Một số học sinh có suy nghĩ sai lầm Tin học chỉ là môn học giải trí để lên mạng, xem phim, chơi game, nghe nhạc. mà quên mất rằng tin học có nhiều ứng dụng quan trọng khác trong đời sống. Do vậy khó khăn khi đưa Tin học vào trường THPT xuất phát từ việc phát triển toàn diện cho học sinh thêm vào đó qua môn học này hình thành phẩm chất lao động chăm chỉ, kiên trì, chịu khó, - Những khó khăn ấy đặt ra rất nhiều thách thức cho những người trực tiếp giảng dạy môn học này như tôi. Từ đó tôi nhận thấy cần có những giải pháp cụ thể hơn để nâng cao chất lượng giảng dạy môn Tin học trong trường THPT để môn học này thực sự có ý nghĩa hơn trong giảng dạy và học tập. . Giải pháp được sử dụng. Rèn luyện tư duy thuật toán cho học sinh THPT. - Tại sao phải rèn luyện tư duy thuật toán cho học sinh THPT. - Trong quyển sách nổi tiếng của mình về NNLT Pascal ( viết năm 1970), tác giả N.With đã viết một dòng ngay từ trang đầu: CHƯƠNG TRÌNH= THUẬT TOÁN +CẤU TRÚC DỮ LIỆU - Như vậy thuật toán là phần quan trọng bậc nhất để tạo nên một chương trình. Nhưng ở các cấp học dưới học sinh vẫn chưa được làm quen với khái niệm thuật toán. Do vậy khi học lập trình cái khó khăn ban đầu của học sinh chính là tìm thuật toán để giải bài toán đã cho. Một học sinh muốn tiến sâu, tiến xa trong tương lai phải có tư duy thuật toán tốt. - Bởi vậy làm quen và rèn luyện tư duy thuật toán cho học sinh mới bắt đầu học lập trình là một yêu cầu thiết yếu. Để thực hiện được điều này, ngay từ khi còn học lớp 10 đặc biệt trong chương trình lớp 11, GV nên chú ý rèn luyện cho các em các vấn đề sau: Từ ý tưởng đến hình thành tư duy thuật toán Thuật toán từ đơn giản đến phức tạp, Từ các bài toán quen thuộc đến phát triển bài toán khó hơn Từ thuật toán phải kết hợp với cấu trúc dữ liệu hợp lý nhất. Và cuối cùng là thiết kế thuật toán hoàn chỉnh và tối ưu nhất, dễ lập trình nhất. Khi các em đã thành thạo rồi GV có thể nâng cao yêu cầu hơn như tìm những thuật toán khác nhau rồi so sánh lựa chọn thuật toán phù hợp. Phong cách lập trình tốt. Để có một phong cách lập trình tốt ngoài việc tuân theo các quy chuẩn, còn cần phải tuân theo các quy ước. Cơ sở cho việc cài đặt một chương trình hiệu quả là: Cách trình bày rõ ràng, sáng sủa nổi bật được cấu trúc logic của chương trình. Một phần nhỏ trong lập trình là để máy tính có thể đọc được nó. Phần lớn hơn là viết các mã lệnh cho chương trình chạy được theo đúng chức năng và làm sao để con người có thể dễ đọc, dễ hiểu nó. Lợi ích của việc trình bày cẩn thận: Thể hiện tốt cấu trúc lôgic của mã lệnh Cải thiện khả năng đọc Bảo đảm sự chính xác trong các thay đổi Các lợi ích hệ quả của các lợi ích trên Chương trình ít mắc lỗi và dễ sửa chữa khi mắc lỗi. Tiết kiệm thời gian sửa lỗi. Tăng khả năng làm việc theo nhóm, Quy ước về cách đặt tên cho các định danh. Thông thường tùy theo ngôn ngữ và môi trường lập trình, người viết chương trình chọn cho mình một phong cách nhất quán trong việc đặt tên cho các định danh. Tuy nhiên, nên đặt sao cho thuận tiện, dễ đọc, dễ nhớ và dễ làm việc, có một số quy tắc cần quan tâm khi đặt tên như sau: Đặt tên cho biến. Tên biến nên thể hiện được ý nghĩa: thông thường các biến nguyên như i, j, k dùng làm biến lặp; x, y dùng làm biến lưu tọa độ Còn những biến lưu trữ khác thì nên đặt tên gợi nhớ: Biến đếm số lần dùng “Count” hay “Sluong”; biến trọng lượng “weight” hay “Tluong”. Nếu đặt quá ngắn ngọn như “c” cho biến đếm hay “w” cho biến trọng lượng thì sau này khi nhìn vào chương trình sẽ rất khó hiểu và dễ nhầm lẫn, nhưng cũng không nên quá dài dòng như “Demsoluong” hay “Tinhtrongluong” bởi khi dùng sẽ rườm rà, tốn thời gian viết. Đặt tên hằng: Tất cả các ký tự đều viết hoa. Ví dụ: Const MAXN = 10000; INPUT = ‘Baitap.inp’; Đặt tên cho chương trình con: Tên chương trình con thường bắt đầu bằng chữ hoa. Vì chương trình con thường thực hiện một chức năng nào đó nên tên hay bắt đầu bằng động từ. Ví dụ: TimMax( ); GetNum( ); Phong cách viết mã nguồn. Quy tắc trình bày tổng thể chương trình: - Chương trình nên tách thành nhiều modul, mỗi modul thực hiện một công việc, càng độc lập với nhau càng tốt (chương trình con). Điều này sẽ giúp cho chương trình dễ cải tiến và khi đọc chương trình ta sẽ dễ hình dung được vấn đề đang được thực hiện. - GV phân tích cho hs thấy rõ lợi ích của chương trình con và cách truyền tham số cho chương trình con. Các chương trình đã viết trước đó có thể chuyển thành chương trình con, các dữ liệu được nhập từ bàn phím có thể sẽ được thay bằng cách truyền tham số. - Các modul được viết đúng, chương trình con đúng thì khi ghép sử dụng vào chương trình chính sẽ đúng, điều này rất dễ dàng giúp ta kiểm soát được lỗi của chương trình nhất là các chương trình lớn, phức tạp. - Nên sử dụng các tham số khi truyền thông tin cho các chương trình con. Tránh sử dụng các biến toàn cục để truyền thông tin giữa các chương trình con vì như vậy sẽ làm mất đi tính độc lập giữa các chương trình con và rất khó khăn khi kiểm soát giá trị của chúng khi chương trình con thi hành. - Cách trình bày chương trình càng nhất quán càng dễ đọc, dễ hiểu. - Chương trình nên giữ được tính đơn giản, rõ ràng. - Chương trình nên thực hiện như một dòng chảy từ trên xuống: + Sau đó đến khai báo đơn vị, khai báo hằng, khai báo kiểu, khai báo biến toàn cục, khai báo chương trình con. Quy tắc trình bày dòng lệnh - Mỗi câu lênh nên được đặt riêng trên một dòng để chương trình dễ đọc và dễ quan sát cách thực hiên khi dùng watch để tìm lỗi. - Sử dụng tab để canh lề chương trình (các lệnh ngang cấp thì phải tab vào như nhau): Điều này sẽ giúp chương trình rõ ràng và dễ quản lý. Ví dụ: Không nên Nên For i := 1 to n do Begin Action1; Action2; End; For i := 1 to n do Begin Action1; Action2; End; Nên viết Begin end; rồi viết lệnh vào giữa để tránh thiếu end; Sử dụng khoảng trắng chương trinh sẽ dễ nhìn hơn: Ví dụ: Khó đọc Dễ đọc If (a<c)and(c mod 2=0)then d:=a+c; If ( a < c ) and ( c mod 2 = 0 ) then d := a + c; a:=b*c a := b * c; TimMax(a,b,c); TimMax(a, b, c); - Nên định nghĩa hằng số: Điều này sẽ tránh việc các con số khó hiểu xuất hiện trong chương trình và cũng giúp người lập trình dễ kiểm soát chương trình lớn vì giá trị của hằng số khi cần thay đổi chỉ phải thay đổi một lần duy nhất ở giá trị định nghĩa. Ví dụ: Không nên Nên For i := 1 to 100 do A[i] := Random(100); While i<=100 do Const MAXN = 100; MAXNUM = 100; .. For i :=1 to MAXN do A[i] := Random(MAXNUM); While i <= MAXN do .. - Ở đoạn chương trình bên trái rất khó phân biệt các số 100 kia có quan hệ gì với nhau. Tuy nhiên, trong đoạn chương trình bên phải ta dễ dàng thấy được ý nghĩa của từng giá trị khi thay bằng định danh. Ngoài ra khi cần thay đổi giá trị của MAXN, MAXNUM thì chỉ cần thay một lần trong phần định nghĩa. - Các biến không nên sử dụng lại với nhiều ý nghĩa khác nhau trong cùng một hàm để tránh sự nhầm lẫn. - Viết chú thích cho chương trình: Biến, hàm khi định nghĩa nên viết chú thích ý nghĩa và chức năng rõ ràng. Đôi khi các đoạn lệnh thực thi cũng cần giải thích nếu chúng quá phức tạp. Nên viết chú thích ngắn gọn nhưng đầy đủ và dễ hiểu. Ví dụ: Var iCount : Integer; // đếm số cách thực hiện Procedure Try( i : Integer); // Tìm từ i Tuy nhiên không phải bất cứ lệnh nào cũng chú thích, việc chú thích tràn lan ngay cả với câu lệnh đơn giản không có ý nghĩa gì mà còn làm chương trình khó nhìn hơn. - Nên viết biểu thức điều kiện mang tính tự nhiên: Biểu thức nên viết dưới dạng khẳng định, việc viết dưới dạng phủ định sẽ làm khó hiểu. Ví dụ: Không nên Nên If not(a mod 50) then . If a mod 5 = 0 then . Qui tắc khai báo tên tệp dữ liệu dùng trong chương trình. Dùng tệp nên khai báo tên têp trước trong phần khai báo hằng: Ví du: Const Fi=’BAI1.INP’; Fo=’BAI1.OUT’ ; 2.3.4. Tối ưu sự thực thi mã nguồn - Mục đích của việc tối ưu mã nguồn là nâng cao tốc độ xử lý và hạn chế không gian bộ nhớ mà chương trình chiếm dụng. Thông thường có thể mâu thuẫn giữa tốc độ và không gian lưu trữ, do đó tùy theo điều kiện cụ thể mà người lập trình có sự lựa chọn thích hợp. Một số thủ thuật sau có thể giúp người lập trình hình thành nên phong cách lập trình tốt. - Lưu tạm giá trị thường sử dụng: Nếu một biểu thức tính toán được dùng nhiều lần thì nên tính kết quả một lần rồi lưu vào một biến và dùng lại. Ví dụ: Không nên Nên F:=sqrt(x*x+y*y)+(sqrt(x*x+y*y)*sqrt(x*y)-sqrt(y*y); x2 := x*x; y2 := y*y; p := sqrt(x2 + y2); F := p + (q * sqrt(x2) – sqrt(y2)); If b * b – 4 * a * c >0 then Begin x1 := (-b +sqrt( b * b – 4 * a * c)) / (2 * a); x2 := (-b – sqrt(b * b – 4 * a * c)) / (2 * a); end; Delta := b * b – 4 * a * c If delta >0 then Begin Delta:=sqrt(delta); x1 := (-b + delta) / (2 * a); x2 := (-b – delta) / (2 * a); end; - Thay thế một biểu thức bằng một biểu thức tương đương, lợi về thực thi: bkt := true; For i := 2 to n do If n mod i = 0 then bkt := False; bkt := true; For i := 2 to n do If n mod i = 0 then Begin bkt := False; Break; End; Ví dụ: Thay thế các phép nhân chia bằng phép dịch chuyển bit vì các phép xử lý bit tốc độ nhanh hơn các phép xử lý khác. Không nên nên For i := 1 to n do s:=s*2; s shl n; - Dùng số nguyên thay cho số thực: Do việc xử lý số thực chậm hơn xử lý số nguyên nên ta có thể dùng số nguyên thay cho số thực có phần lẻ nhỏ. Vì dụ: Điểm trung bình của học sinh là số thực ta có thể thay bằng số nguyên: DTB là 7.85 thì lưu số nguyên là 785, khi xuất ra thì chia cho 100. - Thoát khỏi vòng lặp khi sớm nhất: Một số trường hợp không cần thiết phải lặp hết toàn bộ mà đã đạt được mục đích thì có thể thoát khỏi vòng lặp. Ví dụ: Hạn chế sử dụng câu lệnh rẽ nhánh: Lệnh rẽ nhánh làm chậm chương trình do ngắt luồng thực thi. Ví dụ: Không nên Nên If x > y then d:=True else d:= False; d := x>y; - Tránh lãng phí bộ nhớ: Bằng cách sử dụng kiểu dữ liệu nhỏ nhất đủ để lưu trữ. Việc sử dụng tài nguyên nhiều hơn mức đòi hỏi của chương trình là một thói quen xấu mà người lập trình hay mắc phải. Hơn nữa tốc độ chương trình sẽ nhanh hơn khi sử dụng kiểu dữ liệu nhỏ hơn. - Khai báo biến cục bộ trong phạm vi gần nhất: Khai báo biến cục bộ gần với điểm sử dụng nhất. Việc khai báo ở phạm vi rộng hơn chỉ làm lãng
Tài liệu đính kèm:
- skkn_ren_luyen_ky_nang_lap_trinh_hieu_qua_cho_hoc_sinh_truon.doc