Sáng kiến kinh nghiệm Phân bậc hệ thống bài tập xây dựng thuật toán giải bài toán trên máy tính - Vũ Thị Huệ
Mục lục
I. Mở đầu 1
1. Lý do chọn đề tài 1
2. Mục đích nghiên cứu 1
3. Đối tượng nghiên cứu 1
4. Phương pháp nghiên cứu 2
II. Nội dung sáng kiến kinh nghiệm 2
1. Cơ sở lý luận của vấn đề 2
2. Thực trạng của vấn đề trước khi áp dụng sáng kiến kinh nghiệm 2
3. Giải pháp và tổ chức thực hiện 3
4. Hiệu quả của đề tài nghiên cứu“ Phân bậc hệ thống bài tập xây dựng thuật toán giải bài toán trên máy tính” .17
III . Kết luận và đề xuất 17
1. Kết luận . . .17
2. Đề Xuất .18
ắm bắt hơn cả, các em khó hình dung ra công việc khi biến điều khiển tăng lên và thực hiện quá trình lặp, các ví dụ mà tôi đã đưa ra sát với các bài toán tìm kiếm, kiểm tra số như trong sách giáo khoa đã trình bầy, giúp cho các em nhanh chóng tiếp cận các bài toán điển hình theo chuẩn kiến thức, kỹ năng. Các em làm quen với dãy số lặp có quy luật và lặp không có quy luật. Biến điều khiển có thể tăng từ giá trị đầu đến giá trị cuối hoặc có thể giảm từ giá trị cuối đến giá trị đầu. Bài toán 1. Xây dựng thuật toán tính tổng của 5 số tự nhiên đầu tiên. Ý tưởng: Cộng lần lượt các số từ 0 đến 5, gán kết quả cho biến S. INPUT. Các số nguyên 0,1,2,3,4,5. OUTPUT. Tổng S. B1. Nhập N; B2. i←1, S←0; B3. Nếu i> 5 thì đưa ra S và kết thúc; B4. thì S ← S+ i; B5. Gán i←i+1 quay lại B3; Ví dụ mô tả quy trình thực hiện cho thuật toán trên B1. Nhập N=5; B2. i← 1, S← 0; B3. i=1<5; B4. S← S+i= 0+1=1; B5. i←i+1=1+1=2 quay lại B3; B3. i=2<5; B4. S←S+i=1+2=3; B5. i←i+1= 2+1=3 quay lại B3; B3. i=3<5; B4. S←S+i=3+3=6; B5. i←i+1=3+1=4 quay lại B3; B3. i=4<5; B4. S←S+i=6+4=10; B5. i←i+1=4+1=5 quay lại B3; B3. i=5; { chưa lớn hơn 5} B4. S←S+i=10+5=15; B5. i←i+1=5+1=6 quay lại B3; B3. i=6 >5 thuật toán kết thúc và đưa ra S=15; Bài toán 2. Xây dựng thuật toán tính tổng các phần tử có giá trị dương trong dãy số N phần tử a1, a2, a3,aN. Ý tưởng: So sánh lần lượt các phần tử trong dãy số với 0, nếu ai>0 thì cộng giá trị của ai vào tổng d INPUT: Số nguyên dương N và các a1, a2, a3,.aN. OUTPUT: Tổng các số dương trong dãy d. B1. Nhập N, a1, a2, a3,aN; B2. i← 1, d← 0; B3. Nếu i>N thì đưa ra d và kết thúc; B4. Nếu ai>0 thì d←d+ai; B5 i←i+1 quay lại B3; Ví dụ: Cho dãy số có N=5 các phần tử a1=6, a2 = -3, a3=45, a4=12, a5=-13 B1. Nhập N = 5 6 -3 45 12 -13 B2. i ← 1, d←0; B3. i=1<5; B4. a1=6>0, d←d+a1=0+6=6; B5. i←i+1=1+1=2 quay lại B3; B3. i=2<5; B4. a2= -3<0; { Không tính d} B5. i←i+1=2+1=3 quay lại B3; B3. i=3<5; B4. a3=45>0, d←d+a3=6+45=51; B5. i←i+1=3+1=4 quay lại B3; B3. i=4<5; B4. a4= 12>0, d←d+a4=51+12=63; B5. i←i+1=4+1=5 quay lại B3; B3. i=5;{ chưa lớn hơn 5} B4. a5=-13<0; {không tính d} B5. i←i+1=5+1=6 quay lại B3; B3. i=6>5 Thuật toán dừng lại và đưa ra tổng các phần tử có giá trị dương trong dãy đã cho là d= 63. Bài toán 3. Xây dựng thuật toán tìm vị trí các phần tử có giá trị dương trong dãy số N phần tử a1, a2, a3,aN. Ý tưởng: So sánh lần lượt các phần tử ai của dãy số với 0, nếu ai > 0 thì đưa ra i. INPUT: Số nguyên dương N và N số a1, a2, a3,aN. OUTPUT: Vị trí các số dương trong dãy số aN. B1. Nhập N, a1, a2, a3,aN; B2. i← 1; B3. Nếu i>N thì kết thúc; B4. Nếu ai > 0 thì đưa ra i; B5 i← i+1 quay lại B3; Ví dụ: Cho dãy số có 4 phần tử N=4, a1=-7, a2=12, a3= 56, a4=-43. Mô tả thuật toán cho dãy số trên B1. N=4, -7 12 56 -43; B2. i←1; B3. i =1<N=4; B4. a1= -7<0;{không đưa ra chỉ số i =1} B5. i←i+1=1+1=2 quay lại B3; B3. i =2<N=4; B4. a2=12>0 Hiển thị i =2; B5. i←i+1=2+1=3 quay lại B3; B3. i=3<4; B4. a3=56>0 Hiển thị i=3; B5. i←i+1=3+1=4 quay lại B3; B3. i=4 ;{ i chưa nhỏ hơn 4} B4. a4= -43<0; { không đưa ra chỉ số i=4} B5. i←i+1=4+1=5 quay lại B3; B3. i=5>4 Thuật toán dừng lại. Hiển thị kết quả 2 3; Bài toán 4. Xây dựng thuật toán đếm các số âm trong dãy số A={ a1,a2,,..,an} cho trước. Ý tưởng: So sánh các phần tử trong dãy với 0, nếu ai<0 thì biến đếm d tăng lên một đơn vị. INPUT: Số nguyên dương N và N số a1, a2,,.., aN của dãy A. OUTPUT: Số các số âm trong dãy d. B1. Nhâp số nguyên dương N và N số a1,a2,,..,aN; B2. i←1, d←0; B3. Nếu i> N thì đưa ra d rồi kết thúc; B4. Nếu ai <0 thì d←d+1; B5. i←i+1, rồi quay lai B3; Thuật toán thể hiện tính dừng khi i >N sẽ kết thúc. Ví dụ: Cho dãy số có 6 phần tử N=6 gồm các giá trị a1= 12, a2=-22, a3=36, a4=-15, a5=-67, a6=32. Mô tả thuật toán cho dãy số trên. B1. N=6, 12 -22 36 -15 -67 32; B2.i←1, d←0; B3. i=1<N=6; B4. a1=12>0 ; {không tăng d} B5. i←i+1=1+1=2 quay lai B3; B3. i=2<N=6; B4. a2=-22<0 , d←d+1=0+1=1; B5. i←i+1=2+1=3 quay lại B3; B3. i=3<N=6; B4. a3=36>; { không tăng d} B5. i←i+1=3+1=4 quay lai B3; B3. i=4<N=6; B4. a4=-15<0, d←d+1=1+1=2; B5. i←i+1=4+1=5 quay lại B3; B3. i=5<N=6; B4. a5=-67<0, d←d+1=2+1=3; B5. i←i+1=5+1=6 quay lai B3; B3. i=6;{ chưa lớn hơn N=6} B4. a6=32>0; { không tăng d} B5. i←i+1=6+1=7 quay lại B3; B3. i=7>N=6 Thuật toán dừng lại và đưa ra số phần tử âm trong dãy số là 3 ; Bài toán 5: Xây dựng thuật toán tính S= 1+3+5++ (2n-1) với N nhập vào từ bàn phím. - INPUT: N - OUTPUT: Tổng S - Thuật toán có thể thực hiện với biến điều khiển tăng hoặc giảm hoặc theo quy luật gán cho i. B1. Nhập N; B2. i← N, S←0; B3. S← S+ (2*i-1); B4. i←i-1; B5. Nếu i<=0đưa ra S và kết thúc; B6. Quay lại B3 Cách 1. Cách 2 B1. Nhập N; B2. i← 1, S←0; B3. S← S+ (2*i-1); B4. i←i+1; B5. Nếu i>N đưa ra S và kết thúc; B6. Quay lại B3 Với cấu trúc lặp có quy luật như ví dụ bài toán 5 trên đây, tôi muốn học sinh khai thác được quy luật tăng hay giảm của biến điều khiển, đó là những mấu chốt của bài toán và tính tổng S theo biến điều khiển. Điều này hướng học sinh tới cấu trúc lặp trong các ngôn ngữ lập trình nói chung. B1. Nhập N; B2. i← 2*N-1, S←0; B3. S← S+ i; B4. i←i-2; B5. Nếu i>0 Quay lại B3 B6. Đưa ra S và kết thúc; Cách 3 Cách 4 B1. Nhập N; B2. i←1, S←0; B3. S← S+i; B4. i←i+2; B5. Nếu i> 2*N-1 Đưa ra S và kết thúc; B6: Quay lại B3 - Ví dụ mô tả cho thuật toán B1. N=3; B2. i←(2*N-1)=(2*3-1)=5, S←0; B3. S←S+i=0+ 5=5; B4. i←i-2=5-2=3; B5. i=3>0; { đúng} B3. S←S+i=5+3=8; B4. i←i-2=3-2=1; B5. i=1>0; {đúng} B3. S←S+i=8 +1=9; B4. i←i-2=1-2=-1 ; B5. i<=0 đưa ra S= 9, Kết thúc; Theo cách 2 Theo cách 4 B1. N=3; B2. i←3, S←0; B3. S← S+ (2*i-1)= 0+(2*3-1)=5; B4. i←i-1=3-1=2; B5. i=2>0; { đúng} B3. S← S+ (2*i-1)= 5+(2*2-1)=5+3=8; B4. i←i-1=2-1=1; B5. i=1>0; {đúng} B3. S← S+ (2*i-1)= 8+(2*1-1)=8+1=9; B4. i←i-1=0 ; B5. i=0<1 đưa ra S= 9, Kết thúc; Một số các bài toán các em có thể tìm hiểu nâng cao hơn. Xây dựng và mô tả thuật toán giải các bài toán sau: a. Kiểm tra một số nhập vào từ bàn phím có phải một số hoàn hảo hay không ? b. Tính S1= c. Tính S2= 1+ 1/2! +1/3!++1/n! 4. Hiệu quả của đề tài nghiên cứu“ Phân bậc hệ thống bài tập xây dựng thuật toán giải bài toán trên máy tính” Sau khi áp dụng đề tài nghiên cứu trong các năm giảng dạy với các giải pháp đã nêu tôi đã thu được kết quả. - Hầu hết các em đã biết cách tìm ra thuật toán và mô tả thuật toán bằng cách liệt kê hoặc bằng sơ đồ khối theo chuẩn kiến thức, kỹ năng. Hiểu rõ về bản chất của thuật toán đặc biệt là các thuật toán điển hình như trong sách giáo khoa và sách bài tập, các em biết vận dụng linh hoạt xây dựng các thuật toán cho các bài toán tôi đã đưa ra ở mức độ tương tự và nâng cao hơn. - Điều đáng nói hơn về kết quả thu được là khi dạy các em lên lớp 11, làm quen với ngôn ngữ lập trình, từ kiến thức hiểu rõ về thuật toán các em đã biết vận dụng viết các câu lệnh tuần tự , rẽ nhánh và lặp, lập chương trình hoàn thiện, cho kết quả chính xác cho các bài toán được học. - Bản thân tôi đã có thêm nhiều kinh nghiệm và kỹ năng để giảng dạy và truyền đạt cho các em những bài học bổ ích và lý thú. Được các đồng nghiệp ủng hộ. - Tôi đã khảo sát lại kỹ năng của các em sau khi được áp dụng giải pháp của đề tài sáng kiến này trong năm học 2015 – 2016 qua bài kiểm tra 15 phút ở các lớp như sau. Câu 1. Hãy trình bầy thuật toán và mô tả cho thuật toán giải bài toán sau bằng cách liệt kê hoặc bằng sơ đồ khối. a. Tính giá trị của Y=. Các em đã làm rất tốt, thành thạo, tỷ lệ học sinh nắm vững thuật toán tăng lên nhiều so với năm trước ở cả lớp mũi nhọn và lớp đại trà. Lớp Số HS Nắm vững thuật toán Chưa nắm vững thụât toán Số lượng % Số lượng % 10A 45 45 100 0 0 10B 45 38 84 7 16 10G 45 35 78 10 22 III . Kết luận và đề xuất Kết luận. Qua thực tế giảng dạy tại các lớp 10A, 10B, 10D, 10G, 10M trường THPT Ba Đình, sau khi tôi truyền tải cho các em hệ thống các bài tập có tính phân bậc như trên các em đã hình thành được kỹ năng xây dựng thuật toán rất tốt, thể hiện qua cách hiểu là các em đã tự lấy ví dụ, mô tả được thuật toán bằng các bộ dữ liệu khác nhau, kiểm tra kết quả có đúng với yêu cầu của bài toán hay không. Các em được rèn luyện, thuần thục về các thuật toán theo chuẩn kiến thức như trong sách giáo khoa Tin Học lớp 10. Với chủ đề này cá nhân tôi vẫn đang tiếp tục nghiên cứu, áp dụng sâu và rộng cho các thuật toán tiếp theo ở mức độ nâng cao hơn. Mục đích để mang lại cho các em học sinh của tôi những tiết học bổ ích, khai thác tính sáng tạo, tạo hứng thú cho các em yêu thích và say mê học môn lập trình Tin Học nói riêng và môn Tin Học nói chung. Đề xuất Để việc dạy và học được tốt hơn cá nhân tôi kính đề nghị các cấp có liên quan nghiên cứu, chỉnh lý đổi mới chương trình về thuật toán ở cấp phổ thông trung học phù hợp với trình độ của học sinh lớp 10, các em dễ nắm bắt hơn, thân thiện và trực quan hơn, qua đó người dạy cũng dễ phân loại khả năng tiếp thu của học sinh. Nhà trường cần có sự đầu tư nâng cấp thêm cho phòng máy thực hành của học sinh, bổ xung thêm tài liệu, tranh minh hoạ, mô hình dạy học lập trình trong nhà trường, để các em có thêm tài liệu tham khảo, giáo viên nghiên cứu bài dạy. Đề tài sáng kiến trên tôi đã áp dụng cho kết quả rất khả quan trong công tác giảng dạy của mình, tuy nhiên sáng kiến này không thể tránh khỏi những thiếu sót, hạn chế của cá nhân tôi. Vậy tôi kính mong nhận được sự đóng góp của các quý đồng nghiệp, những người quan tâm nội dung này để sáng kiến hoàn thiện hơn. Tôi xin chân thành cảm ơn sâu sắc! Xác nhận của thủ trưởng đơn vị Nga sơn, ngày 28 tháng 5 năm 2016 Tôi xin cam đoan đây là sáng kiến kinh nghiệm của mình viết, độc lập nghiên cứu, không sao chép nội dung của người khác. Người thực hiện Vũ Thị Huệ
File đính kèm:
- sang_kien_kinh_nghiem_phan_bac_he_thong_bai_tap_xay_dung_thu.doc