KỸ THUẬT KHAI THÁC MỘT BÀI TOÁN BẰNG HÌNH THỨC PHÂN BẬC VÀ GỢI VẤN ĐỀ NHẰM DẠY MỘT SỐ CÂU LỆNH TRONG NGÔN NGỮ LẬP TRÌNH PASCAL - TIN HỌC 8 A.. Lập được chương trình cho một bài toán đối
Trang 1KỸ THUẬT KHAI THÁC MỘT BÀI TOÁN BẰNG HÌNH THỨC PHÂN BẬC VÀ GỢI VẤN ĐỀ NHẰM DẠY MỘT
SỐ CÂU LỆNH TRONG NGÔN NGỮ LẬP TRÌNH PASCAL - TIN HỌC 8
A ĐẶT VẤN ĐỀ
Ngày nay, công nghệ thông tin được ứng dụng rộng rãi trong thực tế ở nhiều lĩnh vực Để đáp ứng nhu cầu đó của xã hội, môn Tin học đã được đưa vào trường Trung học cơ sở nhằm bước đầu cung cấp cho các em học sinh những kiến thức cơ bản Tuy nhiên, do đặc trưng của môn học có những khái niệm trừu tượng nên các em gặp nhiều khó khăn trong quá trình tiếp thu bài Đặc biệt trong chương trình Tin học 8, khi học phần lập trình đòi hỏi phải tư duy, đòi hỏi học sinh phải làm nhiều bài tập và chạy các chương trình trên máy tính điện tử Khi lập trình HS phải biết áp dụng những điều đã học và vốn hiểu biết của các em về thực tế đời sống hàng ngày một cách linh hoạt và ít nhiều sáng tạo Lập được chương trình cho một bài toán đối với học sinh là cả một công trình sáng tạo, vì các em phải kiên trì vận dụng nhiều kiến thức và vượt qua không ít khó khăn để đi đến chương trình đúng, tiết kiệm thời gian chạy trong điều kiện bộ nhớ cho phép Khi trên màn hình xuất hiện kết quả của bài toán mà các em chờ đợi, các em sẽ cảm thấy sung sướng, tự hào Những giây phút như thế kích thích học sinh rất nhiều trong học tập Sự học tập về bản chất nhận thức luận giống như quá trình nhận thức của nhà bác học Điều khác nhau là ở chỗ, nhà bác học nhận thức chân lí mới đối với loài người, còn người học phát hiện ra chân lí mới cho bản thân mặc dù nó không phải là mới với nhân loại, nhưng nó giúp người học bước đầu tham gia nghiên cứu cái mới dưới sự hướng dẫn của thầy
Thông qua việc xây dựng chương trình có thể rèn luyện cho học sinh kĩ năng giải quyết vấn đề Muốn vậy, cần chú ý giúp học sinh cách suy nghĩ và
Trang 2làm việc để giải quyết vấn đề, hình thành và kiểm nghiệm giả thuyết, phát hiện sai lầm, vận dụng những thao tác tư duy: phân tích, tổng hợp, tương tự hóa, khái quát hóa, đặc biệt hóa, quy nạp, suy diễn, quy lạ về quen,
Một trong những ý nghĩ giáo dục nổi lên hàng đầu là vận dụng những điều đã học vào thực tiễn, do đó cần hướng dẫn học sinh xuất phát, hình thành và giải quyết những nội dung có tính thực tiễn
Một hệ thống bài tập được phân bậc hoặc trong một bài có nhiều câu hỏi mạng tính phân bậc là cơ sở tốt cho việc giúp học sinh giải quyết vấn đề
Thực trạng cho thấy trong giai đoạn đầu, khi học các kiến thức từ bài
1 đến bài 4 - Tin học 8, tuy bước đầu làm quen với ngôn ngữ lập trình nhưng hầu như các em đã nắm được cấu trúc và viết được chương trình đơn giản Khi lập trình với những bài toán phức tạp cần sử dụng đến một số câu lệnh: câu lệnh điều kiện, câu lệnh lặp (for do, while do) Kiến thức nhiều lên là lúc nhiều học sinh lúng túng không biết sử dụng như thế nào? Một số học sinh không biết phân biệt chọn lọc câu lệnh thích hợp vào chương trình cụ thể, áp dụng chưa linh hoạt trong các bài toán, kỹ năng sửa chương trình còn hạn chế, bắt đầu xuất hiện tình trạng chán nản ngại học lập trình ở một số em
Xuất phát từ cơ sở trên, và theo tinh thần dạy học tích cực giúp học sinh chủ động tìm ra kiến thức bằng chính bản thân các em dưới sự định hướng của giáo viên, tôi xin trình bày ý tưởng khai thác một bài toán dưới các góc nhìn khác nhau, với những yêu cầu nâng cao từng bước tính hợp lí của chương trình để dạy một số câu lệnh trong ngôn ngữ lập trình pascal
Đây cũng là nội dung của sáng kiến kinh nghiệm: “Kỹ thuật khai thác một bài toán bằng hình thức phân bậc và gợi vấn đề nhằm dạy một số câu lệnh trong ngôn ngữ lập trình pascal - Tin học 8”
Trang 3B PHẦN NỘI DUNG
I PHƯƠNG PHÁP THỰC HIỆN
- Sử dụng một bài toán gốc để dạy các câu lệnh trong ngôn ngữ lập trình pascal - Tin học 8 theo kĩ thuật phân bậc, nâng cao dần từng bước theo phương pháp tiến tạo, gợi tình huống có vấn đề
+ Câu lệnh điều kiện: if then (dạy từ tiết 27 đến tiết 32)
+ Câu lệnh lặp với số lần chưa biết trước (từ tiết 53 đến tiết 56)
- Xây dựng tình huống rất dễ hiểu về mặt cấu trúc tính toán, phải gắn với nội dung toán học, hình học
Ví dụ: Đối với phép cộng ai cũng có thể làm được, nhưng với độ dài hình học (không thể là một số âm)-> lúc đó mới có lý do để dạy lệnh rẽ nhánh
II TIẾN TRÌNH THỰC HIỆN
1.Xét bài toán gốc: (Bài toán này được dạy ở tiết bài tập -Bài 4- Sử
dụng biến trong chương trình)
- Bài toán: Tính chu vi, diện tích hình vuông theo độ dài cạnh a của
nó được nhập vào từ bàn phím
- Xây dựng thuật toán:
Bước 1: Nhập cạnh a
Bước 2: + Thông báo chu vi (CV) là 4*a;
+ Thông báo diện tích (S) là a*a;
Bước 3: Kết thúc
- Viết chương trình lưu trên máy tính với tên HV1.pas
Program Hinhvuong;
Trang 4Uses crt;
Var a: integer;
BEGIN
Clrscr;
Write(‘nhap vao canh a’); readln(a);
Writeln(‘chu vi la:’, 4*a);
Writeln(‘dien tich la:’, a*a);
Readln END
2) Dạy câu lệnh điều kiện, lệnh ghép: (Áp dụng dạy bài 6- câu lệnh điểu kiện và tiết bài tập)
a) Cấu trúc rẽ nhánh dạng thiếu, lệnh ghép
- Chạy chương trình trên với các bộ dữ liệu:
+ Trường hợp 1: a=5 máy tính sẽ đưa ra kết quả :
Chu vi là: 2 Dien tich la: 25 + Trường hợp 2: a = 10 máy tính sẽ đưa ra kết quả :
Chu vi la: 40 Dien tich la: 100 + Trường hợp 3: a = -2 máy tính sẽ đưa ra kết quả:
Chu vi la: -8 Dien tich la: 4
Trang 5- Nhận xét kết quả của 3 trường hợp trên: Bài toán đúng với trường
hợp 1,2 còn trường hợp 3 (Chu vi là: -8) là sai -> Tình huống có vấn đề xuất hiện
- Lời bình: Khi nhập a=-2 thì không phải là độ dài một cạnh của hình
vuông, vậy máy tính vẫn cho ra kết quả âm như vậy máy tính không thông minh -> không kiểm tra dữ liệu cứ thế mà làm Như vậy thuật toán không thông minh ở chỗ nào?
- Lí do: Thuật toán không kiểm tra số nhập vào cho cạnh a của hình
vuông có dương hay không? Vậy thuật toán phải viết lại như thế nào?
- Gợi ý thuật toán ở bước 2:
+ Nếu a>0 thì Thông báo chu vi (CV) là 4*a;
Thông báo diện tích (S) là a*a;
- Ở đây thông báo tính chu vi, diện tích chỉ xuất hiện với điều kiện a>0 Vì vậy ngôn ngữ lập trình đã cung cấp cho chúng ta một công cụ để
viết cho trường hợp trên đó là: Câu lệnh điều kiên
- Giáo viên giới thiệu cú pháp câu lệnh:
+ Dạng thiếu: If <điều kiện> then <câu lệnh>;
+ Ở đây điều kiện là (a>0); sau then có 2 câu lệnh in thông báo ra
màn hình vì vậy ta có lệnh ghép gồm 2 câu lệnh và phải đặt trong từ khóa begin và end.
- Khi đã biết cú pháp câu lệnh, yêu cầu học sinh lên sửa chương trình
của bài toán gốc HV1.pas sau đó ghi lại thành tệp HV2.Pas
Program Hinhvuong;
Trang 6Uses crt;
Var a: integer;
BEGIN
Clrscr;
Write(‘nhap vao canh a’); readln(a);
If (a>0) then begin writeln(‘chu vi la’,4*a);
writeln(‘dien tich la’,a*a);
end;
Writeln(‘chu vi la:’, 4*a);
Writeln(‘dien tich la:’, a*a);
Readln END
=> Như vậy ta đã dạy được câu lệnh điều kiện dạng thiếu và lệnh
ghép
b) Cấu trúc rẽ nhánh dạng đủ (If <điều kiện> then <câu lệnh1> else
<câu lệnh 2>;)
- Chạy chương trình HV2.Pas học sinh đã sửa,
- Giáo viên đặt ra vấn đề: Khi ta nhập (a>0) thì máy tính tính toán và
in ra kết quả, còn (a<0) thì không nói gì, như vậy ở phần trước ta đã làm
cho máy tính thông minh rồi nhưng chưa lịch sự vậy để máy tính lịch sự
ta phải sửa lại thuật toán như thế nào? -> Tình huống có vấn đề xuất hiện
- Yêu cầu HS nêu được: Phải sửa lại thuật toán ở bước 2
+ Nếu a>0 thì Thông báo chu vi (CV) là 4*a;
Thông báo diện tích (S) là a*a;
Trang 7Ngược lại thì “thông báo dữ liệu không hợp lệ”
- Phân tích ở đây khi viết chương trình có 2 câu lệnh Nếu điều kiện đúng (a>0) thì thực hiện câu lệnh 1(lệnh ghép), ngược lại điều kiện sai thì thực hiện câu lệnh 2
- Giáo viên đưa ra câu lệnh dạng đủ để viết trong trường hợp này
(If <điều kiện> then <câu lệnh1> else <câu lệnh 2>;)
- Với câu lệnh này nếu điều kiện đúng thực hiện <câu lệnh 1> ngược lại điều kiện sai thực hiện <câu lệnh 2>;
- Yêu cầu học sinh sửa lại chương trình để máy tính lịch sự trong giao
tiếp:
Program Hinhvuong;
Uses crt;
Var a: integer;
BEGIN
Clrscr;
Write(‘nhap vao canh a’); readln(a);
If (a>0) then begin writeln(‘chu vi la’,4*a);
writeln(‘dien tich la’,a*a);
end else writeln(‘dư lieu khong hop le’);
Writeln(‘chu vi la:’, 4*a);
Writeln(‘dien tich la:’, a*a);
Readln
Trang 8- Giáo viên chạy chương trình và thử với các bộ dữ liệu cụ thể, lưu
chương trình trên với tên tệp HV3.pas
=> Như vậy đã dạy được câu lệnh rẽ nhánh dạng đủ
3 Dạy câu lệnh lặp (Câu lệnh lặp không biết trước số lần lặp, bài 8).
- Đặt vấn đề: Chương trình HV3.pas thông minh, lịch sự, nhưng chưa
hợp lý Nếu người dùng chưa nhập vào số dương (a>0) thì chương trình phải quay lại để cho người ta nhập cho số dương; phải lặp đi lặp lại đến khi nào người ta nhập vào số dương (a>0) thì thôi
- Giáo viên nêu :
+ Cú pháp câu lệnh: While<điều kiện> do <câu lệnh>;
+ Hoạt động của câu lệnh:
Bước 1: Kiểm tra điều kiện
Bước 2: Nếu điều kiện sai, câu lệnh sẽ bị bỏ qua và thực hiện lệnh lặp kết thúc Nếu điều kiện đúng, thực hiện câu lệnh và quay lại bước 1
- Giáo viên yêu cầu học sinh xác định các thành phần của câu lệnh, yêu cầu học sinh thực hiện vấn đề của bài toán trên:
+ Điều kiện (a<0) thì thông báo “mời nhập lại’ cho đến khi a>0 thì kết thúc
+ Sửa lại chương trình HV3.pas lưu thành tệp HV4 pas
Uses crt;
Var a: integer;
BEGIN
Clrscr;
Write(‘nhap vao canh a’); readln(a);
Trang 9while (a<=0) then begin write(‘moi nhap lai’);
readln(a);
end;
Writeln(‘chu vi la:’, 4*a);
Writeln(‘dien tich la:’, a*a);
Readln END
* Ưu điểm của việc khai thác một bài toán để dạy học
Việc khai thác một bài toán ở những khía cạnh khác nhau để dạy học
có những ưu điểm nhất định như sau:
- Giáo chỉ dành thời gian cho việc tạo tiền đề xuất phát cho cả lớp ở tiết đầu tiên Ví dụ ở bài toán trên là nhắc lại công thức tính chu vi, diện tích hình vuông Việc xây dựng thuật giải cho bài toán cũng chỉ mất một lần ở tiết đầu tiên Đó là những việc giúp giáo viên tiết kiệm được thời gian ở trên lớp
- Sau thành công của chương trình đầu tiên, học sinh đã quen thuộc với dữ liệu của bài toán Việc đưa dữ liệu vào để kiểm thử không còn quan trọng ở những chương trình tiếp theo Học sinh không cần phải tính bằng tay xem kết quả mà máy tính đưa ra có tin cậy không Điều đó tạo cho các
em tâm lí yên tâm với tính đúng đắn của chương trình mới, tập trung vào việc giải quyết các vấn đề chưa hợp lý của chương trình hiện tại
- Dữ liệu của bài toán cùng với giải thuật của bài toán là đã có là phương tiện để cho thầy và trò thể hiện các thao tác ở những góc nhìn khác nhau, với những yêu cầu hoàn thiện hơn công việc lập trình Học sinh thao
Trang 10tác trên những dữ liệu quen thuộc, các em không mất thời gian làm quen với
dữ liệu mới
- Những tồn tại của chương trình vừa chỉnh sửa, những cách tiếp cận mới để lập trình đặt học sinh vào tình huống có vấn đề một cách tự nhiên, lôi cuốn các em tự giác tham gia giải quyết vấn đề
- Chương trình sau được cấu trúc lại từ các lệnh đã có ở chương trình trước Được bổ sung câu lệnh mới, chương trình con mới làm cho tính hợp
lí, tính khoa học của lập trình được nâng cao
- Học sinh có dịp nhìn lại chương trình cũ, ôn lại kiến thức cũ, so sánh chương trình mới với chương trình cũ để thấy cái hay của chương trình mới, cái hạn chế của chương trình cũ, kiến thức cũ làm cơ sở để hiểu kiến thức mới, kiến thức mới soi sáng kiến thức cũ Kiến thức cũ đóng vai trò đối chứng cho kiến thức mới tồn tại, tôn vinh kiến thức mới
* Kết quả thu được
- Khi ứng dụng phương pháp này vào giảng dạy tôi nhận thấy học sinh có nhiều cơ hội để khẳng định mình, tự mình phát hiện, tự xây dựng và sửa chương trình.Hình thành và kích thích cho các em tính chủ động tích cực trong việc khám phám những tri thức mới của bản thân Điều đó cũng
dễ hiểu cách xây dựng các tình huống như trên: Từ một bài toán đơn giản các em đã biết, có thể viết chương trình khá thành thạo cho nên các em tự viết được bài toán gốc như đã trình bày ở trên Từ chương trình đó nhờ sự trợ giúp của giáo viên gợi động cơ khiến các em phải suy nghĩ tìm tòi, nhưng hết sức tự nhiên đơn giản, học sinh tự tìm ra tình huống, tự giải quyết vấn đề, tự sửa chữa Như vậy từ bước đầu tiên đến bước cuối cùng học sinh đều có thể tham gia, giúp cho các em hoạt động và làm việc nhiều hơn trong giờ học, với phương pháp đó, cách thiết kế đó tôi thấy có hiệu quả và đáp ứng được yêu cầu dạy học hiện nay
Trang 11- Áp dụng cho các năm học tôi đã khảo sát học sinh bằng cách cho làm bài kiểm trên giấy, và quan sát trong các giờ thực hành thấy các em tỏ
ra phấn khởi thích thú hơn trong những giờ học lập trình, kết quả kiểm tra định kỳ nâng lên rõ rệt
Trước khi thực hiện sáng kiến tỷ lệ học sinh viết được chương trình
có chứa các câu lệnh phức tạp chỉ chiểm 25,31% Sau khi thực hiện sáng kiến và khảo sát thực tế bằng kiểm tra 15 phút thì kết quả các năm như sau:
Kết quả sau khi áp
dụng s¸ng kiÕn qua
các năm như sau:
Học sinh biết viết chương trình có chứa những câu lệnh phức tạp (câu lệnh điều kiện, câu lệnh
lặp )
Số HS đạt yêu cầu
không đạt yêu cầu
Tỷ lệ %
- Cho đến năm học này tôi đang vận dụng hình thức dạy theo phương pháp trên và vận dụng dạy các phần khác nữa trong chương trình lập trình tin học 8, được học sinh tham gia học một cách tích cực và có hiệu quả III BÀI HỌC KINH NGHIỆM
- Trong quá trình giảng dạy cần khuyến khích học sinh tích cực tham gia thảo luận, phát biểu ý kiến, tránh áp đặt cho học sinh
- Có thể dùng bài tập trên hoặc cách thiết kế tương tự cho giờ thực hành, đưa vào đặt vấn đề cho giảng bài mới, các tiết bài tập
Trang 12- Khi áp dụng có thể cho học sinh làm nhóm, các em tự trình bày bài toán gốc lên bảng, giáo viên dẫn dắt đến vấn đề mới, gợi ý để các nhóm lên sửa lại hoàn thiện bài làm của mình theo tình huống mới đặt ra
- Muốn dạy thành công và có hiệu quả thì trong những bài đầu tiên yêu cầu học sinh phải nắm vững các kiến thức cơ bản, lập trình giải bài toán gốc (bài toán cơ sở) một cách thành thạo
Để học sinh đạt được kết quả tốt hơn nữa thì đòi hỏi học sinh phải nắm vững các kiến thức về cách giải các bài toán trong toán học để phân tích các bài toán thành thuật toán để viết chương trình
Trang 13C KẾT LUẬN
Ngôn ngữ lập trình 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 để phục vụ cho cuộc sống Nhờ sự phát triển của tin học trong đó các nhà lập trình chuyên nghiệp đóng vai trò không nhỏ 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, hiệu quả và chính xác hơn Hiện nay, ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến nhất trên thế giới sử dụng trong lĩnh vực giảng dạy
Đề tài này mang tính thực tiễn rất cao cụ thể là: trong tiết học các em học sinh đã chủ động để tìm tòi lại kiến thức đã học qua đó giải quyết được vấn đề do giáo viên đặt ra Trong quá trình giải quyết vấn đề, giáo viên chỉ
ra những sai lầm mà các em học sinh mắc phải do hiểu không rõ vấn đề giúp cho các em hiểu rõ hơn về các câu lệnh
Phương pháp thiết kế dạy này cũng có thể áp dụng cho một số môn học tự nhiên khác
Tuy đã dành rất nhiều thời gian công sức để hoàn thành được sáng kiến này, nhưng không thể tránh khỏi những thiếu sót Rất mong được sự góp ý của các quý ban và đồng nghiệp để sáng kiến đưa vào vận dụng ngày càng hiệu quả hơn
Tôi xin chân thành cảm ơn!
Văn Cẩm, ngày 22 tháng 11 năm 2012
Người viết
Bùi Thị Tin