Sáng kiến kinh nghiệm phát huy tính sáng tạo của học sinh trong dạy học môn tin học K11

26 45 0
Sáng kiến kinh nghiệm phát huy tính sáng tạo của học sinh trong dạy học môn tin học K11

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Sáng kiến kinh nghiệm phát huy tính sáng tạo của học sinh trong dạy học môn tin học K11 TÓM TẮT SÁNG KIẾN 1. Hoàn cảnh nảy sinh sáng kiến: Trong quá trình giảng dạy bộ môn tin học từ năm 2008 đến nay. Khi thực hiện giảng dạy cho các học sinh khối lớp 11 đặc biệt là các em học sinh khá, giỏi và các em trong đội tuyển HSG, tôi nhận thấy năng lực tư duy trong việc mô tả bài toán, xây dựng thuật toán, phương pháp giải và lập trình của các em còn có nhiều hạn chế. Đặc biệt là tình trạng học sinh chưa đưa ra được cách thức phân tích tiếp cận bài toán một cách hiệu quả, hay xây dựng được các thuật toán hữu hiệu để qua đó xây dựng ra được các chương trình. Mà chỉ dựa vào các thuật toán sẵn có trong thực tế tự nhiên được nảy sinh trong đầu ngay khi học sinh đọc đầu bài ( Ta gọi là Thuật toán tự nhiên). Hoặc là dựa vào các thuật toán mà giáo viên hướng dẫn cho các em và một vài thuật toán do các em tìm hiểu thông qua các tài liệu. Khi đó những ý tưởng trong đầu hoặc những thuật toán có sẵn đó thường gây khó cho học sinh trong việc tiếp cận vấn đề và giải quyết vấn đề khi áp dụng vào trong các bài toán lập trình cụ thể. Dẫn đến vấn đề là học sinh khó khăn rất nhiều trong việc xây dựng ra các chương trình cụ thể để mô tả cho các bài toán mà mình cần thực hiện. Xuất phát từ những bất cập trên tôi thấy cần có phương pháp hiệu quả để giúp cho học sinh có thể tiếp cận bài toán, phân tích bài toán một cách chủ động và hiệu quả hơn, qua đó đưa ra phương pháp giải, và các thuật toán hữu hiệu để giải quyết bài toán. Vậy nên tôi xây dựng đề tài: Phát triển năng lực sáng tạo trong xây dựng thuật toán và lập trình Pascal để khắc phục những tồn tại và khó khăn mà tôi đã trình bày ở trên nhằm mục đích giúp cho học sinh có một cách tiếp cận, phân tích một bài toán một cách hiệu quả hơn, hoặc các em có thể tự mình thực hiện cải tiến được phương pháp giải dựa vào cách phân tích, mô tả bài toán. Qua đó giúp học sinh hiểu rõ hơn các yêu cầu của bài toán, xây dựng được các thuật giải hiệu quả và các chương trình tối ưu nhất. 2. Điều kiện, thời gian, đối tượng áp dụng sáng kiến Đối tượng áp dụng sáng kiến là bồi dưỡng các học sinh có lực học khá, giỏi có sự đam mê bộ môn của khối 11, 12 và đội tuyển học sinh giỏi. 3. Nội dung sáng kiến : “Giúp học sinh nâng cao năng lực tự học, tự nghiên cứu bằng việc cụ thể là có thể vận dụng sáng tạo trong tư duy thuật toán, triển khai phân tích một bài toán một cách Logic, qua đó hình thành các thuật toán tự nhiên rồi chuyển được các thuật toán tự nhiên đó trở thành các thuật toán hữu hiệu. Giúp cho học sinh có thể phân tích một bài toán theo chiều sâu, từ trên xuống dưới, từ tổng quát đến chi tiết, từ chi tiết rồi nảy sinh các thuật toán, áp dụng thuật toán hoặc cải tiến thuật toán. Từ đó học sinh tiếp tục xử lý lần ngược để viết chương trình  hiệu quả tất yếu là năng lực của học sinh đã được phát huy thông qua quá trình tự sáng tạo trong thuật toán và lập trình của các em”. Đề tài đã được tôi vận dụng giảng dạy cho toàn bộ học sinh khá giỏi bộ môn tin của khối 11, 12 đặc biệt là các học sinh có đam mê ngành CNTT và đội tuyển học sinh giỏi. Qua những năm tôi thực hiện theo ý tưởng này thì năng lực lập trình của học sinh đã được cải thiện rõ rệt, học sinh đã theo học bộ môn với tinh thần tự nguyện ngày một nhiều hơn. Ý tưởng của tôi đã được vận dụng trong bồi dưỡng đội tuyển tin của trường để tham gia kỳ thi chọn HSG tỉnh của vài năm trở lại đây, và cũng đã đạt được một số thành công nhất định (Đội tuyển HSG đã thường xuyên xếp trong vị trí khá cao của toàn tỉnh, và cũng đã đạt được những giải cá nhân trong những năm vừa qua; và các em trong đội tuyển cũng đã đạt được giải thưởng trong kỳ thi tin học trẻ của tỉnh nhà trong năm vừa qua) 4. Khẳng định giá trị, kết quả đạt được của sáng kiến: Qua đây tự bản thân tôi và đồng nghiệp trong cơ quan cũng đã có những nhận xét rất tích cực về ý tưởng sáng kiến của tôi trong bồi dưỡng đối tượng học sinh khá giỏi, và đội tuyển HSG tỉnh. Qua đó góp phần nâng cao thành tích của nhà trường trong các kì thi chọn HSG cấp tỉnh và các kì thi khác mà nhà trường đăng ký tham gia. 5. Đề xuất kiến nghị để thực hiện áp dụng hoặc mở rộng sáng kiến. Qua bản trình bày về y tưởng sáng kiến của tôi kính mong các thầy cô đồng nghiệp hãy góp ý kiến thêm để bản đề tài của tôi được hoàn thiện hơn, và rộng hơn là có thể góp một phần nhỏ nào đó cùng các thầy cô bộ môn trong tỉnh có thể cùng nhau bồi dưỡng được nhiều học sinh giỏi hơn nữa, nâng cao tinh thần tự học, tự sáng tạo, nâng cao năng lực khai phá vấn đề của học sinh nhiều hơn nữa góp phần vào thành công chung của giáo dục tỉnh nhà.

1 Cơ sở lý luận vấn đề Khi lập trình giải tốn tin hiểu khó học sinh sử dụng thuật giải nảy sinh đầu vừa biết nội dung tốn học sinh thu kết sai lời giải thu không hữu hiệu theo nghĩa chương trình đòi hỏi tốn q nhiều nhớ hay chương trình chạy lâu Những thuật giải nảy sinh trực tiếp đầu ta thường gọi thuật giải tự nhiên Nếu trình giáo viên bồi dưỡng cho học sinh giúp cho học sinh nắm vững nhiều dạng thuật giải học sinh bạn thử sức với tốn khó đến lúc thuật giải tự nhiên học sinh đáng tin cậy Đó mục đích học tập rèn luyện học sinh ước mơ giáo viên bồi dưỡng đội tuyển học sinh giỏi mong muốn đạt Các kỹ thuật lập trình minh họa qua tốn cụ thể đề tài mục đích để rèn cho học sinh chủ động sớm làm chủ tri thức, phương pháp suy luận tư lập trình thực cần thiết Sáng kiến chia thành hai phần Phần thứ giới thiệu vắn tắt chất phương pháp kỹ thuật lập trình vài đề ví dụ mơ Phần thứ hai trình bày phân tích chi tiết lời giải với bình luận, nhận xét giúp học sinh hiểu rõ việc thiết kế thuật giải lập trình Các giải pháp, biện pháp thực 2.1 Đối tượng nghiên cứu: - Học sinh giỏi khối 11 12 có đam mê lập trình đội tuyển học sinh giỏi 2.2 Phạm vi nghiên cứu: Nội dung nghiên cứu có nhiều phần, phạm vi nghiên cứu ta cần làm rõ vấn đề sau: 2.2.1.Về kiến thức: - Hiểu rõ khái niệm toán thuật toán - Hiểu quy tắc quy trình xây dựng thuật toán - Nắm vững cách thiết kế dạng thuật tốn - Hiểu rõ tính logic tư thuật toán - Hiểu, biết câu lệnh, hàm thủ tục, số kỹ thuật lập trình 2.2.2.Về kỹ năng: - Khả tư logic phân tích vấn đề - Vận dụng biểu diễn thuật toán vấn đề cụ thể - Vận dụng để viết số chương trình Trong chương trình phải phân biệt rõ biến toàn cục, biến cục bộ, tham số thực, tham số hình thức … - Vận dụng câu lệnh lập trình linh hoạt sáng tạo thao tác nhanh nhẹn 2.2.3.Năng lực cần hướng tới: - Biết phân tích cách có logic tốn - Hình thành lực tự khám phá, xây dựng thuật giải có tính sáng tạo hữu hiệu - Qua rèn luyện lực tự xây dựng cải tiến phương pháp giải xây dựng để đạt hiệu cao 2.3: Phương pháp nghiên cứu: 2.3.1 Đối tượng: Học sinh khối lớp 11, 12, bồi dưỡng đội tuyển học sinh giỏi 2.3.2 Kế hoạch nghiên cứu: Trực tiếp trình bồi dưỡng học sinh 2.3.3 Phạm vi nghiên cứu: Kiến thức khối 11, xây dựng thuật giải Kết đạt Trong phần giới thiệu số bước vận dụng q trình giải tốn tin để mơ tả cho quy trình thực hướng dẫn học sinh đề tài 3.1 Bước bước quan trọng hiểu rõ nội dung toán Đây yêu cầu quen thuộc người làm tốn lập trình Để hiểu toán theo cách tiếp cận tin học ta phải gắng xây dựng số thí dụ phản ánh yêu cầu đề đầu thử giải thí dụ để hình thành dần hướng thuật toán 3.2 Bước thứ hai ngôn ngữ quen thuộc để đặc tả đối tượng cần xử lý mức độ trừu tượng, lập mối tương quan, xây dựng hệ thức thể hiện, quan hệ đại lượng cần xử lý Ở xử dụng ngôn ngữ đặc tả để học sinh dễ hiểu quen thuộc ngơn ngữ tốn học tựa Pascal 3.3 Bước thứ ba xác định cấu trúc liệu để biểu diễn đối tượng cần xử lý cho phù hợp với thao tác thuật toán Trong bước ta tiến hành tiếp tục làm mịn dần đặc tả theo trình tự từ xuống dưới, từ trừu tượng đến cụ thể, từ tổng quát đến chi tiết 3.4 Bước cuối sử dụng ngơn ngữ lập trình Turbo Pascal Free Pascal để viết chương trình hồn chỉnh Ở bước ta thực theo kỹ thuật từ lên, từ thao tác nhỏ đến thao tác tổ hợp Sau viết xong chương trình ta cho chương trình chạy thử với liệu mẫu liệu lấy từ thí dụ xây dựng bước Điều quan trọng ta xây dựng thủ tục cách khoa học có chủ đích nhằm kiểm tra tính tin cậy chương trình thực số cải tiến Tôi vận dụng cách tiếp cận để thực giải số toán cụ thể gặp đề thi chọn học sinh giỏi tỉnh năm gần Bài tốn 1: Số thân thiện Tìm tất số tự nhiên có hai chữ số mà đảo trật tự hai chữ số thu số nguyên tố với số cho Hiểu đầu Ta ký hiệu (a,b) ước chung lớn (ucln) hai số tự nhiên a b Hai số tự nhiên a b gọi nguyên tố (a,b) = Khi đó, chẳng hạn: a (32,23) = 1, 32 số cần tìm Theo tính chất đối xứng, ta có 23 số cần tìm b (12,21) = 3, 12 21 đồng thời khơng phải số cần tìm Đặc tả : ta gọi hai chữ số số tự nhiên cần tìm x a b, ta có : (1) x = ab (2) a, b = (a b biến thiên khoảng từ đến 9; a≠0) (3) a>0 x số có hai chữ số (4) ( ab , ba ) = Ta ký hiệu x’ số đối xứng số x theo nghĩa đầu bài, ta có đặc tả sau: (5) x = 10, ,99 (x số biến thiên từ 10 đến 99, x số có hai chữ số) (6) (x, x’) = Nếu x = ab x’ = ba Ta tính giá trị x’ cơng thức: x’ = (chữ số hàng đơn vị x) * 10 + (chữ số hàng chục x) Ký hiệu: Đơn(x) – số hàng đơn vị số x Chục(x) – số hàng chục số x Ta có x’ = Đơn(x)*10 + chục(x) Tổng hợp lại ta có đặc tả sau : Số cần tìm x phải thỏa mãn tính chất sau : x = 10, ,99 (x ∈ Ν ; 10 ≤ x ≤ 99 ) (7) x’ = Đơn(x)*10 + chục(x) (8) (x, x’) = (ước chung lớn x x’ 1) Đặc tả mô tả ngôn ngữ tự nhiên tựa Pascal sau : (9) for x := 10 to 99 If ucln(x, Đơn(x)*10 + chục(x)) = then xuất(x) ; Trong đó, ucln(a,b) hàm cho ước chung lớn hai số tự nhiên a b; Xuất(x) toán tử hiển thị x lên hình ghi x vào mảng với mục đích sử dụng lại, cần (10) ta làm mịn đặc tả: Ta sử dụng thuật tốn Euclid để tính ucln(a,b) thực tế chia liên tiếp, thay số thứ số dư chia cho số thứ hai hốn vị hai số : { -Thuat toan euclid tim uoc chung lon nhat Cua hai so a va b -} Function Var ucln(a,b :integer ):integer; r : integer; Begin While b> Begin r:= a mod b; a:=b ; b:=r ; End; Ucln := a; End; Đơn(x) = (x mod 10): số dư phép chia nguyên x cho 10, thí dụ: Đơn(18) = 18 mod 10 = Chục(x) = (x div 10): thương nguyên phép chia x cho 10, thí dụ: Chục(18) = 18 div 10 = Xuất(x): Write(x) nạp giá trị x vào mảng s theo thao tác sau: n:= n + 1; s[n] := x; n đếm số phần tử nạp vào mảng s Biểu diễn diễn liệu Ta dùng mảng s để lưu số tìm dễ thấy s phải mảng nguyên chứa tối đa 90 phần tử phần tử cần khảo sát nằm khoảng từ 10 đến 99 Var s: array[1 90] of integer ; Phương án chương trình hoạt động theo hai bước sau: n:= tim ; xem(n) ; Bước tìm ghi vào mảng s số thỏa mãn điều kiện đầu bài, n số lượng số tìm Bước hiển thị phần tử mảng s[1 n] chứa số tìm Toán tử x’ viết dạng hàm cho ta số tạo chữ số x theo trật tự ngược lại ta đặt tên cho hàm sodao(số đảo) hàm nhận giá trị vào số tự nhiên có nhiều chữ số Để tạo số đảo y số x cho trước, hàm số đảo lấy dần chữ số hàng đơn vị x để ghép vào bên phải số y: y := y*10 + (x mod 10) sau bước, chữ số hàng đơn vị lấy loại hẳn khỏi x toán tử: x := x div 10; Chỉ thị {$B-} chương trình nguyên tố đặt chế độ kiểm tra biểu thức logic vừa đủ Khi xác định giá trị chân lý cần thiết khơng tiến hành tính tiếp giá trị biểu thức thí dụ lệnh X := ; y:= ; If (x > 5) and (x + y< ) then y := y+1 Else y := y – 1; Trong chế độ {$B-}, sau tính giá trị chân lý (x > 5) = false, chương trình bỏ qua nhân tử logic (x + y< ), tích logic false với giá trị tùy ý cho ta false Trong trường hợp lệnh y := y – thực ngược lại ta đặt giá trị {$B+} chương trình sau tính (x > 5) = false tiếp tục tính giá trị (x + y< ) lấy tích hai giá trị tìm (false and true = false) làm giá trị biểu thức điều kiện cấu trúc rẽ nhánh nói Cuối tốn tử y := y – thực giống trường hợp khối lượng tính tốn lại nhiều { Chuong trinh tim so than thien (xy, yx ) = -} program SoThanThien; {$B-} uses Crt; const MN = 90; var s: array[1 MN] of integer; function Ucln(a,b: integer): integer; var r: integer; begin while b > begin r:= a mod b; a:= b; b:= r; end; Ucln:= a; end; function SoDao(x: integer): integer; var y: integer; begin y := 0; repeat { ghep chu so hang don cua x vao ben phai y } y := 10*y + (x mod 10); x := x div 10; { loai chu so hang don } until (x = 0); SoDao := y; end; { -Tim cac so thoa dieu kien dau bai ghi vao mang s Output: so luong cac so tim duoc } function Tim: integer; var x,d: integer; begin d := 0; {So luong cac so can tim } for x := 10 to 99 if Ucln(x,SoDao(x)) = then begin d := d + 1; s[d]:= x; end; Tim := d; end; { -Hien thi mang s[1 n] tren man hinh } procedure Xem(n: integer); var i: integer; begin writeln; for i := to n write(s[i]:4); writeln; end; BEGIN n := Tim; Xem(n); writeln; write(' Tong cong ',n,' so'); readln; END Cải tiến Ta vận dụng tính đối xứng nhận xét phần để cải tiến chương trình Như cần khảo sát số x = ab, với a > b ≥ Trường hợp a = b ta khơng xét x' = x Ucln(x, x) = x ≥ 10 ≠ Nếu b = ta có x = 10a x' = a Ta thấy Ucln(10a, a) = a = a = Do ta xét riêng trường hợp Khi ab = 10 ta có (10, 1) = Vậy 10 số cần tìm số Mỗi tìm hai chữ số a b thoả điều kiện a > b Ucln(a*10 + b, b*10 + a) = ta đưa a*10 + b vào kết quả, b > ta đưa thêm số đảo b*10 + a vào kết { So Than thien: Phuong an } function Tim2: integer; var a,b,d: integer; begin d:= 1; {So luong cac so can tim} s[d] := 10; for a := to for b := to a-1 if Ucln(a*10+b,b*10+a)=1 then begin d := d + 1; s[d] := a*10 + b; d := d + 1; s[d] := b*10 + a; end; Tim2 := d; end; Nhận xét: Qua ví dụ ta thấy ta tiến hành đặc tả tốn theo hình thức đặc tả từ xuống, từ rộng đến hẹp, từ tổng quát đến chi tiết qua ta làm rõ vấn đề chi tiết tiến hành theo cách lần ngược để viết chương trình ta thấy chương trình dễ hiểu qua học sinh nắm bắt điểm cần cải tiến, sáng tạo giúp cho toán trở lên đơn giản, dễ hiểu Bài toán 2: Cấp số cộng Tìm số tự nhiên lẻ có ba chữ số Ba chữ số theo thứ tự từ trái qua phải tạo thành cấp số cộng Đặc tả x số tự nhiên có ba chữ số: x = 100a + 10b + c x số lẻ nên chữ số hàng đơn vị c phải số lẻ: c = 1, 3, 5, 7, Chữ số hàng trăm x phải khác 0: a = Nếu dãy a, b, c lập thành cấp số cộng số đứng b trung bình cộng hai số đầu cuối: b = (a + c)/2 hay 2b = a+c Từ (4) ta suy (a + c) số chẵn Do c lẻ, (a + c) chẵn nên a lẻ Nếu biết a c ta tính x = 100a +10(a + c) / + c = 100a + 5(a + c) + c = 105a + 6c Vì có chữ số lẻ 1, 3, 5, nên tổ hợp a c cho ta 25 số Tổ chức liệu Ta tạo sẵn mảng nguyên phần tử ChuSoLe[1 5] gán trước giá trị 1, 3, 5, 7, cho mảng Trong Turbo Pascal (TP) việc thực thông qua khai báo: const ChuSoLe: array[1 5] of integer = (1,3,5,7,9); Chú ý khai báo phải đặt mục const nơi khai báo Ý nghĩa dòng khai báo sau: Xin cấp phát biến mảng kiểu nguyên có phần tử với dẫn từ đến 5, tên biến ChuSoLe phần tử biến gán trước trị 1, 3, 5, Sau đó, cần, ta việc duyệt mảng ChuSoLe thu toàn chữ số lẻ theo trật tự khai báo trước Chú ý Thủ tục inc(d) chương trình Pascal mô tả tăng giá trị biến d lên thêm đơn vị, tức tương đương với câu lệnh d := d + Tương tự, thủ tục dec(d) giảm giá trị biến d xuống đơn vị, tương đương với câu lệnh d := d – Tổng quát hơn, ta viết: inc(d,n) tương đương với d := d + n dec(d,n) tương đương với d := d – n Khi n = bỏ qua tham số thứ hai { Cac so tu nhien le chu so tao cap so cong -} program CapsoCong; uses crt; const ChuSoLe: array [1 5] of integer = (1,3,5,7,9); var s: array [1 25] of integer; n: integer; { Phat sinh cac so dang Hàm odd(c) kiểm tra tính lẻ số nguyên c Phương pháp vét cạn đòi hỏi khoảng 10*10*10 = 1000 lần duyệt có 25 số, tức phần bốn mươi số thoả mãn điều kiện đầu Phương pháp mơ tả chương trình ta tự sản sinh số hay nói cách khác sinh 25 số cần tìm Còn ta sử dụng phương pháp vét cạn để duyệt phần tử số chương trình duyệt, chạy lâu Vậy ta thấy phương pháp cải tiến cho tự sinh thực hữu hiệu thay ta duyệt tìm đối tượng Qua ví dụ lần ta lại thấy rõ quy trình để xuất đặc tả để mơ tả tốn, qua đưa thuật tốn phù hợp, kích thích sáng tạo học sinh xây dựng thuật toán chương trình Giúp cho học sinh phát triển lực tư duy, đổi theo hướng chủ động, tích cực Tương tự tơi cho thêm vài tốn giúp học sinh chủ động làm quen với cách thức đặc tả, xây dựng toán, thuật tốn cách tích cực, say mê khám phá, điều đạt học sinh trao đổi, tranh luận cách sơi nổi, tích cực, mang tính chất xây dựng Ví dụ tốn sau: Bài tốn 3: Cấp số nhân Tìm số tự nhiên có ba chữ số Ba chữ số theo thứ tự từ trái qua phải tạo thành cấp số nhân với công bội số tự nhiên khác Đặc tả Chú ý ta xét cấp số dãy số tự nhiên với công bội d số nguyên dương Gọi x số cần tìm, ta có: x số có ba chữ số: x = 100*a + 10*b + c a = 9; b = a*d; < c = a*d*d ≤ Hệ thức cho phép ta tính giới hạn d: ad2 ≤ d≤ a Vì d số nguyên nên ta phải có d ≤ trunc(sqrt(9 div a)), sqrt hàm tính bậc hai, trunc hàm lấy phần nguyên Ta cho a biến thiên khoảng cho công bội d biến thiên khoảng từ đến trunc(sqrt(9 div a)) Với cặp số a d ta tính x = 100*a+10*a*d+a*d*d = a*(100+10*d+d*d) Tuy nhiên, ta nhẩm tính trước cận d đỡ phải gọi hàm trunc sqrt hàm thao tác số thực tốn thời gian a Cận d 1 1 1 { -Cac so tu nhien chu so tao cap so nhan } program CapsoNhan; uses crt; const MN = 30; cd: array[1 9] = (3,2,1,1,1,1,1,1,1); var s: array [1 MN] of integer; n: integer; function Tim: integer; var a,d,n: integer; begin n:= 0; for a:= to for d:=1 to cd[a]do begin inc(n); s[n]:= a*(100+10*d+d*d); end; Tim:= n; end; procedure Xem(n: integer): var i: integer; begin writeln; for i := to n if n mod 20 = then writeln else write(s[i]:4); writeln; end; BEGIN clrscr; n:= Tim; Xem(n); writeln; write('Tong cong ',n,' so'); readln; END Nhận xét: Qua ví dụ lần ta thấy học sinh tự lực thực phương pháp mà giáo viên hướng dẫn để đặc tả tốn, qua sáng tạo phương pháp đổi mới, thể lực tư vận dụng giải vấn đề lập trình pascal nói riêng lập trình ứng dụng nói chung Bài toán 4: Từ chuẩn Một từ loại M dãy chữ số, chữ số nằm khoảng từ đến M Số lượng chữ số có mặt từ gọi chiều dài từ Từ loại M gọi từ chuẩn khơng chứa hai khúc (từ con) liền mà giống với hai trường hợp sau Với giá trị N cho trước Trường hợp 1: hiển thị hình từ chuẩn loại có chiều dài N Trường hợp 2: tìm ghi vào tệp văn tên TUCHUAN.OUT từ chuẩn loại có chiều dài N ≤ n ≤ 40000 Thí dụ: 1213123 từ chuẩn loại 3, chiều dài 1213213 khơng phải từ chuẩn chứa liên tiếp hai từ giống 213 Tương tự, 12332 khơng phải từ chuẩn chứa liên tiếp hai từ giống Bài giải Ta dùng mảng v[1 n] để lưu từ cần tìm Tại bước i ta xác định giá trị v[i] khoảng m cho v[1 i] từ chuẩn Điều kiện P: v[1 i] từ chuẩn Điều kiện Q: Dừng thuật tốn theo hai tình sau đây: nếu i = n tốn có nghiệm v[1 n] nếu i = tốn vơ nghiệm TimTu1: Tìm nghiệm {Khoi tri cho moi vi tri bang 0} for i := to n v[i] := 0; i := 1; repeat if i > n then {co nghiem v[1 n]} begin KetQua1(n); {in nghiem v[1 n]} exit; end; if i < then {vô nghiệm} begin KetQua1(0); exit; end; j := Tim(i); if j > then begin v[i] := j; inc(i) {tiến} end else begin {Lùi} v[i] := 0; dec(i); end; until false; Hàm Tim hoạt động sau: duyệt giá trị vị trí v[i] từ v[1 i] kể từ v[i] + đến m cho v[1 i] từ chuẩn Tim = true tồn giá trị v[i] Ngược lại, với v[i] = v[i] + m từ v[1 i] khơng chuẩn Tim = false function Tim(i: integer): Boolean; begin Tim := true; while v[i] < begin inc(v[i]); if Chuan(i) {v[1 i] la tu chuan} then exit; end; Tim := false; end; Để kiểm tra tính chuẩn từ v[1 i], ta lưu ý từ v[1 i-1] chuẩn (tính chất P), cần khảo sát cặp từ có chứa v[i], cụ thể khảo sát cặp từ có chiều dài k đứng cuối từ v Đó cặp từ v[(i–k–k+1) (i–k)] v[i–k+1 i] với k = (i div 2) Nếu với k hai từ khác Chuan=true Ngược lại, Chuan = false function Chuan(i: integer): Boolean; var k: integer; begin Chuan := false; for k := to (i div 2) if Bang(i,k) then exit; Chuan := true; end; Hàm Bang(i,k) kiểm tra xem hai từ kề chiều dài k tính từ i trở trước có hay khơng Hai từ xem khác chúng khác vị trí function Bang(i,k: integer): Boolean; var j: integer; begin Bang := false; for j := to k-1 if v[i-j] v[i-k-j] then exit; Bang := true; end; Thủ tục TimTu tìm nghiệm toán { -Tu chuan -} {$B- } uses crt; const MN = 40; {Cho việc tìm nghiệm } MN1 = 40000; {Cho việc tim nghiệm } gn = 'TuChuan.OUT'; var v: array[0 MN1] of byte; {chua nghiem } n: integer; {chieu dai tu: tinh chat Q } g: text; {file output} { -Kiem tra hai tu ke nhau, chieu dai k tinh tu vi tri i tro ve truoc co bang ? } function Bang(i,k: integer): Boolean; var j: integer; begin Bang := false; for j := to k-1 if v[i-j] v[i-k-j] then exit; Bang := true; end; { Kiem tra tu v[1 i] co la tu chuan ? } function Chuan(i: integer): Boolean; var k: integer; begin Chuan := false; for k := to (i div 2) if Bang(i,k) then exit; Chuan := true; end; { -Sua v[i] de thu duoc tu chuan Tim = true: Thanh cong Tim = false: That bai -} function Tim(i: integer): Boolean; begin Tim := true; while v[i] < begin inc(v[i]); if Chuan(i) {v[1 i] la tu chuan} then exit; end; Tim := false; end; { Hien thi ket qua, tu v[1 n] (trường hợp tìm nghiem) -} procedure KetQua1(k: integer); var i: integer; begin writeln; if k = then write('Vo nghiem') else for i := to k write(v[i]); writeln; end; { -Phuong phap quay lui: tim nghiem cho bai toan tu chuan dai len, chi chua cac chu so lim -} procedure TimTu1(len: integer); var i: integer; d: longint; begin if (len < 1) or (len > MN) then exit; n := len; for i := to n v[i] := 0; assign(g,gn); rewrite(g); i := 1; d := 0; repeat if i > n then {tim duoc nghiem v[1 n]} begin inc(d); KetQua(d); i := n; end; if i < then {da vet het} begin if d = then KetQua(0); close(g); write('OK'); readln; exit; end; if Tim(i) then inc(i) {tiến } else {Lui } begin v[i] := 0; dec(i); end; until false; end; { -Test phuong an tu chuan dai 200 chi chua cac chu so 1, 2, } procedure Test1; begin clrscr; TimTu1(200); readln; end; { Ghi mot nghiem vao file -} procedure KetQua(d: integer); var i: integer; begin if d = then write(g,'Vo nghiem') else begin write(g,'Nghiem thu ',d,': '); for i := to n write(g,v[i]); writeln(g); end; end; { -Trường hợp liet ke toan bo cac tu chuan chieu dai len, chi chua cac chu so 1, 2,3 -} procedure TimTu(len: integer); var i: integer; d: longint; begin if (len < 1) or (len > MN) then exit; n := len; for i := to n v[i] := 0; assign(g,gn); rewrite(g); i := 1; d := 0; repeat if i > n then {tim duoc nghiem v[1 n]} begin inc(d); KetQua(d); i := n; end; if i < then {đã vét hết} begin if d = then KetQua(0); close(g); write('OK'); readln; exit; end; if Tim(i) then inc(i) {tiến } else {Lui } begin v[i] := 0; dec(i); end; until false; end; { -Test trường hợp l iet ke toan bo cac tu dai 16, chi chua cac chu so 1, 2,3 Ket qua ghi tep TuChuan.out } procedure Test; begin clrscr; TimTu(16); end; BEGIN Test; readln END Với N = 16, M = 3, có tổng cộng 798 nghiệm, tức 798 từ chuẩn chiều dài 16 tạo từ chữ số 1, Dưới 20 nghiệm tìm theo thuật tốn Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem Nghiem thu thu thu thu thu thu thu thu thu thu thu thu thu thu thu thu thu thu thu thu 1: 1213123132123121 2: 1213123132123213 3: 1213123132131213 4: 1213123132131231 5: 1213123132131232 6: 1213123132312131 7: 1213123132312132 8: 1213123132312321 9: 1213123212312131 10: 1213123212312132 11: 1213123212313212 12: 1213123212313213 13: 1213123212313231 14: 1213123213121321 15: 1213123213121323 16: 1213123213231213 17: 1213123213231232 18: 1213123213231321 19: 1213212312131231 20: 1213212312131232 Qua ví dụ thực số tập (tạo mảng ngẫu nhiên, chia mảng theo tỉ lệ khác nhau, sinh mảng ngẫu nhiên tăng, sinh mảng khoảng, Sinh ngẫu nhiên tệp theo tiêu chí, Dãy ký tự đối xứng_Palindrome ….) để học sinh tự nghiên cứu, thực sau tơi nghiệm thu nhận xét kết mà em thực kết thật bất ngờ em thực tốt yêu cầu giáo viên đưa Điều kiện để sáng kiến nhân rộng: - Để áp dung đề tài thành công thấy cần thiết CBGV phải tự trau dồi tốt kiến thức chun mơn, đặc biệt phương pháp phân tích vấn đề, tư xây dựng, vận dụng thuật giải tư sáng tạo, cải tiến thuật giải - Kết hợp với vấn đề chun mơn đòi hỏi CBGV phải có kỹ lập trình tốt, áp dụng tốt thuật giải, biểu diễn thuật giải trình lập trình Đối chứng, thực nghiệm Qua nghiên cứu thực việc giảng dạy kết sau: Hoạt động Học sinh tự nguyện đăng ký Năm nhóm CNTT Đội tuyển HSG Học sinh tự nguyện đăng ký 2013 nhóm CNTT Đội tuyển HSG Đội tin học trẻ 2014 Trước áp dụng Sau áp dụng Tốp 20 Tốp 15 14 Tốp 15 Tốp 10 Khuyến khích Như qua bảng đối chứng thực nghiệm nhận thấy lực học sinh phát triển rõ rệt Qua minh chứng cho thấy giải pháp phát huy mục đích q trình bồi dưỡng phát triển lực học sinh KẾT LUẬN VÀ KHUYẾN NGHỊ Kết luận - Đánh giá thực trạng; Sau nghiên cứu thử nghiệm tơi thấy cần có thời gian nhiều để thử nghiệm, đồng thời hoàn thiện ý tưởng cách thức ứng dụng để đạt kết nữa, số học sinh tơi bồi dưỡng có em chưa đáp ứng u cầu, có áp dụng phương pháp chưa thực linh hoạt Vả lại phương pháp thời gian thầy trò thảo luận với chưa nhiều, dẫn đến em chưa thực đầu tư nhiều thời gian cho nghiên cứu, ứng dụng, trao đổi nhóm Dẫn đến kết đạt chưa thực cao - Các giải pháp thực hiện; + Tạo khuyến khích em học sinh đam mê công nghệ thành lập tham gia vào nhóm thành lập Nhưng tơi thường khuyến khích em tham gia vào nhóm cơng nghệ hoạt động qua giúp cho em học hỏi kinh nghiệm từ bạn trước + Tổ chức buổi sinh hoạt nhóm qua giải đáp thắc mắc, gợi mở vấn đề phát huy tính sáng tạo, tính tò mò khám phá em + Thường xuyên trao đổi thầy với trò lúc, nơi như: gặp trao đổi trực tiếp qua mạng internet, facebooks, số diễn đàn công nghệ + Tạo điều kiện để em tiếp xúc mới, cung cấp cho em tài liệu để em có thời gian nghiên cứu - Kết áp dụng giải pháp Sau trình áp dụng ý tưởng vào thực tế giảng dạy thu số kết sau: + Các em học sinh giỏi tự tư duy, phát triển lực tự học, tự sáng tạo biểu diễn, phân tích tốn, xây dựng thuật tốn + Tơi thấy thành cơng có nhiều em học sinh tự nguyện đăng ký tham gia vào đội kỹ thuật động trường vấn đề kỹ thuật tham gia xây dựng thành nhóm cơng nghệ, nhóm em học sinh tự nghiên cứu kỹ thuật lập trình khơng với ngơn ngữ Pascal mà em tự nghiên cứu số loại ngôn ngữ khác C, C#, HTML Và em tạo thành thói quen lan tỏa đến với khóa học sinh vào trường tiếp nối đam mê + Đội tuyển học sinh giỏi môn năm gần xếp thứ hạng cao tỉnh, có cá nhân dành giải cao kỳ thi + Nhà trường cho em tham gia kỳ thi tin học trẻ sở giáo dục, tỉnh đoàn, sở khoa học công nghệ tổ chức dành thành tích cao Đó kết mà qua tơi trực tiếp người hướng dẫn em cảm thấy có thành cơng áp dụng ý tưởng vào trình thực giảng dạy em Và niềm động viên, động lực để tơi tiếp tục đổi phương pháp để kết giảng dạy nâng cao Khuyến nghị: Với nhà trường: - Có biện pháp tạo điều kiện để em học sinh tham gia hoạt động nhóm cơng nghệ nhà trường cách tích cực - Cần tuyên dương, khen thưởng động viên em học sinh đội xung kích CNTT môn em tham gia vào kỳ thi năm đơn vị tổ chức kịp thời, thời điểm nhằm tạo hưng phấn có sức lan tỏa Thúc đẩy mạnh phát triển tinh thần thi đua em - Tạo nhiều không gian thời gian để em có thời gian nghiên cứu, thúc đẩy tinh thần tự học, tự nghiên cứu khoa học để em tự khẳng định thân Với sở giáo dục: - Cần tăng cường tổ chức hội thảo để giáo viên trao đổi chuyên môn kinh nghiệm giảng dạy, thiết nghĩ biện pháp giúp tập huấn chuyên môn cách hiệu - Có sách khuyến khích, ưu tiên đầu tư cho đơn vị có thành tích tốt việc ứng dụng CNTT đổi nâng cao chất lượng giáo dục - Cần tổ chức, thành lập hội đồng mơn có đại diện số trường sở định giúp cho công tác bồi dưỡng, trao đổi ý kiến cách thuận lợi việc hỗ trợ số khó khăn công tác giảng dạy Tài liệu tham khảo: - Sách giáo khoa tin 11 - Cấu trúc liệu giải thuật Lê Minh Hoàng - Phương pháp tốn học lập trình GS Đặng Quang Á - Cấu trúc liệu giải thuật GS- Hoàng kiếm - Xây dựng biểu diễn thuật toán GS-TSKH.Nguyễn Xuân Huy - http://tailieu.vn MỤC LỤC TT 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Tên mục Thơng tin sáng kiến Tóm tắt sáng kiến Hồn cảnh nảy sinh sáng kiến Điều kiện, thời gian, đối tượng áp dụng sáng kiến Nội dung sáng kiến Khẳng định giá trị, kết đạt sáng kiến Đề xuất, kiến nghị để áp dụng nhân rộng sáng kiến Cơ sở lý luận vấn đề Các giải pháp, biện pháp thực Đối tượng nghiên cứu Phạm vi nghiên cứu Về kiến thức Về kỹ Về lực cần hướng tới Phương pháp nghiên cứu Kết đạt Bài toán – Số thân thiện Bài toán – Cấp số cộng Bài toán – Cấp số nhân Bài toán – Dãy ký tự đối xứng (Palindrome) Bài toán – Từ chuẩn Điều kiện để sáng kiến nhân rộng Đối chứng, thực nghiệm Kết luận khuyến nghị Kết luận Khuyến nghị Tài liệu tham khảo Trang 2 3 4 ... 12 131 231 321 231 21 2: 12 131 231 321 232 13 3: 12 131 231 32 131 2 13 4: 12 131 231 32 131 231 5: 12 131 231 32 131 232 6: 12 131 231 3 231 2 131 7: 12 131 231 3 231 2 132 8: 12 131 231 3 231 232 1 9: 12 131 232 1 231 2 131 10: 12 131 232 1 231 2 132 ... 12 131 232 1 231 2 132 11: 12 131 232 1 231 3212 12: 12 131 232 1 231 32 13 13: 12 131 232 1 231 3 231 14: 12 131 232 131 2 132 1 15: 12 131 232 131 2 132 3 16: 12 131 232 132 312 13 17: 12 131 232 132 31 232 18: 12 131 232 132 3 132 1 19: 12 132 1 231 2 131 231 ... loại có chiều dài N ≤ n ≤ 40000 Thí dụ: 12 131 23 từ chuẩn loại 3, chiều dài 12 132 13 khơng phải từ chuẩn chứa liên tiếp hai từ giống 2 13 Tương tự, 1 233 2 khơng phải từ chuẩn chứa liên tiếp hai từ

Ngày đăng: 07/04/2020, 09:52

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan