SKKN Một số kinh nghiệm dạy lập trình Pascal
Tin học là một môn học đã được đưa vào giảng dạy ở các trường THCS từ rất lâu, nhằm giúp cho học sinh hiểu được vai trò của Máy tính và Khoa học máy tính đối với sự phát triển của một xã hội hiện đại; có khả năng lựa chọn, sử dụng được các thiết bị và phần mềm thông dụng.
Ngôn ngữ lập trình Pascal là một ngôn ngữ lập trình vở lòng (cơ bản nhất) trong các chương trình tin học đại cương. Pascal là một ngôn ngữ lập trình dùng để viết các chương trình ứng dụng trên máy tính.
Pascal không chỉ là môn học được đưa vào giảng dạy ở bộ môn Tin học 8 mà nó còn được lựa chọn để luyện thi HSG cấp huyện, cấp tỉnh trên địa bàn tỉnh Đăk Lăk.
Qua quá trình giảng dạy, bồi dưỡng, dự giờ đồng nghiệp và tìm hiểu học sinh, đặc biệt là qua các cuộc thi HSG hằng năm, tôi nhận thấy có một số vấn đề như sau:
- Học sinh không muốn học môn lập trình Pascal.
- Học sinh gặp khó khăn khi làm bài tập.
- Khó lựa chọn được học sinh vào đội tuyển tham gia bồi dưỡng HSG Tin học 8.
- Học sinh không muốn đăng ký học bộ môn này để thi HSG.
- Có học sinh tham gia dự thi HSG Tin học 8 hằng năm nhưng không đạt.
- Một số các thầy cô giảng dạy, do trình độ học sinh còn nhiều hạn chế nên có người nảy sinh tâm lý chán nản cho rằng mình có giảng nhiều, nói nhiều mà học sinh không chịu học, không tư duy thì bỏ công sức cũng chẳng đem lại tác dụng gì cả. Từ tâm lý đó lời giảng của một số thầy cô chỉ chuẩn bị sơ lược, nông cạn. Họ đã vô tình làm tắt nguội ở các em lòng đam mê, nghiên cứu môn “Lập trình”.
Tóm tắt nội dung tài liệu: SKKN Một số kinh nghiệm dạy lập trình Pascal

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))}. + Giả sử A và B là hai giá trị kiểu Boolean. Kết quả của các phép toán được thể hiện qua bảng dưới đây: Ý 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: Program KT_SONT; 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. Bài toán 2: 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. Phương pháp 1: Ý tưởng: + Kiểm tra hai giá trị a, b. Nếu a>b thì a:=a-b ngược lại thì b:=b-a, tiếp tục kiểm tra giá trị a, b và trừ cho đến khi nào a=b thì kết thúc. Lúc đó: USLN=a. + BCNN của hai số a, b bằng phần nguyên của a nhân b chia cho USLN(a,b). {BCNN(a,b) = a*b Div UCLL(a,b)}. Chương trình: Program UCLN_BCNN; Var a,b,p,du:Integer; Begin Write('Nhap gia tri a, b tuong uong : ');Readln(a, b); P:=a*b; Repeat If a>b Then a:=a-b Else b:=b-a; Until a = b; Writeln('UCLN cua a va b la: ',a,' BCNN la: ',p Div a); Readln; 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: Program UCLN_BCNN; 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; 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: Program UCLN_BCNN; 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ếu có 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: Program UCLN_BNNN; 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 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. c. Chuyên đề mảng một chiều. Dãy Fibonaci là dãy 1, 1, 2, 3, 5, 8, 13, 21, ... dãy này được sinh ra bởi công thức đệ qui sau: F1 =1, F2 =1, Fk=Fk-1+Fk-2 với 2<k≤46. Mọi số nguyên dương N đều có thể triển khai thành tổng của một số trong dãy Fibonaci. Yêu cầu: Cho trước số N, hãy triển khai N thành tổng của ít nhất các số hạng khác nhau của dãy Fibonaci. Phương pháp 1: Ý tưởng: + Triển khai N thành dãy Fibonaci và lưu vào mảng A. Ví dụ: N = 15 A 1 1 2 3 5 8 13 21 i 1 2 3 4 5 6 7 8 + Ban đầu t:=0, j:=0. Thực hiện vòng lặp Downto cho h chạy từ I đến 1, kiểm tra nếu t+ah ≤n thì tăng j lên một đơn vị và lưu ah vào bj , t:=t+ai, chương trình kết thúc khi t=n. + Viết ra mảng bi Chương trình: Program Fibonaci; Var a,b: array[1..100] of Longint; i,j,t,h,n:Longint; Begin Write('Nhap gia tri N:');Readln(n); a[1]:=1;a[2]:=1; i:=2; While a[i]<N Do Begin inc(i); a[i]:=a[i-1]+a[i-2]; End; t:=0;j:=0; For h:=i Downto 1 Do if t+a[h]<=n then Begin inc(j); b[j]:=a[h]; t:=t+b[j]; If b[j] = n then Break End; For i:=1 To j Do Write(b[i],' '); Readln; End. Phương pháp 2: - Ý tưởng: + Triển khai N thành dãy Fibonaci và lưu vào mảng A. + Thực hiện vòng lặp Downto cho h chạy từ i đến 1, kiểm tra nếu ah ≤n thì viết ra ah , n:=n-ah , chương trình kết thúc khi n=0. - Chương trình: Program Fibonaci; Var a,b: array[1..100] of Longint; i,j,t,h,n:Longint; Begin Write('Nhap gia tri N:');Readln(n); a[1]:=1;a[2]:=1; i:=2; While a[i]<N Do Begin inc(i); a[i]:=a[i-1]+a[i-2]; End; For h:=i Downto 1 Do if a[h]<=n then Begin Write(a[h], ‘ ’); N:=n-a[h]; If n = 0 then Break; Readln; End. => Nhận xét: - Phương pháp 1 và 2 khác nhau ở chỗ phương pháp 1 kiểm tra các phần tử trong a nếu nhỏ hơn hoặc bằng n thì chuyển phần tử đó vào mảng b, khi nào tổng của mảng b bằng n thì dừng, phương pháp 2 kiểm tra giá trị n, nếu n lớn hơn hoặc bằng phần tử trong mảng thì in ra phần tử trên và lấy lại giá trị mới cho n. - Nhìn chung phương pháp 2 học sinh dễ hiểu thuật toán hơn tuy nhiên ở phương pháp 1 lại giúp các em bổ sung thêm kiến thức về việc sử dụng nhiều biến mảng trong một chương trình. • Lưu ý chung: Trong các chuyên đề nêu trên, đối với các bài toán giải theo nhiều phương pháp, sau khi học sinh giải xong giáo viên cần cho học sinh nhận xét, phân tích mặt thuận lợi, khó khăn của mỗi phương pháp. Vì đây là điểm cốt lõi nhất để học sinh có thể so sánh điểm mạnh, yếu trong mỗi phương pháp giải từ đó khắc sâu được nội dung kiến thức và lựa chọn, đưa ra được phương pháp giải tối ưu nhất cho mình. Trong nội dung của đề tài tôi chỉ đưa ra một số bài toán để chúng ta cùng tham khảo, tôi quan niệm rằng với ngôn ngữ lập pascal thì mọi bài toán đều có thể được giải (viết chương trình) bằng nhiều phương pháp khác nhau. 4. Kết quả khảo nghiệm: Trên đây là một số biện pháp, hình thức giảng dạyg học sinh mà tôi đã áp dụng trong 2 năm trở lại đây. Sau đây là kết quả mà học sinh đã đạt được: KHỐI 8 Sĩ số Giỏi Khá Trung bình Yếu Kém TB trở lên SL % SL % SL % SL % SL % SL % TS 173 74 42.77 73 42.20 24 13.87 0 0.00 2 1.16 171 98.84 ( Học sinh có học lực “Kém” do học sinh vi pham nội quy. Vắng quá số buổi học. Có kiểm bản trong trong hồ sơ) Kết quả này cho thấy, số học sinh đạt chưa nhiều nhưng đạt chất lượng cao và duy trì được chất lượng học sinh giỏi hàng năm. Điều này đã phản ánh được tác dụng của những phương pháp, hình thức bồi dưỡng học sinh nói trên. III. KẾT LUẬN VÀ KIẾN NGHỊ 1. Những kết luận đánh giá cơ bản nhất về sáng kiến Tóm lại, như nội dung mà đề tài đã nêu, công tác chỉ đạo giảng dạy học sinh là một nhiệm vụ trọng tâm ở nhà trường phổ thông nói chung, trường THCS nói riêng. Đó là công việc khó khăn đòi hỏi sự nỗ lực chỉ đạo của ban giám hiệu, tổ chuyên môn, trăn trở của mỗi thầy cô giáo. Từ việc nghiên cứu nội dung, chương trình, các kiến thức cần đi sâu cho học sinh, các kỹ năng cần rèn luyện cho các em; việc cải tiến, đổi mới phương pháp dạy học. Giảng dạy học sinh giỏi phải gắn liền với việc nâng cao chất lượng. Phải quán triệt được phương châm: Dạy học theo đối tượng, trình độ tiếp thu ở học sinh. Không nên đưa những vấn đề quá khó đối với học sinh. Giáo viên cũng như các nhà quản lý phải kiên trì, bền bỉ xây dựng bài học một cách hệ thống, đồng bộ từ nhiều khâu, đặt ra nhiều giải pháp thực hiện theo điều kiện cơ sở vật chất và hoàn cảnh cụ thể ở từng nhà trường, từng địa phương. Tránh suy nghĩ chủ quan, nóng vội, phải tiến hành từ thấp đến cao, có kế hoạch. Thường xuyên chăm lo xây dựng đội ngũ giáo viên có tay nghề vững, trách nhiệm cao, gần gũi thương yêu học sinh. Chú trọng công tác đúc rút sáng kiến kinh nghiệm, đổi mới phương pháp dạy học, tạo không khí thi đua "dạy tốt - học tốt" thường xuyên trong nhà trường, củng cố phong trào khuyến học, tạo cơ sở vật chất tốt cho nhà trường. Là người thực hiện đề tài, tôi thấy rằng các cấp cần phải tập trung nhiều vào khâu bồi dưỡng giáo viên cả về tư tưởng, chính trị và nghiệp vụ. Tránh chạy đua thành tích, cần tạo được cái nền vững chắc về chất lượng học sinh, đánh giá, nắm rõ thực trạng chất lượng, tháo gỡ những khó khăn ách tắc. Cần đẩy mạnh xã hội hoá giáo dục, xây dựng truyền thống học tập rộng khắp ở mỗi địa phương, đẩy mạnh và cải tiến tiêu chí đánh giá thi đua khen thưởng, đầu tư kinh phí, động viên, khích lệ sự cố gắng ở giáo viên, học sinh một cách hợp lý. Đầu tư cho công tác bồi dưỡng học sinh giỏi là tạo nền móng cho chiến lược nhân tài, là đầu tư cho chiến lược con người của quê hương, đất nước phục vụ sự nghiệp công nghiệp hóa, hiện đại hoá đất nước. Vì vậy cần được sự tập trung chỉ đạo nhiều hơn nữa của các nhà trường và các cấp quản lý giáo dục 2. Đề xuất, kiến nghị Giảng dạy học sinh là một công tác trọng tâm ở các nhà trường phổ thông. Nhiệm vụ của mỗi giáo viên là phải nâng cao được chất lượng giảng dạy, bồi dưỡng học sinh giỏi, để phát hiện và bồi dưỡng đạt kết quả tốt người giáo viên là yếu tố cơ bản. Giáo viên thật sự phải có năng lực, năng khiếu sư phạm, đồng thời phải có tâm huyết với nghề nghiệp, biết tôn trọng tài năng. Chất lượng học sinh giỏi không chỉ thể hiện đánh giá năng lực của học sinh mà còn thể hiện năng lực của mỗi giáo viên nói riêng và chất lượng giáo dục của nhà trường nói chung. Song qua việc nghiên cứu đề tài này cho phép tôi có một vài đề nghị sau: 2.1. Về phía giáo viên: - Không được ép buộc học sinh, phải để học sinh yêu thích về môn đó. - Những giáo viên được phân công giảng dạy phải có kế hoạch. - Phải thật sự nhiệt tình say mê, tận tụy với học sinh . - Luôn nỗ lực, cố gắng nghiên cứu, tìm tòi, học hỏi để xây dựng những tiết dạy-học Tin học một cách hiệu quả. 2.2. Về phía học sinh: - Đầy đủ dụng cụ học tập, sách vở. - Sau mỗi tiết học, yêu cầu học sinh về nhà rèn luyện các bài tập đó thường xuyên để khắc sâu kiến thức. Vì đặc thù bộ môn là thực hành trên máy nên học sinh cần rèn luyện các kĩ năng sử dụng thành thạo phần mềm Pascal. - Luôn có sự chủ động, tích cực và có những kĩ năng cơ bản khi học bộ môn lập trình. 2.3. Đối với tổ chuyên môn: - Tổ chức thao giảng theo chuyên đề hàng tháng, đặc biệt chú ý các tiết dạy khó để cùng trao đổi, thống nhất phương pháp dạy phù hợp nhất. -Thường xuyên tổ chức các buổi ngoại khóa bộ môn, tổ chức các cuộc thi học sinh môn Tin học cấp trường cho học sinh các khối, để học sinh có thể thể hiện năng khiếu của mình. - Việc tổ chức các cuộc thi cấp trường còn giúp cho học sinh thấy được tầm quan trọng của bộ môn tin học, qua đó thu hút học sinh quan tâm đến bộ môn này, đồng thời tạo hứng thú cho học sinh tìm hiểu và thích thú khi học tin học. 2.4. Đối với nhà trường: - Phải quan tâm nhiều hơn công tác này, động viên kịp thời những giáo viên trực tiếp dạy bồi dưỡng cả về vật chất lẫn tinh thần . - Nên bổ sung thêm máy vi tính để tạo điều kiện cho học sinh trong quá trình thực hành trên phòng máy. Trên đây là sáng kiến kinh nghiệm của tôi về “Kinh nghiệm dạy lập trình Pascal” được thực hiện tại trường THCS Nguyễn Trường Tộ. Vì điều kiện thời gian nghiên cứu có hạn và trình độ năng lực hạn chế, đề tài của tôi chắc chắn sẽ còn nhiều thiếu sót. Do vậy tôi rất mong được sự góp ý của các đồng nghiệp và cán bộ phụ trách chuyên môn để cho đề tài hoàn chỉnh hơn. Tôi xin chân thành cảm ơn! Thống Nhất, ngày 08 tháng 11 năm 2018 Người viết La Ngọc Tụ TÀI LIỆU THAM KHẢO - Sách giáo khoa TIN HỌC DÀNH CHO TRUNG HỌC CƠ SỞ QUYỂN 3 - Sách giáo viên TIN HỌC DÀNH CHO TRUNG HỌC CƠ SỞ QUYỂN 3 - Sách bài tập TIN HỌC DÀNH CHO TRUNG HỌC CƠ SỞ QUYỂN 3 - Ngồn ngữ lập trình Pascal – Quách Tuấn Ngọc - Bài tập Ngôn ngữ lập trình Pascal – Quách Tuấn Ngọc. - Lý Thuyết và Bài Tập Pascal Dành cho học sinh phổ thông THCS (Cấp II) và Dạy Nghề - NXBTK - Giáo trình thuật toán và kỹ thuật lập trình Pascal - NXB HÀ NỘI. - Giáo trình LẬP TRÌNH PASCAL – NXB GIÁO DỤC - Giáo trình Lý thuyết và bài tập Pascal (Tập 2): Phần 1 – Khoa CNTT – ĐHSP Hà Nội - Giáo trình Lý thuyết và bài tập Pascal (Tập 2): Phần 2 – Khoa CNTT – ĐHSP Hà Nội - Một số tài liệu khác MỤC LỤC
File đính kèm:
skkn_mot_so_kinh_nghiem_day_lap_trinh_pascal.doc