SKKN Sử dụng phương pháp mảng đánh dấu để nâng cao hiệu quả giải các bài toán tính tần suất các phần tử

pdf 13 trang binhlieuqn2 08/03/2022 3400
Bạn đang xem tài liệu "SKKN Sử dụng phương pháp mảng đánh dấu để nâng cao hiệu quả giải các bài toán tính tần suất các phần tử", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

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

  • pdfskkn_su_dung_phuong_phap_mang_danh_dau_de_nang_cao_hieu_qua.pdf

Nội dung tóm tắt: SKKN Sử dụng phương pháp mảng đánh dấu để nâng cao hiệu quả giải các bài toán tính tần suất các phần tử

  1. MỤC LỤC MỤC LỤC 3 MỞ ĐẦU 1 1. Lý do chọn đề tài 1 2. Phạm vi nghiên cứu 1 NỘI DUNG 2 1. Thực trạng nội dung cần nghiên cứu: 2 2. Các giải pháp thực hiện 2 2.1. Hướng dẫn học sinh nắm lại kiến thức căn bản về mảng một chiều 2 2.2. Nêu ý tưởng, hướng dẫn giải bài toán 3 2.3. Áp dụng một số bài toán tìm số lần xuất hiện của các phần tử 4 2.4. Hiệu quả của đề tài: 7 KẾT LUẬN 8 1. Ý nghĩa của đề tài, giải pháp: 8 2. Kiến nghị. 8
  2. MỞ ĐẦU 1. Lý do chọn đề tài Ngày nay, với sự phát triển nhảy vọt của công nghệ thông tin đặc biệt nó được ứng dụng vào mọi lĩnh vực trong xã hội. Chính vì xác định được tầm quan trọng đó nên môn Tin học được đưa vào giảng dạy ở tất cả các lớp của các cấp học, đặc biệt việc dạy học lập trình căn bản được chú trọng và áp dụng cho học sinh khối 8 trở lên. Đây là môn học mới mẻ nhưng rèn luyện cho học sinh tính tư duy, làm việc logic, có tính sáng tạo và giúp giải quyết được nhiều công việc xuất phát từ thực tiễn cuộc sống. Mặc dù vậy, qua thực tế chung thì các học sinh khi học môn Tin học 8 đều cảm thấy khó khăn trong nắm bắt kiến thức hoặc khó khăn trong việc tư duy thuật toán, giải quyết vấn đề, cách giải một số bài toán cơ bản còn rập khuôn chưa mang tính sáng tạo. Nguyên nhân những vấn đề trên là do môn học lập trình còn mới mẻ với các em học sinh; các thuật ngữ, các câu lệnh mang tính kỹ thuật, các từ khóa lập trình, giao diện phần mềm đều là tiếng Anh nên việc tiếp xúc và làm quen với học sinh còn khó khăn và bỡ ngỡ. Đa số các em chưa có kinh nghiệm trong việc thể hiện thuật toán, tìm hiểu chương trình nên việc viết chương trình còn đơn giản hoặc không hiểu được chương trình người khác viết vì vậy khả năng nâng cao sự hiểu biết về các cách giải bài toán cũng như sự học hỏi thuật toán còn hạn chế. Vì thế trong quá trình giảng dạy bộ môn nói chung và Tin học 8 nói riêng bản thân luôn suy nghĩ làm thế nào để nâng cao chất lượng trong mỗi giờ học, giúp các em nắm được kiến thức căn bản, tư duy được các cách giải một bài toán, cách viết hoàn thiện một chương trình cũng như đọc tìm hiểu chương trình người khác viết để học hỏi thêm, qua đó không ngừng tích lũy kinh nghiệm cho bản thân. Cho nên trong quá trình giảng dạy tôi luôn chú trọng đến việc ra bài tập và hướng dẫn làm bài tập với nhiều cách giải khác nhau sao cho tìm được cách giải tối ưu mang lại hiệu quả cao với thời gian chạy chương trình là ngắn nhất nhưng không quá phức tạp khó hiểu. Để giải quyết thực trạng trên và nhằm nâng cao hiệu quả giảng dạy, bản thân tôi đã tìm tòi đúc rút giải pháp mới để có thể áp dụng giảng dạy ngay tại đơn vị, đó là: “Sử dụng phương pháp mảng đánh dấu để nâng cao hiệu quả giải các bài toán tính tần suất các phần tử” trong tin học 8. Trước đây, khi giải quyết các bài toán tìm tần suất xuất hiện của một phần tử trong dãy cho trước, học sinh thường sử dụng mảng một chiều và sử dụng các vòng lặp lồng nhau để kiểm tra, tính toán số phần tử vì vậy thuật toán khá dài và thời gian thực hiện chương trình khá lâu nếu dữ liệu lớn, mang lại hiệu quả không cao. Điểm mới của giải pháp này là sử dụng mảng một chiều đánh dấu sẵn các giá trị của các phần tử trong dãy ban đầu sau đó lọc và đếm số lần xuất hiện của các phần tử trong dãy. Giải pháp mới này ngắn gọn và dễ hiểu, thời gian thực hiện nhanh đáp ứng được yêu cầu về mặt tối ưu trong lập trình. 2. Phạm vi nghiên cứu 1
  3. Giải pháp “Sử dụng phương pháp mảng đánh dấu để nâng cao hiệu quả giải các bài toán tính tần suất các phần tử” được nghiên cứu tại đơn vị công tác trong hai năm học đó là 2013 – 2014 và năm học 2014 – 2015 và áp dụng trong giảng dạy với ba lớp 8A, 8B, 8C trong năm học 2014 – 2015. Qua áp dụng giải pháp này, học sinh hiểu được nhiều cách tiếp cận hơn đối với một bài toán, hình thành được cách giải đối với dạng bài toán tính tần suất nhờ đó học sinh tự tin tìm hiểu và đam mê khám phá học hỏi hơn, nhờ đó góp phần nâng cao chất lượng giảng dạy bộ môn Tin học 8 nói riêng và Tin học nói chung. NỘI DUNG 1. Thực trạng nội dung cần nghiên cứu: Năm học 2013-2014 bản thân tôi được giao phần hành giảng dạy hai lớp 8A và 8B. Qua trực tiếp giảng dạy và khảo sát phần làm việc với dãy số cho thấy đa số học sinh còn lúng túng trong biểu diễn thuật toán, một số em viết được chương trình giải nhưng kết quả chưa được chính xác, thời gian chạy chương trình là khá dài so với yêu cầu. Đề khảo sát tiết thực hành như sau: Đề ra: Em hãy nhập vào một dãy N số nguyên, đếm số lần xuất hiện của các phần tử trong dãy vừa nhập. (0<N<32000). Yêu cầu: Thời gian mỗi lần chạy chương trình không quá 1 giây. Kết quả thống kê như sau: Giỏi Khá TB Yếu Kém Lớp SLHS SL % SL % SL % SL % SL % 8A 37 3 8.1 10 27 15 40.5 7 18.9 2 5.4 8B 36 2 5.6 8 22.2 17 47.2 6 16.7 3 8.3 Cộng 73 5 6.8 18 24.7 32 37 13 17.8 5 6.8 Kết quả kiểm tra cho thấy số học sinh kém chưa nắm được cách giải bài toán, chỉ mới viết được các câu lệnh nhập vào dữ liệu và chưa hoàn chỉnh. Đối với số học sinh đạt kết quả yếu thì đa số học sinh chỉ mới khai báo mảng và nhập được dữ liệu vào, chưa xử lý được yêu cầu chính của bài. Những học sinh khá thì đã khai báo, nhập được dữ liệu vào, thể hiện được ý tưởng giải bài toán, tuy nhiên viết các câu lệnh còn chưa hoàn chỉnh và kết quả chưa đúng hoàn toàn. Đối với học sinh giỏi thì viết được chương trình hoàn chỉnh, chạy được và cho kết quả đúng tuy nhiên thời gian vẫn chưa đáp ứng được yêu cầu nếu cho số N khá lớn. Vì vậy, cần phải hướng dẫn cho học sinh nắm được cách giải quyết bài toán theo hướng đơn giản hơn, hiệu quả hơn. 2. Các giải pháp thực hiện 2.1. Hướng dẫn học sinh nắm lại kiến thức căn bản về mảng một chiều Mảng một chiều là tập hợp hữu hạn các phần tử cùng chung một tên và cùng chung một kiểu dữ liệu, các phần tử trong mảng có thứ tự và phân biệt 2
  4. nhau bởi chỉ số. Để hiểu khái niệm này ta ví dụ một mảng như một đoàn tàu, có chung tên tàu, có các toa liền kề nhau được đánh số thứ tự tăng dần, số toa tàu xác định được (hữu hạn). Trong ngôn ngữ lập trình Pascal cách khai báo một mảng như sau: Var biến_mảng : array[ ] of ; Ví dụ: Var lop8 : array[1 10] of integer ; Ví dụ trên khai báo một mảng có tên là lop8 có 10 phần tử với kiểu dữ liệu số nguyên. Sau khi khai báo xong, ở phần thân chương trình ta tiếp tục việc nhập dữ liệu vào cho mảng bằng cách sử dụng câu lệnh lặp với số lần biết trước: For biến_đếm := to do read(tên_mảng[biến_đếm]) ; Ví dụ: For i := 1 to 10 do read(a[i]); Và câu lệnh để in kết quả sau khi xử lý xong ra là: For biến_đếm := to do write(tên_mảng[biến_đếm]) ; Ví dụ: For i := 1 to 10 do write(a[i]); Việc củng cố kiến thức về mảng giúp học sinh yếu và kém nắm được cách thao tác đơn giản trên mảng để có thể tiếp tục thực hiện các thao tác giải bài toán. 2.2. Nêu ý tưởng, hướng dẫn giải bài toán Đối với bài toán tính tần suất của các phần tử thì có nhiều cách giải khác nhau. Có thể hướng dẫn cho học sinh nhiều cách tiếp cận bài toán nhưng cách đơn giản nhất là theo hướng chia để trị và trên xuống dưới. Bài toán được chia thành 3 phần: Nhập dữ liệu vào, xử lý và in dữ liệu ra. Bước đầu tiên và bước cuối đa số học sinh đều thực hiện được, những học sinh yếu kém chỉ cần hướng dẫn nắm lại cú pháp là có thể thực hiện được. Vậy nên tập trung vào bước xử lý bài toán. Bước này chính là tìm thuật toán của bài toán. Tổng quát hóa cách giải như sau: Duyệt từ đầu dãy số đến cuối dãy số, đếm số lần xuất hiện của từng phần tử, lưu giá trị đếm được vào một mảng mới. Sau đó kết quả là in dữ liệu từ mảng mới này ra. Như vậy học sinh sẻ hiểu cần khai báo thêm mảng mới để chứa kết quả đếm được và dữ liệu đếm được lưu ở mảng mới này. Lưu ý với học sinh là trong dãy số có thể có nhiều phần tử trùng giá trị nên việc đếm số lần xuất hiện của phần tử trong dãy có thể trùng nhau gây ra dư thừa dữ liệu không cần thiết, vậy nên cần có cách xử lý khi đếm các số trùng nhau. Cách loại bỏ giá trị trùng nhau thông thường khi đếm là dùng “bẫy”: Duyệt dãy số, nếu phần tử này bằng phần tử kia thì gán một bẫy kiểm tra là “sai” với giá trị ban đầu của bẫy là “đúng”. Nếu bẫy có giá trị sai thì không thực hiện đếm với các giá trị xuất hiện sau. Tuy nhiên cách này chưa tối ưu do sử dụng nhiều vòng lặp lồng nhau sẽ mang lại thời gian thực hiện chương trình lâu hơn. Có một phương pháp khác đó là sử dụng mảng đánh dấu để giúp việc duyệt dãy số chỉ một lần, hạn chế thời gian thực hiện chương trình lại, đem lại kết quả nhanh hơn. Sử dụng mảng đánh dấu là khai báo một mảng sau đó, gán giá trị cho các phần tử biết trước của mảng. Sau đó chúng ta chỉ việc mang từng phần tử trong dãy số đem đối chiếu và đếm. Vậy là chúng ta chỉ cần khai báo một mảng, duyệt một lần bằng vòng lặp 3
  5. khi xử lý đem lại kết quả nhanh hơn. Có thể áp dụng mảng đánh dấu cho cả bài toán đếm số và đếm kí tự trong xâu một cách dễ dàng. 2.3. Áp dụng một số bài toán tìm số lần xuất hiện của các phần tử Bài toán 1: Lỗ hổng chữ số Các chữ số từ 0 đến 9, nếu một chữ số bất kỳ có một đường khép kín thì ta gọi chữ số đó có 1 lỗ hổng, có hai đường khép kín thì ta gọi số đó có 2 lỗ hổng, và không có đường khép kín nào thì ta gọi chữ số đó có 0 lỗ hổng. Vậy các chữ số 0, 4, 6, 9 có 1 lỗ hổng, chữ số 8 có 2 lỗ hổng và các chữ số 1, 2, 3, 5, 7 có 0 lỗ hổng. Cho một số nguyên dương N (1 ≤ N ≤ 2147483647), ta luôn đếm được số lỗ hổng của các chữ số xuất hiện trong nó. Ví dụ: Với N = 388247 thì ta đếm được N có 5 lỗ hổng. Yêu cầu: Đếm số lỗ hổng của số nguyên dương N. Dữ liệu vào: Nhập số nguyên dương N từ bàn phím. Dữ liệu ra: In số lỗ hổng của số nguyên dương N ra màn hình. Ví dụ: Nhập vào từ bàn phím N = 388247 Kết quả in ra màn hình: 5 Ý tưởng và Chương trình thực hiện áp Ý tưởng và Chương trình thực hiện dụng mảng đánh dấu bình thường Sử dụng một mảng gồm 10 phần tử từ Sử dụng một vòng lặp để tách từng 0 đến 9; 10 phần tử này được gán sẵn chữ số ra, trong quá trình tách số đem giá trị lần lượt theo thứ tự giá trị mà chữ số được tách kiểm tra xem có số đó có bao nhiêu lỗ hổng. Sau đó mấy lỗ hổng rồi cộng dồn lại, kết hợp duyệt số nhập vào tách thành từng kí bằng vòng lặp và câu lệnh lựa chọn tự để đếm, tổng các giá trị được lưu theo giá trị. Thuật toán này cũng cho vào biến đếm. Thuật toán này chỉ thời gian thực hiện khoảng O(n) tuy dùng một vòng lặp nên thời gian thực nhiên thuật toán này chỉ áp dụng hiện của nó là O(n). Thuật toán này có được đối với số nguyên có giới hạn thể áp dụng được cho số có tối đa 255 10 chữ số chữ số. Chương trình: Chương trình: Program Lo_hong_chu_so; Program Lo_hong_chu_so; var n, sodu, dem: integer; const A: array['0' '9'] of byte begin =(1,0,0,0,1,0,1,0,2,1); readln(n); Var n,i,dem:longint; dem :=0; sodu :=0; s:string; while n <> 0 do Begin begin Readln(n); sodu:= n mod 10; Str(n,s); n := n div 10; dem:=0; case sodu of For i:=1 to length(s) do 0,4,6,9: dem :=dem +1; dem:=dem+A[s[i]]; 8: dem := dem +2; 4
  6. Writeln(dem); end; Readln; end; End. writeln(dem); readln end. Bài toán 2: Đếm kí tự: Cho xâu kí tự S có tối đa 255 kí tự được lấy từ tập các ký tự ’a’ ’z’, ’A’ ’Z’. Yêu cầu: Hãy đếm số lượng từng kí tự xuất hiện trong xâu S. Dữ liệu vào: Nhập xâu S từ bàn phím. Dữ liệu ra: In ra màn hình từng kí tự với số lượng đếm được. Ví dụ: Nhập vào từ bàn phím xâu: ’tinhoc’ In ra màn hình: t :1 i :1 h : 1 o : 1 c : 1 Ý tưởng và Chương trình thực hiện áp Ý tưởng và Chương trình thực hiện dụng mảng đánh dấu bình thường Sử dụng một mảng kí tự gồm 26 phần Sử dụng một mảng 255 kí tự để có thể tử tương ứng với 26 chữ cái trong chứa độ dài tối đa của chuỗi, các phần bảng mã ASCII từ A đến Z. sau đó tử có kiểu dữ liệu kí tự. Duyệt từ đầu tách từng kí tự trong chuỗi đem kiểm xâu đến cuối xâu, kiểm tra lần lượt tra trong mảng, nếu nó thuộc kí tự nào từng kí tự, nếu trùng nhau thì tăng tương ứng phần tử đó thì cộng giá trị biến đếm lên và gán cho giá trị phần vào cho phần tử đó. Thuật toán này tử đó, các phần tử còn lại đặt giá trị chỉ duyệt 26 phần tử nên hết sức bằng 1, các phần tử trùng mà phía sau nhanh gọn, thời gian thực hiện tức thì. bị loại bằng “bẫy true - false”. Thuật toán này có 2 vòng lặp lồng nhau nên thời gian thực hiện là O(n2). Chương trình: Chương trình program bai_tap_ki_tu_trung_nhau; program bai_tap_ki_tu_trung_nhau; Uses Crt; Var b:array[1 255] of char; Var St:String; St: string; dem: Array[‘A’ ’Z’] Of Byte; n,m,x,i,j,k,dem:integer; i:Byte; kt:boolean; ch:Char; f: text; Begin BEGIN Write(‘Nhap xau St: ‘); Readln(St); Write(‘Nhap xau St: ‘); Readln(St); {Khởi tạo mảng} x:=0; n:=length(st); For ch:=’A’ To ‘Z’ Do dem[ch]:=0; for i:=1 to n do 5
  7. {Duyệt xâu} begin For i:=1 To Length(St) Do kt:=true; If Upcase(St[i]) IN [‘A’ ’Z’] for j:=1 to i-1 do if st[i]=st[j] then Then kt:=false; Inc(dem[Upcase(St[i])]); if kt=true then {Liệt kê các ký tự ra màn hình} begin For ch:=’A’ To ‘Z’ Do dem:=1; If dem[ch]>0 Then Writeln(ch,’ : for k:=1 to n do ’,dem[ch]); if st[i]=st[k] then inc(dem); Readln; if dem >0 then begin inc(x); End. b[x]:=dem; end; for m:=1 to n do writeln(st[m], ‘:’, b[m]); end; end. Bài toán 3 : Tìm số lần xuất hiện của từng phần tử Cho tập hợp S có N phần tử nguyên dương {s1, s2, , sN}. (1 ≤ N ≤ 32000; 0 < si ≤ 32000; 1 ≤ i ≤ N) Yêu cầu: Hãy liệt kê các phần tử trong S có số lần xuất hiện lớn hơn một lần. Dữ liệu vào: Cho trong file văn bản TS.INP có cấu trúc như sau: - Dòng 1: Ghi số nguyên dương N. - Dòng 2: Ghi N số nguyên dương là giá trị các phần tử của tập hợp S, các số được ghi cách nhau ít nhất một dấu cách. Dữ liệu ra: Ghi ra file văn bản TS.OUT trên nhiều dòng, dòng thứ i ghi 2 số si di, hai số cách nhau một dấu cách. Trong đó si là phần tử xuất hiện trong S lớn hơn một lần và di tương ứng là số lần si xuất hiện. Ví dụ: TS.INP TS.OUT 7 3 2 2 5 5 3 5 3 9 5 3 Ý tưởng và Chương trình thực hiện Ý tưởng và Chương trình thực hiện áp dụng mảng đánh dấu bình thường Sử dụng một mảng số nguyên có Sử dụng 2 mảng số nguyên, mảng đầu 32001 phần tử có giá trị từ 0 đến chứa dãy số được nhập vào, mảng thứ 32000. Đánh dấu (gán) giá trị ban đầu 2 chứa tần suất xuất hiện của số đó. cho các phần tử này đều bằng 0. Sau Dùng 2 vòng lặp để duyệt và bẫy các đó duyệt dãy số, số nào tương ứng số trùng nhau và đếm. Vì dùng 2 vòng với chỉ số phần tử thì cộng vào thêm lặp lồng nhau và 2 mảng nên chương 1 vào giá trị của nó. Thuật toán này trình tốn nhiều bộ nhớ và thực hiện chỉ áp dụng một câu lệnh lặp nên thời khá lâu, thời gian thực hiện là O(n2) gian thực hiện nhanh tức thời O(n). 6
  8. Chương trình: Chương trình: program dem_so_trung_nhau; program bai_tap_dem_so_trung_nhau; const fi='TS.INP'; const fi='ts.inp'; fo='TS.INP'; fo='ts.out'; Var a : array[0 32000] of word; Var a,b:array[1 100] of integer; f:text; n,m,x,i,j,k,dem:integer; n,d:word; kt:boolean; i,x:word; f: text; Begin BEGIN Fillchar(A,sizeof(A),0); assign(f,fi); reset(f); readln(f,n); assign(f,fi); reset(f); for i:=1 to n do readln(f,a[i]); readln(f,n); close(f); For i:=1 to n do assign(f,fo);rewrite(f); Begin x:=0; read(f,x); for i:=1 to n do a[x]:=a[x]+1; begin End; kt:=true; close(f); for j:=1 to i-1 do if a[i]=a[j] then assign(f,fo); rewrite(f); kt:=false; For i:=0 to 32000 do if kt=true then if a[i]>1 then writeln(f,i,' ',a[i]); begin close(f); dem:=1; Readln; for k:=1 to n do End. if a[i]=a[k] then inc(dem); if dem >0 then begin inc(x); b[x]:=dem; end; for m:=1 to x do writeln(f,b[m]); end; close(f); end. 2.4. Hiệu quả của đề tài: Với những biện pháp trên đây, tôi đã áp dụng cho 03 lớp 8 trong học kỳ II năm học 2014 – 2015 như sau: Đề bài: Em hãy nhập vào một dãy số nguyên có N phần tử (0<n<32000). In ra các phần tử có số lần xuất hiện nhiều nhất. Yêu cầu thời gian thực hiện không quá 1 giây mỗi lần chạy. Kết quả như sau: GIỎI KHÁ TB YẾU TT LỚP TSHS SL % SL % SL % SL % 1 8A 31 8 25.8 15 48.4 8 25.8 0 0.0 2 8B 32 8 25.0 14 43.8 10 31.3 0 0.0 3 8C 30 7 23.3 15 50.0 7 23.3 1 3.3 Cộng K8 93 23 24.7 44 47.3 25 26.9 1 1.1 7
  9. Qua kết quả kiểm tra cho thấy, những học sinh yếu kém đã khắc phục được các lỗi về khai báo, nhập và xuất dữ liệu trên mảng và đã bước đầu biết cách giải bài toán tuy nhiên chưa thể hiện rõ được thuật toán. Đối với học sinh đạt kết quả khá tăng lên và đều làm được theo kiểu mảng đánh dấu tuy nhiên vẫn còn quên gán giá trị mặc định ban đầu cho mảng, các canh chỉnh định dạng khi in ra. Đối với học sinh đạt kết quả giỏi thể hiện được trọn vẹn bài làm, chương trình trình bày rõ ràng, ngắn gọn và thời gian thực hiện đáp ứng được yêu cầu của bài toán. Như vậy, từ những kỹ năng thực hành ban đầu còn hạn chế, sau khi được áp dụng những giải pháp trên chất lượng học tập của học sinh cải thiện vượt bậc. Chứng tỏ những phương pháp trên đã có hiệu quả và không những thế, minh chứng là sự hứng thú trong học tập và chủ động tích cực trong các tiết học lập trình Tin học. KẾT LUẬN 1. Ý nghĩa của đề tài, giải pháp: Mặc dù mới được nghiên cứu và áp dụng nhưng từ những kết quả đạt được cho thấy hướng nghiên cứu là khả dụng. Phương pháp sử dụng mảng đánh dấu đã giúp cho việc viết chương trình trở nên ngắn gọn, dễ hiểu hơn và thời gian chạy chương trình nhanh hơn. Học sinh có thể vận dụng linh hoạt vào nhiều dạng bài khác nhau trên các kiểu dữ liệu khác nhau cho kết quả chính xác nhanh chóng. Nhờ đó sự hứng thú thích khám phá các cách giải và dạng bài khác nhau của học sinh tăng lên. Để có được phương pháp dạy học phù hợp với kiểu bài, với tư duy của học sinh, giáo viên phải có một quá trình tìm tòi, suy ngẫm về đổi mới phương pháp và thử nghiệm trên lớp mới có thể định hình được phương pháp tối ưu cho đối tượng học sinh mình giảng dạy. Từ một bài học đơn giản đến phức tạp, giáo viên cần có phương pháp dẫn dắt hữu hiệu, phù hợp với đối tượng thì học sinh mới tiếp thu và vận dụng. Tránh tình trạng áp đặt suy nghĩ là kiến thức làm cho học sinh không thấy được sự đa dạng trong cách giải, sự hạn chế của thuật toán và gây nhàm chán, nặng nề cho học sinh. Trong quá trình dạy học, việc hình thành ý tưởng và tìm hiểu cách giải bài toán là vô cùng quan trọng. Vì thế, khi củng cố bài học giáo viên cần phải khắc sâu kiến thức đã học cũng như hướng dẫn các em chuẩn bị bài học ở nhà thật chu đáo. Đồng thời trong quá trình học, giáo viên khuyến khích các em tự tìm tòi sáng tạo các cách giải khác nhau cũng như việc tham khảo cách giải của người khác để qua đó tích lũy được kinh nghiệm viết chương trình và có được kết quả cao trong học tập. 2. Kiến nghị. Tại đơn vị, đa số học sinh đều có hoàn cảnh kinh tế gia đình khó khăn, việc tiếp cận với máy tính và học Tin học còn hạn chế, chủ yếu là từ Nhà trường. Vậy nên Nhà trường và giáo viên trực tiếp giảng dạy cần có kế hoạch 8
  10. dạy học sát đối tượng học sinh và đồng thời áp dụng nhiều phương pháp dạy học sáng tạo đổi mới để qua đó kích thích tính tự học, tự sáng tạo của học sinh thông qua các bài giảng có ví dụ thực tiễn, hình ảnh minh họa, tính liên hệ, so sánh, và thực hành kiểm chứng, Giáo viên cần tìm tòi hiểu sâu từng nội dung bài học để qua đó đưa ra được những hướng dẫn mang tính kích thích sự tìm tòi, tiếp cận bài học của học sinh để phát huy được tính sáng tạo, khám phá của học sinh. Giáo viên bộ môn Tin học cần tăng cường dự giờ trao đổi kinh nghiệm giảng dạy để học hỏi phương pháp từ đồng nghiệp. Nâng cao năng lực tự học, tự nghiên cứu để tích lũy trau dồi thêm kiến thức chuyên môn của mình. Trên đây là một vài kinh nghiệm nhỏ của tôi trong việc giảng dạy bộ môn Tin học lớp 8 mà qua mấy năm giảng dạy tôi đã tìm tòi, suy nghĩ và viết ra. Chắc chắn rằng vẫn còn nhiêu thiếu sót trong lập luận, trong phương pháp giảng dạy bộ môn và cách trình bày. Tôi rất mong được sự góp ý của đồng nghiệp, bạn bè, các thầy, các cô để bản sáng kiến được hoàn thiện hơn! Tôi xin chân thành cảm ơn! 9
  11. TÀI LIỆU THAM KHẢO - Cấu trúc dữ liệu và giải thuật – Lê Minh Hoàng - Một số phương pháp giải bài toán trong tin học – Lê Thủy Thạch - Giáo trình ngôn ngữ Pascal – Nhà xuất bản giáo dục - Cấu trúc dữ liệu và giải thuật – Đỗ Xuân Lôi - Ngôn ngữ lập trình Turbo Pascal – Quách Tuấn Ngọc - Mạng Internet 10