SKKN Một số kinh nghiệm giúp học sinh dễ dàng hiểu và biết cách xây dựng thuật toán khi dạy bài “Bài toán thuật toán”- Tin học 10

SKKN Một số kinh nghiệm giúp học sinh dễ dàng hiểu và biết cách xây dựng thuật toán khi dạy bài “Bài toán thuật toán”- Tin học 10

Việc đổi mới trong giáo dục đang là vấn đề nóng bỏng và cấp thiết hiện nay. Chương trình giáo dục phổ thông nước ta đang trong giai đoạn chuyển từ chương trình giáo dục tiếp cận nội dung sang tiếp cận năng lực của người học. “Trước bối cảnh đó và để chuẩn bị cho quá trình đổi mới chương trình, sách giáo khoa giáo dục phổ thông, chúng ta cần thiết phải đổi mới đồng bộ phương pháp dạy học và kiểm tra đánh giá kết quả giáo dục theo định hướng phát triển năng lực người học”[1]. Do vậy việc nghiên cứu, áp dụng phương pháp dạy học tích cực định hướng hình thành năng lực học sinh vào dạy học để nâng cao chất lượng là hết sức quan trọng và cần thiết.

Phần bài toán và thuật toán là một phần học có thể nói là khó. Các kiến thức trong phần học này góp phần phát triển khả năng tư duy khi giải quyết các vấn đề trong khoa học cũng như trong cuộc sống; hình thành một số kĩ năng chuẩn bị cho việc tiếp thu học ngôn ngữ lập trình như cách dùng biến, khởi tạo các giá trị biến Nếu cứ dạy theo những phương pháp thông thường thì học sinh sẽ học vẹt một cách máy móc và không hiểu sâu thuật toán hoạt động như thế nào dẫn đến việc chuyển hóa thuật toán để viết trên một ngôn ngữ lập là rất khó thực hiện được. Chính vì vậy, cần đưa ra một cách dạy để có thể vừa hiểu thuật toán, vừa biết cách xây dựng thuật toán là rất cần thiết. Phương pháp đó không chỉ thực hiện ở một thuật toán này mà có thể áp dụng vào các thuật toán khác, có như vậy học sinh mới có thể hình thành và phát triển được tư duy thuật toán.

Sau nhiều năm trực tiếp giảng dạy học sinh khối 10, tôi đã luôn trăn trở quan tâm, học hỏi để tìm ra một cách dạy tốt nhất phần thuật toán. Do vậy, tôi đã lựa chọn đề tài: “Một số kinh nghiệm giúp học sinh dễ dàng hiểu và biết cách xây dựng thuật toán khi dạy bài “Bài toán thuật toán”- Tin học 10” làm đề tài sáng kiến kinh nghiệm của mình. Với những kinh nghiệm của bản thân, tôi hy vọng sẽ giúp học sinh chủ động hơn trong học tập, hiểu bài hơn và hứng thú hơn đối với bộ môn Tin học.

 

doc 20 trang thuychi01 11022
Bạn đang xem tài liệu "SKKN Một số kinh nghiệm giúp học sinh dễ dàng hiểu và biết cách xây dựng thuật toán khi dạy bài “Bài toán thuật toán”- Tin học 10", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
I. MỞ ĐẦU
1. Lí do chọn đề tài
Việc đổi mới trong giáo dục đang là vấn đề nóng bỏng và cấp thiết hiện nay. Chương trình giáo dục phổ thông nước ta đang trong giai đoạn chuyển từ chương trình giáo dục tiếp cận nội dung sang tiếp cận năng lực của người học. “Trước bối cảnh đó và để chuẩn bị cho quá trình đổi mới chương trình, sách giáo khoa giáo dục phổ thông, chúng ta cần thiết phải đổi mới đồng bộ phương pháp dạy học và kiểm tra đánh giá kết quả giáo dục theo định hướng phát triển năng lực người học”[1]. Do vậy việc nghiên cứu, áp dụng phương pháp dạy học tích cực định hướng hình thành năng lực học sinh vào dạy học để nâng cao chất lượng là hết sức quan trọng và cần thiết. 
Phần bài toán và thuật toán là một phần học có thể nói là khó. Các kiến thức trong phần học này góp phần phát triển khả năng tư duy khi giải quyết các vấn đề trong khoa học cũng như trong cuộc sống; hình thành một số kĩ năng chuẩn bị cho việc tiếp thu học ngôn ngữ lập trình như cách dùng biến, khởi tạo các giá trị biến Nếu cứ dạy theo những phương pháp thông thường thì học sinh sẽ học vẹt một cách máy móc và không hiểu sâu thuật toán hoạt động như thế nào dẫn đến việc chuyển hóa thuật toán để viết trên một ngôn ngữ lập là rất khó thực hiện được. Chính vì vậy, cần đưa ra một cách dạy để có thể vừa hiểu thuật toán, vừa biết cách xây dựng thuật toán là rất cần thiết. Phương pháp đó không chỉ thực hiện ở một thuật toán này mà có thể áp dụng vào các thuật toán khác, có như vậy học sinh mới có thể hình thành và phát triển được tư duy thuật toán.
Sau nhiều năm trực tiếp giảng dạy học sinh khối 10, tôi đã luôn trăn trở quan tâm, học hỏi để tìm ra một cách dạy tốt nhất phần thuật toán. Do vậy, tôi đã lựa chọn đề tài: “Một số kinh nghiệm giúp học sinh dễ dàng hiểu và biết cách xây dựng thuật toán khi dạy bài “Bài toán thuật toán”- Tin học 10” làm đề tài sáng kiến kinh nghiệm của mình. Với những kinh nghiệm của bản thân, tôi hy vọng sẽ giúp học sinh chủ động hơn trong học tập, hiểu bài hơn và hứng thú hơn đối với bộ môn Tin học.
2. Mục đích nghiên cứu
	Tôi thực hiện đề tài này để giúp các em học sinh lớp 10 dễ dàng hiểu thuật toán và từ đó có thể xây dựng được các thuật toán để giải được các bài toán quen thuộc gần gũi trong học tập cũng như trong cuộc sống. Từ đó các em hình thành được tư duy thuật toán; giúp các em học tốt hơn phần ngôn ngữ lập trình ở lớp 11. Và mục đích cuối cùng là để góp phần nâng cao chất lượng giảng dạy và học tập tại trường THPT Cẩm Thủy 1 nói riêng và của ngành giáo dục nói chung.
3. Đối tượng nghiên cứu
	Học sinh khối 10 ở các lớp 10A2, 10A4, 10A6, 10A9, 10A11 năm học 2017-2018; các lớp 10A1, 10A2, 10A3, 10A4, 10A10, 10A11 năm học 2018-2019 và các lớp 11A2, 11A4, 11A6, 11A9, 11A11 năm học 2018-2019 ở trường THPT Cẩm Thủy 1.
Trong phạm vi đề tài này, tôi tập trung nghiên cứu nội dung bài 4 “ Bài toán thuật toán” Tin học 10, kỹ thuật tinh chế từng bước, cách mô phỏng thuật toán bằng những ví dụ cụ thể, thực tế... nhằm tìm ra một cách thức truyền đạt nội dung bài học, cũng như cách tổ chức các hoạt động dạy và học giúp học sinh chủ động tiếp thu kiến thức và vận dụng kiến thức một cách dễ dàng nhất để nâng cao chất lượng dạy và học.
4. Phương pháp nghiên cứu
Nghiên cứu lí luận: Nghiên cứu kỹ thuật tinh chế từng bước trong khi xây dựng thuật toán, kỹ thuật mô phỏng thuật toán.
Nghiên cứu thực tiễn: Khảo sát năng lực học sinh khi học bài toán và thuật toán ở lớp 10 và khả năng vận dụng để xây dựng thuật toán khi học lập trình ở lớp 11.
Thực nghiệm sư phạm: Tiến hành thực nghiệm trên những đối tượng học sinh cụ thể nhằm đánh giá hiệu quả của đề tài. 
II. NỘI DUNG
1. Cơ sở lí luận
	Thuật toán là phần quan trong bậc nhất để tạo nên một chương trình. 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 trước khi bắt đầu học lập trình là một yêu cầu thiết yếu. 	
	Tôi đưa ra một cách dạy thuật toán mà tôi đã đúc kết và tổng hợp được trong quá trình dạy học của mình như sau:
B1. Xác định bài toán
	Việc xác định bài toán không đơn giản là chỉ ra được input/output của bài toán một cách chung chung mà phải hiểu và xác định được các đối tượng hằng, biến cụ thể có trong bài toán, phân tích để tìm ra ý đồ cần đạt được kết quả của bài toán. Để truyền đạt kiến thức này, GV có thể vận dụng các cách khác nhau như: tự xác định và giải thích; yêu cầu HS xác định và bổ sung qua các ý kiến của HS khác trong lớp; GV dẫn dắt, định hướng cho HS xác định từ tổng quan đến cụ thể, chi tiết hơn.
B2. Nêu ý tưởng thuật toán 
GV định hướng để đưa ra ý tưởng bằng lời nói cách giải quyết bài toán dựa vào các input sẵn có, phân tích input, thực hiện một số thao tác nhất định trên bộ input đó để tìm ra output của bài toán. Việc làm này nhằm giúp HS nắm bắt và hiểu được ý đồ giải để xác định hướng xây dựng thuật toán giải bài toán đó. Việc này được xem là quan trọng đối với HS vì nó là tiền đề cho các nội dung dạy học tiếp theo. Hiệu quả học tập của HS ở phần thuật toán này phụ thuộc khác nhiều vào việc HS có hiểu được ý tưởng thuật toán hay không vì nếu hiểu HS sẽ có thêm động lực, thêm sự hăng say, thích thú với việc tiếp thu môn học, còn ngược lại sẽ dẫn đến sự chán nản, lười học kéo theo không đạt được mục tiêu dạy học. Với PPDH truyền thống, GV hay tiếp cận dạy học bằng cách nêu ý tưởng sẵn có trong SGK và giải thích ý nghĩa của nó, cách làm này vẫn hướng đến được mục tiêu cuối cùng của bài học tuy nhiên rất dễ gây ra sự nhàm chán, mệt mỏi cho HS (đặc biệt đối với HS yếu, kém) vì các em học tập thụ động, chỉ lắng nghe và tiếp nhận, đôi khi là chấp nhận kiến thức đó cho dù có hiểu hay không. Do đó, GV cần tổ chức dạy học mục này thông qua vận dụng các PPDH tích cực khác nhau ở mỗi tình huống cụ thể nhằm phát huy tính tích cực tư duy, tạo hứng thú cho Hs tiếp thu: 
- Tổ chức cho HS tham gia các trò chơi thực tế mà nội dung thể hiện gần với nội dung bài học giúp HS có sự liên tưởng gần hơn đến ý tưởng thuật toán;
- Đặt ra các tình huống có vấn đề để HS động não, phân tích, suy luận và hình thành tri thức; 
- Tổ chức cho HS học tập hợp tác theo nhóm để trao đổi thông tin, tổng hợp, nảy sinh ý tưởng, trình bày trước lớp để đối chiếu, so sánh;
B3. Xây dựng thuật toán
Ở phần này GV phải tổ chức cho HS tiếp cận được việc mô tả từng bước các thao tác của thuật toán sao cho HS có thể hiểu được, viết được thuật toán như trong SGK (theo các cách khác nhau và hình thức diễn đạt khác nhau), hơn nữa HS có thể giải thích được thuật toán cho bạn mình hiểu. Một trong những phương pháp dạy thuật toán hữu hiệu là tinh chế “làm mịn” dần. Mục tiêu của dạy học thuật toán bằng kĩ thuật tinh chế là giúp học sinh hiểu được thuật toán dễ dàng hơn và hiểu được con đường xây dựng thuật toán; tạo cơ hội thuận lợi để giáo viên rèn luyện và bồi dưỡng cho học sinh cách suy nghĩ, hoạt động tư duy phân tích trong quá trình giải quyết vấn đề. Mấu chốt của phương pháp này là quá trình dẫn dắt học sinh phân tích một thuật toán thành các thuật toán con mà chúng có thể dễ dàng xây dựng và biểu diễn chi tiết. Do đó, quá trình dạy học thuật toán bằng cách “làm mịn dần” có thể được tiến hành theo các bước sau đây:
1. Dẫn dắt HS hình thành thuật toán chính thể hiện ý tưởng thuật toán (có thể chưa cần chi tiết).
2. Dẫn dắt HS phân tích thuật toán chính để phát hiện những nhiệm vụ tương đối độc lập trong thuật toán chính. Từ đó tiếp nhận các thuật toán con tương ứng giải quyết từng nhiệm vụ đó.
3. Dẫn dắt HS tiếp tục phân tích các thuật toán con (nếu cần thiết) theo cách phân tích thuật toán chính.
4. Dẫn dắt HS lần lượt xây dựng và biểu diễn các thuật toán con này rồi tổng hợp thành thuật toán chung của bài toán ban đầu.
B4. Mô phỏng thuật toán trên những bộ dữ liệu cụ thể.
Một khó khăn nữa khi học thuật toán là việc hiểu thuật toán hoạt động như thế nào. Để học sinh nắm bắt và hiểu rõ được thuật toán thì học sinh đó phải mô phỏng được thuật toán trên những bộ dữ liệu khác nhau. Trong quá trình dạy học, giáo viên có thể sử dụng các chương trình mô phỏng đã có sẵn bằng flash hay soạn thảo các slide trên powpoint để mô phỏng thuật toán cho học sinh thấy được hoạt động của thuật toán như thế nào, cũng có thể mô phỏng thuật toán ngay trên bảng với nhiều bộ dữ liệu khác nhau. Sau đó giao bài tập cho học sinh mô phỏng thuật toán trên các bộ dữ liệu khác, đưa ra kết quả thực hiện thuật toán trên bộ dữ liệu đó theo hướng dẫn của giáo viên.
2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm	
Trong quá trình dạy học tôi đã tìm hiểu những vướng mắc khó khăn của học sinh khi học phần bài toán và thuật toán. Phần nhiều học sinh chưa được học tin học ở cấp 2, số còn lại được học tin học nhưng học theo chương trình tự chọn nên hầu như các em lên lớp 10 chưa nắm được kiến thức tin học cơ bản. Một bộ phận học sinh thì cho rằng học tin học có nghĩa là chơi máy tính. Các em rất hào hứng, chờ đợi được học tin để chơi máy tính. Nhưng khi học tin học lớp 10 ở ngay những bài đầu đã đòi hỏi các em phải nắm bắt nhiều khái niệm, kiến thức khô khan nhất là phần thuật toán. Thêm vào đó thời lượng các giờ thực hành lại ít và có được lên thực phòng thực hành thì cũng không được chơi nên các em cảm thấy chán nản, không hứng thú. 
Qua thực tế giảng dạy của bản thân và dự giờ của đồng nghiệp tại trường THPT Cẩm Thủy 1, tôi thấy khi học Tin học 11, học sinh gặp rất nhiều khó khăn khi xây dựng thuật toán. Các thuật toán đã được dạy ở lớp 10 các em đã quên gần như hết. Việc này gây ra nhiều khó khăn vất vả cho giáo viên khi dạy về ngôn ngữ lập trình. Năm học 2017-2018, tôi dạy 5 lớp 10. Trong quá trình dạy học tôi đã dạy rất kỹ lưỡng và cẩn thận phần bài toán và thuật toán. Khi đó tôi cũng có đánh giá sự tiếp thu của HS và nhận được kết quả cũng không tồi lắm. Nhưng sang đến năm học này khi các em lên lớp 11 thì hầu như tôi phải dạy lại toàn bộ các thuật toán tìm kiếm và sắp xếp bởi rất nhiều em không nhớ gì.Việc giáo viên bắt học sinh ghi nhớ thụ động các nội dung, khái niệm trong sách giáo khoa là rất khó nếu các em không thực sự hiểu bài. Có thể các em hiểu và nhớ kiến thức ngay lúc học nhưng đến lúc kiểm tra thì lại quên hết. Hoặc học sinh có chăm chỉ ghi nhớ thì vẫn bị lẫn lộn các nội dung kiến thức và khả năng vận dụng còn hạn chế.
3. Các giải pháp đã sử dụng để giải quyết vấn đề
	Khi dạy bài “Bài toán thuật toán” Tin học 10, đầu tiên tôi dạy học sinh khái niệm bài toán trong tin học. Nhấn mạnh cho học sinh điểm khác biệt ở đây là trong tin học ta sử dụng máy tính để giải toán. Mà máy tính là một thiết bị xử lý thông tin nên ta cần quan tâm đến 2 yếu tố: đưa vào máy tính thông tin gì và cần máy tính đưa ra thông tin gì (sau khi đã xử lý). Từ đó dạy học sinh cách xác định và phát biểu bài toán trong tin học (chỉ ra input và output). Chú ý trong khi xác định bài toán cần phân tích chỉ ra các đối tượng hằng, biến cần có trong bài toán. 
Sau đó tôi dạy cho học sinh khái niệm thuật toán và chỉ ra luôn các tính chất của thuật toán thông qua các ví dụ. Một dãy các thao tác mà vi phạm một trong các tính chất này thì không được coi là một thuật toán. Chẳng hạn như dãy thao tác:
B1. Xóa bảng
B2. Vẽ đường tròn
B3. Quay lại B1
không được xem là một thuật toán vì nó vi phạm tính dừng. Hay dãy thao tác mà đưa ra kết quả sai cũng không được chấp nhận vì nó không thỏa mãn tính đúng đắn. Dãy thao tác mà không có tính xác định cũng tương tự như vậy vì có sự nhập nhằng trong các thao tác thì máy tính không biết thực hiện thao tác nào. Vì bản chất của máy tính vẫn chỉ là một cái máy, không thể tự tư duy được mà chỉ thực hiện một cách tự động các chương trình được con người lập trình sẵn.
	Tiếp theo, tôi dạy cho học sinh hai cách biểu diễn thuật toán: liệt kê từng bước và sử dụng sơ đồ khối thông qua các ví dụ cụ thể, đơn giản và gần gũi nhất. Vì đây là lần đầu tiên học sinh được làm quen với thuật toán cũng như cách xây dựng thuật toán nên tôi đưa ra những ví dụ rất dễ để em nào cũng có thể xác định được bài toán và xây dựng được thuật toán giải bào toán đó. Sau đó các ví dụ sẽ tăng dần mức độ khó lên.
VD1: Tính tổng của 2 số nguyên.
* Xác định bài toán:
Ban đầu tôi gợi ý cho HS phát biểu bằng lời: “Cần nhập vào máy tính thông tin gì?” HS dễ dàng trả lời là 2 số nguyên. “Cần lấy thông tin gì ra từ máy tính?” HS cũng dễ dàng xác định được đó là tổng 2 số nguyên vừa nhập. Từ đó dạy luôn cho học sinh xác định và đặt tên biến cần cho bài toán:
Input: 2 số nguyên a và b
Output: Số nguyên t là tổng của a và b.
(Đây là những bước ban đầu để học sinh xác định cấu trúc dữ liệu của bài toán, cũng là một phần vô cùng quan trọng trong việc học lập trình sau này)
* Ý tưởng:
	Bài toán đưa ra tưởng chừng rất đơn giản nhưng không phải HS nào cũng bắt tay xây dựng ngay được thuật toán. Bởi vì các em không biết phải viết như thế nào. Do vậy tôi phải hướng dẫn cặn kẽ chi tiết: Muốn máy tính tính được tổng của 2 số nguyên thì phải cho máy tính biết đó là 2 số nguyên nào. Do vậy bước đầu tiên của mọi thuật toán đều là bước nhập dữ liệu vào. Phải có thông tin vào thì máy tính mới xử lý để có được kết quả. Khi máy tính đã xử lý, tính toán ra được kết quả rồi thì muốn cho con người biết được kết quả đó, nó phải thông báo ra cho người dùng.
* Thuật toán:
	Với sự hướng dẫn của giáo viên thì hầu hết HS đều có thể viết được thuật toán bằng cả 2 cách liệt kê từng bước và sơ đồ khối:
Nhập a,b
 t ←a +b
Thông báo t rồi kết thúc
Bước 1: Nhập a, b ;
Bước 2: T ← a+b ;
Bước 3 : Đưa ra t, rồi kết thúc ;
* Mô phỏng:
- Khi nhập vào máy tính 2 số: 5 và 7. Máy tính xử lý rồi thông báo kết qủa là 12.
- Khi nhập vào máy tính 2: số -3 và 3. Máy tính xử lý rồi thông báo kết qủa là 0.
VD2: Tìm số lớn trong hai số a và b. (Mục đích dạy cho HS thao tác rẽ nhánh khi xây dựng thuật toán)
* Xác định bài toán:
Input: hai số a và b
Output: số lớn hơn trong 2 số a và b.
* Ý tưởng:
	GV hỏi HS rằng sau khi nhập vào máy tính 2 số a,b muốn thông báo ra ngoài số lớn hơn trong 2 số đó thì có thể xảy ra mấy trường hợp? HS dễ dàng trả lời được câu hỏi này đó là 3 trường hợp: a>b, a<b và a=b. Mỗi lần nhập dữ liệu cụ thể thì có mấy trường hợp xảy ra? HS trả lời là chỉ xảy ra 1 trong 3 trường hợp đó. Với mỗi trường hợp xảy ra đó thì máy tính sẽ xử lý như thế nào?
Nếu a>b thì máy tính sẽ thông báo số lớn là a
Nếu a<b thì máy tính sẽ thông báo số lớn là b
Nếu a=b thì máy tính sẽ thông báo là hai số bằng nhau.
Nhập a, b
 a > b
Số lớn là a và kết thúc
 a < b
Số lớn là b và kết thúc
Hai số bằng nhau và kết thúc
Đ
Đ
S
S
* Thuật toán:
Bước 1: Nhập a, b.
Bước 2: Nếu a>b thì thông báo số lớn là a và kết thúc.
Bước 3: Nếu a<b thì thông báo số lớn là b và kết thúc.
Bước 4: Thông báo hai số bằng nhau và kết thúc.
* Mô phỏng:
- Khi nhập vào máy tính 2 số: 5 và 7. Máy tính xử lý rồi thông báo kết qủa là 7.
- Khi nhập vào máy tính 2 số: 3 và -3. Máy tính xử lý rồi thông báo kết qủa là 3.
- Khi nhập vào máy tính 2 số: 10 và 10. Máy tính xử lý rồi thông báo kết qủa là hai số bằng nhau.
VD3: Tìm giá trị lớn nhất của một dãy số nguyên (Mục đích dạy cho HS thao tác lặp khi xây dựng thuật toán)
* Xác định bài toán: 
Input: Số nguyên dương N và dãy số nguyên a1, a2, .. an
Output: 	max – Giá trị lớn nhất của dãy số nguyên.
* Ý tưởng:
GV chuẩn bị trước một số miếng giấy trên đó ghi các số nguyên đại diện cho a1, a2,..., aN. Sau đó bỏ vào các hộp theo thứ tự nhất định, yêu cầu HS suy nghĩ để tìm ra miếng giấy chứa giá trị lớn nhất (Max). HS có thể suy nghĩ theo nhiều cách khác nhau để đưa ra cách tìm Max. GV gọi một em HS lên thao tác trực tiếp với các miếng giấy trong các hộp và mô tả quá trình thực hiện, các em bên dưới quan sát quá trình bạn mình làm. Lưu ý trong quá trình thực hiện sẽ nảy sinh các tình huống khác nhau, GV cần hướng HS đến cách thực hiện công việc hợp lý nhất để dẫn dắt vào nội dung bài học (tức là HS phải thực hiện việc xem các con số trong các miếng giấy lần lượt tuần tự từ trái sang phải và ghi nhớ lại giá trị lớn nhất trong đầu nhằm kết luận giá trị Max khi không còn miếng giấy nào cần phải xem). Để tiết kiệm hơn về thời gian, GV có thể tổ chức trò chơi bằng cách đọc chậm lần lượt từng số ngẫu nhiên một, sau đó cho HS xác định số lớn nhất trong các số vừa đọc rồi yêu cầu các em giải thích vì sao chọn được kết quả mong muốn.
Sau đó GV cho HS phát biểu ý tưởng của thuật toán
Khởi tạo trị max = a1
Lần lượt với i từ 2 đến N, so sánh giá trị số hạng ai với giá trị max, nếu ai > max thì max nhận giá trị mới là ai.
* Thuật toán:
Sau khi làm rõ ý tưởng của thuật toán, GV cho HS thảo luận theo nhóm để đưa ra hướng giải quyết bài toán, GV gợi ý thuật toán ở mức độ tổng quát (có thể bằng cách đưa ra ví dụ trong thực tế), yêu cầu các nhóm xác định các bước cơ bản nhất có thể làm được ngay. HS xây dựng phiên bản mô tả ban đầu của thuật toán như sau:
B1. Nhập số nguyên dương N và dãy N số nguyên a1, a2,..., aN.
B2. Cho Max ß a1.
B3. So sánh lần lượt giá trị Max với giá trị số hạng ai nếu ai > max thì max nhận giá trị mới là ai.
B4. Thông báo Max.
Trong mô tả trên GV hướng dẫn học sinh là xem xét những thao tác nào là dễ hiểu, có thể thực hiện được ngay mà không phần phải phân tích thêm. Dễ thấy, các bước B1, B2, B4 rơi vào trường hợp này. Chỉ có bước B3 là cần phải được chia nhỏ thêm. Việc yêu cầu HS nhận xét như vậy nhằm xác định cho HS các mục tiêu cần hướng đến để dần dần giải quyết bài toán dễ dàng hơn. Theo ý tưởng đưa ra ban đầu, ta sẽ thực hiện việc so sánh lần lượt Max với a2,..., aN . Công việc của bước B3 có thể được làm mịn hơn như sau:
	So sánh Max với a2, nếu Max < a2 thì gán Max ß a2 
	So sánh Max với a3, nếu Max < a3 thì gán Max ß a3 
	..........................................................
	So sánh Max với aN, nếu Max < aN thì gán Max ß aN 
Ta thấy các thao tác trên có sự lặp đi lặp lại nên hướng dẫn HS thực hiện thu gọn việc diễn đạt trên bằng sử dụng biến chỉ số tổng quát i bắt đầu bằng 2 cho đến N
B3. Cho i đi từ 2 đến N, ứng với mỗi giá trị của i, so sánh Max với ai, nếu Max < ai thì gán Max ß ai
TH1. Nếu dãy số đã cho ban đầu chỉ có một phần tử (tức N = 1) thì bài toán giải quyết thế nào? 
HS suy nghĩ, trả lời và giải thích: phần tử duy nhất đó là phần tử có giá trị Max. Khi đó, nếu cho i = 2 (tức i > N) sẽ không tồn tại phần tử ai để thực hiện việc so sánh nên kết thúc B3.
TH2. Nếu N = 2, thuật toán kết thúc việc so sánh khi nào? 
HS trả lởi: ta thực hiện được việc so sánh Max với a2 khi i = 2, B3 sẽ kết thúc khi i = 3.
	Tổng quát với một dãy có N phần tử thì thuật toán sẽ dừng phần so sánh Max với các ai khi i > N
	Ở đây, GV nên tổ chức cho HS thảo luận theo nhóm dưới hình thức trao đổi ý kiến, tranh luận hoặc sử dụng kỹ thuật “khăn trải bàn” cho mỗi nhóm 4 HS (các nhóm được chia đồng đều các đối tượng HS). Mỗi HS tự viết phần phân tích bước B3, thảo luận, viết phiên bản chung đã được thống nhất trong nhóm và trình bày trước lớp.
	Bước 3 của thuật toán được hướng đến cuối cùng có thể sẽ là:
B3.1 Đặt i = 2
B3.2 Kiểm tra i với N, nếu i > N thì chuyển sang B4
B3.3 Nếu i < N, so sánh Max với ai, nếu Max < ai thì gán Max ß ai 
B3.4 Tăng i lên 1 rồi quay lại B3.2
	Ở đây cần lưu ý việc tăng giá trị của i lên 1 ở bước B3.4 nhằm hướng đến kiểm tra phần tử tiếp theo của dãy số.
	Thuật toán hoàn chỉnh giải bài toán tìm giá trị lớn nhất của dãy số cho trước như sau:
B1. Nhập số nguyên dương N và dãy N số nguyên a1, a2,..., aN.
B2. Cho Max ß a1.
B3. So sánh lần lượt giá trị Max với các số còn lại để tìm Max.
B3.1 Đặt i = 2
B3.2 Kiểm tra i với N, nếu i > N thì chuyển sang B4
B3.3 Nếu i < N, so sánh Max với ai, nếu Max < ai thì gán Max ß ai 
B3.4 Tăng i lên 1 rồi quay lại B3.2
B4. Kết luận Max.
	Sau đó GV gọi 1 HS lên bảng trình bày thuật toán bằng sơ đồ khối.
* Mô phỏng:
	Tôi làm các slide để mô phỏng thuật toán với bộ giá trị N=5; a1=5; a2=1; a3=4; a4=7; a5=6 như sau:
Tệp chương trình mô phỏng: Chương trình mô phỏn

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

  • docskkn_mot_so_kinh_nghiem_giup_hoc_sinh_de_dang_hieu_va_biet_c.doc
  • exesap xep trao doi.exe
  • ppsxSapxep.ppsx
  • exetim kiem nhi phan.exe
  • exetim max.exe
  • ppsxTimKiemTT.ppsx
  • exetimkiemtuantu.exe
  • ppsxTimMax.ppsx