SKKN Rèn luyện tư duy thuật toán trong học lập trình Pascal - Tin học 8 tại trường Phổ thông thực hành chất lượng cao Nguyễn Tất Thành
Tin học đang phát triển ngày ngày càng nhanh và trở thành nhân tố vô cùng cần thiết trong mọi lĩnh vực. Trong đó tin học được sử dụng phổ biến và đặc biệt quan trọng trong giáo dục. Tin học được đưa vào chương trình tin học nhà trường cũng như hỗ trợ giảng dạy. Cùng với đó, Trong những năm học gần đây Bộ GD&ĐT đang tiến hành đổi mới phương pháp dạy học và một trong những phương pháp đó là phát triển khả năng tư duy, sáng tạo của học sinh; lấy học sinh làm trung tâm; tránh tình trạng thầy đọc trò chép một cách thụ động; hướng học sinh đến việc tự làm chủ kiến thức của mình, tự tìm tòi khám phá kiến thức cho bản thân mình.
Theo phương pháp trên thì ngoài việc cung cấp kiến thức cho học sinh người thầy còn phải biết phát huy khả năng tư duy cho học sinh. Trong quá trình dạy học tôi nhận thấy một điểm hạn chế của học sinh là khi các em tiếp xúc với ngôn ngữ lập trình pascal thì hầu hết các em đều thấy nó khó, khó nhớ, khó áp dụng. Chính vì lí do đó mà khi học nội dung này các em chỉ học cho xong, học đối phó với thầy cô, các em cố tìm những đoạn mã lệnh rồi gõ theo và chạy chương trình cho có kết quả mà cũng không cần biết những đoạn mã lệnh đó làm việc như thế nào. Đôi với những học sinh khá hơn thì khi các em có tìm ra lời giải cho một bài toán thì các em đã vội hài lòng với kết quả mình đạt được mà không tìm hiểu thêm liệu có cách giải nào hay hơn không? Có thể cải tiến chương trình cho hiệu quả, ngắn học hơn không?
Từ những thắc mắc đó, và sau một thời gian giảng dạy nội dung lập trình pascal cho đối tượng là học sinh lớp 8 tôi đã rất băn khoăn. Phải làm gì để học sinh của tôi có thể thay đổi cách nhìn nhận với môn học và cách học với môn lập trình này. Sau một thời gian suy nghĩ tôi cho rằng muốn thay đổi được các em thì trước tiên người thầy phải thay đổi, thay đổi cách tiếp cận nội dung, thay đổi phương pháp. Phải làm thế nào để các em có thể yêu thích môn học này, có yêu thích hứng thú thì các em mới có thể tập trung học tập nghiêm túc được, các em sẽ không còn học đối phó nữa. Khi các em yêu thích thì hãy hướng các em đi từ việc đơn gian tới phức tạp, nhìn nhận vấn đề hay giải các bài toán bằng nhiều cách để từ đó các em lĩnh hội được đầy đủ và chủ động kiến thức môn học. Từ những lí do trên tôi quyết định nghiên cứu và thực hiện sáng kiến “ RÈN LUYỆN TƯ DUY THUẬT TOÁN TRONG HỌC LẬP TRÌNH PASCAL - TIN HỌC 8 TẠI TRƯỜNG PT THỰC HÀNH CHẤT LƯỢNG CAO NGUYỄN TÁT THÀNH” nhằm giúp học sinh lớp 8 khắc phục được những hạn chế nêu trên và tạo sự ham mê yêu thích của học sinh với môn học lập trình này.
ưu điểm và hạn chế riêng: - Phương pháp 1: Giúp học sinh làm quen với câu lệnh điều kiện dạng đủ lồng nhau và điều kiện ghép ((a>b) and (a>c)) trong câu lệnh điều kiện thông qua phép toán and. - Phương pháp 2: Giúp học sinh làm quen với lệnh gán, sử dụng biến trung gian Max, Min và câu lệnh ghép (Begin Max:=a; Min:=b; End) trong câu lệnh điều kiện. - Phương pháp 3: Giúp học sinh làm quen với câu lệnh điều kiện dạng thiếu và ôn lại kiến thức sắp xếp giá trị hai biến theo thứ tự tăng hoặc giảm dần begin Tam:=a; a:=b; b:=tam end; Tóm lại: Với mỗi bài toán nếu có thể hãy tìm ra nhiều cách tiếp cận khác nhau, các cách viết chương trình khác nhau để học sinh có thể mở rộng khả năng tư duy cũng như tạo sự yêu thích khi tìm thấy niềm vui ở mỗi cách xây dựng bài toán. Qua đó học sinh sẽ có cách nhìn linh hoạt hơn với mỗi cấu trúc câu lệnh, phát huy tính tích cực và sáng tạo cho học sinh. 2.2.2.2. Rèn luyện kỹ năng lập trình với câu lệnh lặp Cấu trúc lệnh lặp là cấu trúc cơ bản trong ngôn ngữ lập trình pascal và cấu trúc này cũng là cấu trúc giúp học sinh giải quyết một lượng lớn các dạng bài tập. Tuy nhiên khi tiếp cận câu lệnh lặp này thì học sinh lại khó hình dung ra cách hoạt động của từng cấu trúc, đặc biệt là học sinh khó phân biệt cấu trúc lặp xác định và lặp với số lần lặp không xác định. Một lỗi mà học sinh thường gặp khi làm việc với cấu trúc lặp đó là không xác định được điều kiện để dừng vòng lặp. Chính vì những lý do trên mà khi dạy cho học sinh cấu trúc lặp giáo viên cần xây dựng các ví dụ sử dụng cấu trúc này cụ thể để học sinh hiểu rõ và ghi nhớ sau đó các em mới hình thành phản xạ và kĩ năng lập trình có xử dụng cấu trúc lặp. Để học sinh có thể hiểu rõ và phân biệt được cấu trúc lặp chúng ta có thể giao cho học sinh bài toán sau: Ví dụ 1: Viết chương trình tính tổng số nguyên từ 1 tới n, n là số nguyên nhập từ bàn phím bằng cách sử dụng cấu trúc lặp For..do, While..do và cấu trúc Repeat ..until. Với bài toán này cho dù dùng cấu trúc lệnh lặp nào thì cũng cần xác định rõ bài toán với Input: Nhập vào số tự nhiên n, Output: in ra màn hình tổng của các chữ số từ 1 tới n vừa nhập vào. + Cấu trúc For..do ta có thể xây dựng chương trình như sau: var i, n: integer; s: real; Begin writeln('nhap so n de tinh tong'); readln(n); s:=0; for i:=1 to n do s:=s+i; writeln('tong tu 1-n la: =',s:2:0); readln; end. + Cấu trúc While ..do ta có chương trình như sau: var i: integer; s: real; begin writeln('nhap so n de tinh tong tu 1-n'); readln(n); s:=0;i:=0; while i<=n do begin i:=i+1; s:=s+i; end; writeln('tong tu 1- ' , n , ' la= ' ,s:5:2); readln; end. + Cấu trúc lệnh lặp Repeat ..until ta có chương trình như sau: var i:integer; s:real; begin write('n= '); readln(n); s:=0; i:=0; repeat i:=i+1; s:=s+i; until i=n; writeln('tong 1- ' , n, '=',s:0:2); readln; end. Trong bài toán nêu trên về cơ bản thì cả 3 cách viết đều cho một kết quả nhưng khi dạy làm quen với cấu trúc lặp thì chúng ta cần khuyên khích học sinh viết chương trình giải quyết cùng một bài toán nhưng dùng cả 3 cấu trúc lặp. Đối với câu lệnh lặp For .. do thì đại đa số học tiếp cận nhanh hơn và không bị nhầm lẫn, chỉ khi các em chuyển bài toán từ dùng Ror..do sang dùng while ..do và Repeat ..until thì hầu hết các em đều không hiểu rõ vẫn đề là điều kiện gì để vòng lặp có thể dừng. Chính vì lý do đó mà khi giúp các em xây dựng bài toán theo hướng While..do và Repeat..until giáo viên nên nhấn mạnh điểm này. Có thể cho học sinh rơi vào vòng lặp không dừng như ta có thể bỏ qua lệnh làm thay đổi giá trị của biến i (i:=i+1). Khi học sinh chạy thử chương trình sẽ bị lặp và dẫn tới không thoát được, khi đó mới phân tích điều kiện dừng vòng lặp và yêu cầu học sinh gõ lại chương trình, khi đó học sinh mới hiểu rõ được bản chất của hai câu lệnh dạng này đồng thời đó cũng là một kinh nghiệm cho các em khi lập trình mà sử dụng cấu trúc lặp không xác định này. Mặt khác của vấn đề là khi dạy cho học sinh các cấu trúc lệnh lặp thì ngoài việc dạy các em cấu trúc còn phải giúp các em nhận diện bài toán để có thể áp dụng được tốt các cấu trúc lệnh sao cho phù hợp. Khi các em nhận diện được cấu trúc lệnh để giải quyết bài toán thì vấn đề đặt ra là các bài toán đó các em đã giải quyết tốt chưa? Tức là chương trình các em xây dựng đã hoàn hảo chưa? Đến lúc này giáo viên cần giúp các em tinh chỉnh bài toán của các em sao cho tối ưu nhất. Chúng ta sẽ xem xét vấn đề này qua một số ví dụ sau: Ví dụ 2: Số nguyên tố là số tự nhiên lớn hơn 1, chỉ có hai ước là 1 và chính nó. Yêu cầu: Nhập vào số nguyên dương N. Kiểm tra xem N có phải là số nguyên tố hay không, thông báo kết quả sau khi kiểm tra. Xác định bài toán: Input: Nhập vào một số tự nhiên N, Output: N có phải là số nguyên tố hay không. * Phương pháp 1: - Ý tưởng: + Cho biến i chạy từ 2 đến n-1 {Ta xét trường hợp n có chia hết cho i hay không}, nếu n chia hết cho i thì ta tăng biến đếm lên một đơn vị {ban đầu biến đếm nhận giá trị bằng 0}. + Kiểm tra biến đếm, nếu biến đếm nhận giá trị bằng không {tức n không chia hết cho số nào trong khoảng từ 2 đến n-1} vậy n là số nguyên tố, ngược lại biến đếm nhận giá trị lớn hơn 0{tức n chia hết cho cho một hoặc nhiều giá trị trong khoảng [2..n-1]} vậy n không phải là số nguyên tố. Chương trình: Var n,i,dem:Integer; Begin Write('Nhap gia tri N: ');Readln(n); If n<2 Then Write(n, Khong phai la so nguyen to') Else Begin dem:=0; For i:=2 To n-1 Do If n Mod i = 0 Then Inc(dem); If dem=0 Then Writeln(n, ' La so nguyen to') Else Writeln(n, ' Khong phai So nguyen to'); End; Readln; End. * Phương pháp 2: - Bổ sung kiến thức: + N là số Nguyên tố khi n>=2 và n không chia hết cho số nào có giá trị trong khoảng từ 2 đến n – 1. Tuy nhiên trên thực tế thì chỉ cần n không chia hết cho số nào có giá trị trong khoản từ 2 đến số nguyên gần với căn n nhất nhưng nhỏ hơn n {Trunc(Sqrt(n))}. - Ý tưởng: + Giống như phương pháp 1 tuy nhiên ở đây chúng ta không đếm mà sử dụng phương pháp đánh dấu của kiểu boolean. Tức ta xét trường hợp n có chia hết cho i hay không, nếu n chia hết cho i thì ta đánh dấu là False {Giả sử biến KT có biểu dữ liệu là Boolean thì nếu n chia hết cho i thì KT:=False, ban đầu ta gán KT:=True}. + Kiểm tra biến KT, nếu KT là True {tức biến KT nhận tất cả là True} thì n là số nguyên tố, ngược lại n không phải số nguyên tố {tức biến KT có nhận lớn hơn hoặc bằng một giá trị False}. - Chương trình: Var i,n:Integer; Kt:Boolean; Begin Write('Nhap gia tri N: ');Readln(n); Kt:=True; If n < 2 Then Kt:=False Else For i:=2 To Trunc(Sqrt(n)) Do If n Mod i = 0 Then Kt:=False; If Kt Then Write(n,' la so nguyen to') Else Write(n,' Khong la so nguyen to'); Readln; End. => Nhận xét: - Phương pháp 1: Giúp cho học sinh có cái nhìn tổng quan hơn khi xác định n có phải là số nguyên tố hay không thông qua phương thức đếm số lần n có chia hết cho giá trị nào trong khoảng từ [2..n-1] hay không, theo định nghĩa thì số nguyên tố là số chỉ chia hết cho 1 và chính nó {tức nếu N là số nguyên tố chỉ khi n chia hết cho 1 và n}. Vậy nếu n còn chia hết cho số nào trong khoảng [2..n-1] thì n không phải nguyên tố. - Phương pháp 2: Phương giáp này giúp học sinh tìm hiểu được nhiều kiến thức hơn trên nền kiến thức của phương pháp 1. Khi cho i chạy từ 2 đến trunc(sqrt(n)) thì số lần thực hiện vòng lặp được giảm đi một nữa, sẽ tiết kiệm được thời gian khi chạy chương trình; mặt khác giúp học sinh ôn lại kiến thức lấy kết quả phép so sánh của kiểu dữ liệu Boolean, một kiểu dữ liệu mà chúng ta cũng rất hay sử dụng trong các bài tạo vòng lặp. Ví dụ 3: Viết chương trình nhập vào 2 số nguyên dương a, b khác nhau. Tìm ước chung lớn nhất và bội chung nhỏ nhất của 2 số trên. - Xác định bài toán: Input: Nhập vào hai số nguyên dương a, b Output: In ra màn hình UCLN(a,b) và BCNN(a,b) * Phương pháp 1: - Ý tưởng: Đầu tiên, là cách cơ bản nhất. Đó là dùng vòng lặp WHILE, rồi lấy số lớn trừ nhỏ cho đến khi chúng bằng nhau. Cách này dành cho những bạn học yếu, đỡ phải suy nghĩ nhiều. Tuy nhiên cách này có hạn chế là nếu mà 2 số chênh nhau quá lớn thì nó sẽ lặp rất nhiều lần, điều này không quan trọng đối với các bạn học sinh, nhưng nếu đi sâu vào chuyên ngành thì việc làm này sẽ tốn dung lượng bộ nhớ và thuật toán này cũng được đánh giá là kém tối ưu. Ví dụ tìm UCLN và BCNN của 17 và 3 (bằng phương pháp đoán nhận ta thấy được UCLN của 2 số này là 1 và BCNN là 51). Giáo viên có thể mô phỏng thuật toán cho học sinh hiểu như sau: - UCLN : ta sẽ lấy 17 - 3 = 14, 14 - 3 =11, 11- 3 = 8; 8 - 3 = 5; 5 - 3 = 2; 3-2=1; 2-1 =1; Lúc này chúng đã bằng nhau và bằng 1. Và 1 cũng chính là UCLN. - BCNN : bằng tích của 2 số chia cho UCLN lấy phần nguyên. + Tích của 2 số là 17x3 = 51 + Chia 1 lấy phần nguyên là bằng 51. var x,y,UCLN,BCNN:integer; Begin readln(x,y); BCNN:=x*y; While xy do If x>y then x:=x-y else y:=y-x; UCLN:=x; BCNN:=BCNN div UCLN; write(UCLN,' ',BCNN); end. · Lưu ý: Sau khi test chương trình xong giáo viên cho học sinh test cặp giá trị a, b bằng nhau. Yêu cầu học sinh nhận xét, nêu thuật toán và viết lại chương trình trên với điều kiện a, b là hai số nguyên. * Phương pháp 2: - Ý tưởng: + Nếu a chia b có phần dư bằng 0 thì b là UCLN của a và b. Từ khái niệm này ta xây dựng thuật toán như sau: du:= a mod b, a:=b; b:=du, chương trình kết thúc khi b=0 và UCLN là a. + Viết ra UCLN, BCNN - Chương trình: Var a,b,p,du:Integer; Begin Write('Nhap gia tri a, b tuong uong : ');Readln(a, b); P:=a*b; While b0 Do Begin Du:=a mod b; a:=b:b:=du; End; Writeln('UCLN la: ',a,' BCNN la: ',P Div a); Readln; End. * Phương pháp 3: - Ý tưởng: + Ta cho biến i chạy từ 1 đến a, nếu thỏa mãn đồng thời 2 điều kiện (a mod i =0) và (b mod i =0) thì i là UCLN của a và b. + Viết ra UCLN, BCNN - Chương trình: Var a,b,p,d:Integer; Begin Write('Nhap gia tri a, b tuong uong : ');Readln(a, b); P:=a*b; For i:=1 To a Do if (a mod i=0) and (b mod i=0) then d:=i Writeln('UCLN la: ',d, ‘BCNN la: ',p Div d); Readln; End. * Phương pháp 4: - Ý tưởng: + Ta cho biến i chạy downto từ a đến 1, nếu thỏa mãn đồng thời 2 điều kiện (a mod i =0) và (b mod i =0) thì i là UCLN của a và b đồng thời kết thúc việc tìm kiếm {kết thúc vòng lặp}. + Viết ra UCLN, BCNN - Bổ sung kiến thức: Lệnh break + Cú pháp: Break + Hoạt động: Lệnh break hoạt động khi được đặt trong thân các vòng lặp for, while, repeat. Khi gặp lệnh break thì máy sẽ thoát khỏi chu trình của vòng lặp, nếucó nhiều vòng lặp lồng nhau sẽ thoát vòng lặp trong nhất chứa lệnh break; - Chương trình: Var a,b,p,d:Integer; Begin Write('Nhap gia tri a, b tuong uong : '); Readln(a, b); P:=a*b; For i:=a Downto 1 Do if (a mod i=0) and (b mod i=0) then d:=i; Writeln('UCLN la: ',d, ‘BCNN la: ',p Div d); Readln; End. => Nhận xét: - Phương pháp 1, 2: Nếu chúng ta cho học sinh thực hiện vòng While .. Do hoặc Repeat .. Until để viết chương trình cho hai phương pháp trên thì cơ bản thuật toán không thay đổi chỉ khác nhau là sử dụng phương pháp chia liên tiếp hay trừ liên tiếp. Tuy nhiên ở đây chúng ta sử dụng While .. Do cho phương pháp 1 và Repeat .. Until cho phương pháp 2 với mục đích giúp các em tìm hiểu thêm sự khác nhau trong điều kiện lặp và kết thúc hai câu lệnh trên, từ đó yêu cầu các em chỉnh sửa câu lệnh, thuật toán chia, trừ liên tiếp ngược lại trong hai phương pháp để khắc sâu kiến thức hơn. - Phương pháp 3, 4: Phương pháp này giúp các em ôn lại 2 nội dung kiến thức, một là điều kiện ghép trong câu lệnh điều kiện, hai là vòng lặp với số lần biết trước. Khi thực hiện vòng lặp dạng tiến For i:=1 To a thì có thể có nhiều giá trị thỏa mãn nhưng chương trình sẽ nhận được giá trị cuối cùng khi kết thúc lặp, giá trị này là giá trị ta cần tìm trong bài toán. Trong phương pháp 4 các em còn tìm hiểu thêm được kiến thức mới về câu lệnh Break. Lệnh này thường được áp dụng để tìm giá trị nhỏ nhất, lớn nhất thỏa mãn các điều kiện nào đó. Ví dụ Viết chương trình tìm số nguyên dương T nhỏ nhất có N chữ số, biết rằng khi chia T cho 19 thì dư 13 và khi chia T cho 31 thì dư 12. 2.2.2.3. Rèn luyện kỹ năng lập trình với mảng một chiều. Trong quá trình học lập trình, khi học sinh học bài: Kiểu mảng học sinh gặp rất nhiều khó khăn với kiểu dữ liệu này. Qua quá trình giảng dạy tôi nhận thấy học sinh gặp khó khăn như vậy vì học sinh khó hình dung ra kiểu dữ liễu mới này, không hiểu rõ được cấu trúc lưu trữ kiểu mảng cũng như các cách làm việc với các phần tử trong mảng. Để học sinh hiểu và lập trình được các bài toán đơn giản, giáo viên phải hướng dẫn học sinh các công việc liên quan đến mảng một chiều như: khai báo mảng một chiều, nhập mảng một chiều gồm các phần tử theo ý muốn, xử lý mảng một chiều đơn giản như: tính tổng các phần tử của mảng, đếm các phần tử của mảng, tìm kiếm các phần tử của mảng hay xuất các phần tử của mảng thỏa điều kiện nào đó. Từ đó học sinh có thể lập trình giải bài toán sắp xếp dãy số nguyên (tăng dần hoặc giảm dần), tìm phần tử lớn nhất (hoặc nhỏ nhất) của dãy số nguyên một cách đơn giản. Để tạo hứng thú cho học sinh, giúp các em gạt bỏ những khó khăn kể trên thì khi dạy phần mảng một chiều giáo viên cần bóc tách riêng từng phần công việc một. Chẳng hạn, trước tiên cần phải ghi nhớ cho học sinh việc ghi nhớ đầu tiên đó là việc khai báo mảng. Khai báo mảng là một công việc gần như cố định với tất cả các bài toán làm việc với dãy số hay còn gọi là mảng một chiều: + Để khai báo ta thực hiện như sau: Var : array [kiểu chỉ số] of ; + Sau khi đã khai báo kiểu dữ liệu mảng thì cần hướng dẫn học sinh cụ thể công việc nhập các phần tử của mảng: Write(‘Nhap so phan tu cua mang n =’); Readln(n); For i:= 1 to n do Begin Write(‘ Phan tu a[’,i,‘]=’); Readln(a[i]); End; Đây là đoạn lệnh thực hiện việc nhập vào từ bàn phím số phần tử của mảng và sau đó nhập từng giá trị của mảng. + Việc tiếp sau mà giáo viên yêu cầu học sinh ghi nhớ là việc in các phần tử của mảng vừa nhập được ra màn hình để học sinh quan sát dãy số vừa nhập qua câu lệnh: For i := 1 to n do write(a[i]:10); Sau khi học sinh đã nắm vững được 3 công việc tạm gọi là cố định của việc lập trình với mảng một chiều thì giáo viên mới mở rộng một số bài toán liên quan tới mảng một chiều theo từng cấp độ từ dễ tới khó để học sinh dần từng bước giải quyết. Chẳng hạn một số bài tập liên quan dạng: + In ra các phần tử chẵn của mảng: For i:=1 to do If a[i] mod 2 =0 then write(a[i]); + Tính tổng các phần tử của mảng: S:=0; For i:=1 to n do S:=s+a[i]; Write(‘ Tong cac phan tu mang:’,s); + In ra màn hình phần tử lớn nhất của mảng: max := a[1]; For i := 2 to n do If max <= a[i] then max := a[i]; Writeln(‘ Phan tu lon nhat cua mang la:’, max:10); Từ bài toán này giáo viên yêu cầu học sinh làm bài tương tự như tìm phần tử nhỏ nhất của mảng hay đếm xem trong mảng có bao nhiêu phần tử bằng phần tử K nhập vào từ bàn phím. Khi đã giải quyết được các bài toán này thì học sinh đã dần hình thành được kỹ năng làm việc với kiểu mảng, các em đã thông thuộc các công việc như khai báo, nhập mảng và xử lý các phần tử trong mảng thì phải thực hiện như thế nào. 2.3. Khả năng áp dụng, nhân rộng sáng kiến Học lập trình pascal nói riêng và học tin học nói chung đối với học sinh phổ thông cơ sở trong những năm vừa qua đã được nhà trường quan tâm, được đầu tư trang thiết bị phục vụ công tác giảng dạy tương đối đầy đủ. Tuy nhiên, với học sinh thì môn học này đối với các em chỉ là môn học phụ, các em tuy có yêu thích môn học nhưng chỉ ở những nội dung đơn giản như soạn thảo văn bản, sử dụng các phần mềm ứng dụng Mặt khác, khi được tiếp cận máy tính các em thường bị thu hút bởi mạng Intenet và Game hấp dẫn. Để từng bước thay đổi được suy nghĩ cũng như ý thức học tập của học sinh thì người giáo viên phải nhẫn lại và kiên trì chỉ bảo các em. Đặc biệt khi các em học nội dung lập trình pascal thì hầu hết các em đều thấy khó khăn, khó hiểu và lười tư duy. Để giúp các em khắc phục được điều này, bản thân tôi đã áp dụng các biện pháp nêu trong sáng kiến thì nhận thấy rằng: Khi giáo viên tận tâm với học sinh thì cũng tác động tới ý thức của phần lớn các học sinh, các em đã thay đổi và ý thức hơn khi lên học tại phòng máy, các em đã chịu khó tư duy và chủ động trong việc lập trình các bài toán bằng ngôn ngữ pascal. Từ việc trước đây các em chỉ gõ theo những bài mẫu, hay các ví dụ trong sách rồi chạy chương trình là xong, kể cả các em không hiểu bản chất, không hiểu các câu lệnh làm việc gì trong chương trình thì nay các em đã chịu khó hỏi và tìm hiểu các cấu trúc câu lệnh. So sánh sự khác nhau giữa các câu lệnh lặp để hiểu rõ hơn về câu lệnh. Chương 3. KẾT LUẬN VÀ KIẾN NGHỊ 3.1. Kết luận Tin học nói chung đóng vai trò rất quan trọng trong việc xây dựng các chương trình ứng dụng công nghệ để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học mà hiện nay hầu hết các lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công việc nhanh chóng, hiệu quả và chính xác hơn. Hơn thế, đó là việc học tập môn tin học nói chung và lập trình pascal nói riêng còn rèn luyện cho mỗi học sinh một tác phong làm việc nghiêm túc khoa học, một tư duy logic và sáng tạo trong môn học cũng như các môn học khác. Khi người giáo viên lên lớp mục tiêu đặt ra trong mỗi tiết dạy là rèn luyện cho các em kỹ năng sống, tác phong chuẩn mực và đạt được chuẩn kiến thức kỹ năng của bài học. Trong các mục tiêu kể trên thì mục tiêu giúp học sinh tích lũy kiến thức là mục tiêu mà bất kể người giáo viên nào cũng mong muốn và tìm mọi cách để đạt được. Sau một thời gian thực hiện SKKN tôi nhận thấy học sinh đã thay đổi và đạt được một số điểm như sau: - Thứ nhất: Giúp cho học sinh phát triển khả năng tư duy sáng tạo, tự chiếm lĩnh tri thức, khắc sâu kiến thức đã học, phát huy tính chủ động, tích cực trong việc tiếp thu kiến thức mới, khả năng suy luận khi giải quyết một vấn đề, qua đó giúp cho học sinh tìm ra được các phương pháp giải hay và ngắn gọn cho bài toán. - Thứ hai: Rèn luyện cho học sinh tính kiên trì, sáng tạo trong học tập, dần dần hoàn thiện kỹ năng và tự chủ, tự tin để viết chương trình trong quá trình học tập chứ không còn thụ động như trước. Từ điều này cũng giúp cho các em say mê và yêu thích môn học hơn, không còn thấy sợ khi nói tới lập trình pascal nữa. - Thứ ba: Tuy chưa có một con số thống kê cụ thể tính hiệu quả khi thực hiện SKKN nhưng tôi nhận thấy sự thay đổi lớn từ thái độ học tập của các em với môn học, đó là một tín hiệu tích cực và đáng mừng. Tôi nghĩ nếu có đủ thời gian và áp dụng sáng kiến này cho các năm học tới thì chất lượng học tập môn lập trình pascal sẽ được cải thiện và hy vọng các em sẽ có đủ tự tin để có thể tham gia các cuộc thi học sinh giỏi cấp thành phố và cấp tỉnh. 3.2. Kiến nghị, đề xuất - Về phía nhà trường: Xin được quan tâm hơn nữa đối với bộ môn về mặt trnag thiết bị. Hiện nay phòng máy đã có 2 phòng và số lượng mỗi phòng khoảng 25 máy như vậy cũng tương đối đầy đủ. Tuy nhiên, mật độ sử dụng máy tương đối cao vì có cả khối tiểu học và cao đẳng. Chính vì mật độ hoạt động như vậy mà máy bị xuống cấp nhanh. Khi các em lên phòng đôi khi còn mất thời gian để khơi động máy, cài đặt phần mềm - Về phía chuyên môn: Mong các thầy cô trong hội đồng đóng góp ý kiến để hoàn thiện sáng kiến và cho phép thực hiện sáng kiến này vào các năm học tiếp theo. Do năm học này bị ảnh hưởng của dịch bệnh Covid-19 nên đã giảm tải nội dung cũng như thời lượng của năm học, đó cũng là lý do mà sáng kiến chưa có đủ thời gian áp dụng, chưa nhận thấy được kết quả cụ thể qua những con số cụ thể. TÀI LIỆU THAM KHẢO [1]. Phạm Thế Long (2015). Tin học dành cho trung học cơ sở - Quyển 3, NXB Giáo dục,Việt Nam- Bộ Giáo dục và Đào tạo. [2]. Lê Khắc Thành- Hồ Cẩm Hà- Nguyễn Vũ Quốc Hưng (2007). Tài liệu bồi dưỡng thường xuyên giáo viên trung học phổ thông, NXB Đại học sư phạm. [3]. Đỗ Xuân Lôi (2006). Cấu trúc dữ liệu và giải thuật, NXB Đại học Quốc gia Hà Nội. [4]. Nguyễn Xuân My(2004). Lập trình, NXB Đại học Sư phạm
File đính kèm:
- SKKN-Hào-(sua-30-6).docx