Sáng kiến kinh nghiệm của cô giáo Nguyễn Thị Tuân - Trường THPT Ba Vì (Hà Nội) “Một số cải tiến về phương pháp giải bài toán trên máy tính” có thể giúp các học sinh khối 11 thực hiện giải các bài toán trên máy tính, hạn chế sai sót cũng như tăng tính hiệu quả, tính đúng đắn của bài toán.
Xác định Input và Output của bài toán
Mỗi bài toán được đặc tả bởi hai thành phần: Input và Output, việc xác định bài toán chính là xác định rõ hai thành phần này và mỗi quan hệ giữa chúng.
Các thông tin đó cần được nghiên cứu cẩn thận để có thể lựa chọn thuật toán, cách thể hiện các đại lượng đã cho, các đại lượng phát sinh trong quá trình giải bài toán và ngôn ngữ lập trình thích hợp.
Việc định hướng cho học sinh xác định được Input và Output của bài toán là bước hết sức quan trọng.
Vì thông qua việc xác định hai thành phần này giáo viên cũng nên yêu cầu học sinh xác định luôn số lượng biến và kiểu dữ liệu cần sử dụng trong bài toán khi lập trình, cũng như các biến cần sử dụng phát sinh trong quá trình thực hiện bài toán.
Đây là vấn đề học sinh hầu như chưa bao giờ thực hiện nên gặp rất nhiều khó khăn khi khai báo biến cho chương trình.
Có thể hiểu đơn giản: Input chính là dữ liệu đầu vào của bài toán (giả thiết); Output là dữ liệu đầu ra của bài toán (kết luận).
Xác định bài toán chính là khâu giúp học sinh biết được bài toán cho cái gì? Và cần tìn cái gì? để từ đó khai báo các biến trong chương trình.
Thiết kế thuật toán
Có thể nói khi lập trình giải một bài toán trên máy tính thì đây là bước quan trọng nhất. Mỗi thuật toán chỉ giải một bài toán nào đó, nhưng có thể có nhiều thuật toán khác nhau cùng giải một bài toán vì vậy cần thiết kế hoặc chọn một thuật toán tối ưu để giải bài toán.
Khi thực hiện thiết kế hoặc lựa chọn thuật toán người lập trình thường quan tâm đến các tài nguyên như: thời gian thực hiện chương trình (chương trình thực hiện nhanh hay chậm), số lượng ô nhớ (chương trình chiếm dụng bao nhiêu bộ nhớ trên máy tính)…
Trong các loại tài nguyên thì thường người ta quan tâm nhiều nhất đến tài nguyên thời gian vì đó là dạng tài nguyên không tái tạo được.
Khi thiết kế thuật toán để giải một bài toán cụ thể cần căn cứ vào lượng tài nguyên mà thuật toán đòi hỏi và lượng tài nguyên thực tế cho phép.
Để mô tả được thuật toán trước tiên học sinh phải đưa ra được ý tưởng của thuật toán, rồi mới mô tả, thiết kế thuật toán theo ý tưởng đó. Trong khi mô tả thuật toán cần chú ý về áp dụng số lượng biến cho chương trình.
Khâu lựa chon và thiết kế thuật toán là khâu rât quan trọng. Một bài toán có thể có nhiều thuật toán để giải do đó phải biết lựa chọn thuật toán tối ưu để áp dụng cho bài toán.
Thuật toán tối ưu là thuật toán phải đáp ứng được các tiêu chí như: thời gian chạy chương trình, chiếm dụng bộ nhớ của chương trình, rõ ràng, dễ hiểu… thuật toán nào thời gian chạy chương trình nhanh nhất và chiếm dụng ít bộ nhớ trên máy tính nhất đồng thời đảm bảo tính đúng đắn của bài toán, phù hợp với chương trình thì đó là thuật toán tối ưu.
Thuật toán phải có tính khả dụng và có hướng phát triển với chương trình lớn hơn. Nhưng thông thường học sinh không lựa chọn thuật toán mà biết thuật toán nào thì làm, không tìm xem bài toán này có còn thuật toán nào tối ưu để giải cho phù hợp. vì vậy học sinh thường có những kết quả không mong muốn mặc dù chương trình vẫn chạy.
Viết chương trình
Việc viết chương trình là tổng hợp giữa việc lựa chọn cách tổ chức dữ liệu và sử dụng ngôn ngữ lập trình để diễn đạt đúng thuật toán.
Khi viết chương trình ta nên chọn một ngôn ngữ lập trình hoặc một phần mềm chuyên dụng với thuật toán. Viết chương trình trong ngôn ngữ nào thì cần phải tuân theo đúng qui định ngữ pháp của ngôn ngữ đó.
Chương trình dịch chỉ có thể phát hiện và thống báo các lỗi cú pháp, còn lỗi ngữ nghĩa thì được phát hiện khi thực hiện chương trình.
Khi viết chương trình cần chú ý về bố cục chương trình, trang trí trình bày chương trình phải gọn gàng tạo điều kiện thuận lợi cho quá trình sửa chữa và phát triển chương trình sau này.
Một thao tác quan trọng khi viết chương trình đó là các em phải lưu chương trình, học sinh rất hay quên thao tác này nên dẫn đến mất chương trình không khôi phục được.
Khâu viết chương trinh cũng là dùng ngôn ngữ lập trình để mô tả lại các thao tác của thuật toán, trong ngôn ngữ lập trình chúng ta có rất nhiều ngôn ngữ lập trình khác nhau.
Nên phải chọn lựa ngôn ngữ lập trình sao cho phù hợp với thuật toán, với thuật toán tìm ƯCLN nên sử dụng ngôn ngữ lập trình Pascal để viết bởi đây là ngôn ngữ dể hiểu và thông dụng đối với học sinh khối 11.
Trong bước này học sinh thường mắc phải sai lầm như: các em chon ngôn ngữ rồi nhưng khi viết lại không tuân thủ quy tắc của ngôn ngữ đó hoặc là bỏ qua một số bước trong thuật toán. Chính vì thế mà khi chạy chương trình báo sai rất nhiều.
Chạy thử chương trình (Test)
Sau khi được viết xong, chương trình vẫn còn có thể có nhiều lỗi khác chưa phát hiện được (lỗi ngữ nghĩa) nên có thể không cho kết quả đúng.
Vì vậy, cần phải thử chương trình bằng cách thực hiện nó với một số bộ Input tiêu biểu phụ thuộc vào đặc thù của bài toán và bằng cách nào đó ta biết trước được Output.
Tức là khi ta đưa bộ Input để thử bài toán thì bộ Input đó ta có thể nhẩm tính hoặc tính nhanh được kết quả của bài toán rồi cho máy thực hiện chương trình với bộ Input đó để thử kết quả.
Quá trình này người ta gọi là chạy thử chương trình (Test). Nếu có sai sót, phải chỉnh sửa chương trình rồi thử lại, nếu kết quả thử nghiệm vẫn chưa đúng thì cho thấy thuật toán không phù hợp với bài toán, phải hiệu chỉnh lại.
Thực chất thao tác này chúng ta chạy thử chương trình bằng các bộ Input. Đây là bước rất quan trọng để kiểm định lại các thao tác mình làm đã chính xác chưa đặc biệt là về thuật toán.
Ngoài những việc như chỉnh sửa câu lệnh, thuật toán còn thao tác không kém phần quan trọng nữa là định dạng chương trình về thẩm mỹ cho đẹp mắt, cách bố trí nội dung của chương trình làm sao ngắn gọn tạo cảm giác gần gũi và thân thiện với người sử dụng.
Nếu kết quả chạy thử chương trình cho thấy ngôn ngữ lập trình hoặc thuật toán không phù hợp thì phải kiểm tra lại, đôi khi quá trình này có thể lặp đi lặp lại nhiều lần, thậm chí có những bài chúng ta phải thiết kế thuật toán lại.
Tổng kết bài toán
Đây là bước tổng hợp sau khi bài toán đã được giải thành công trên máy tính, sau mỗi bài ta nên có nhận xét và rút kinh nghiệm về bài toán đó như về thuật toán, về chương trình… để thấy rõ cái được và chưa được trong quá trình giải bài để giúp ích cho những bài toán sau cũng như hướng phát triển của chương trình.