Như chúng ta biết, chương trình sách giáo khoa Tin học 11 trang bị cho học sinh một số kiến thức cơ bản về cấu trúc dữ liệu và ngôn ngữ lập trình bậc cao.. Chính vì vậy, khi dạy các
Trang 1MỤC LỤC
Trang
1 MỞ ĐẦU 1
1.1 Lý do chọn đề tài 1
1.2 Mục đích nghiên cứu 2
1.3 Đối tượng nghiên cứu 2
1.4 Phương pháp nghiên cứu 2
2 NỘI DUNG SÁNG KIẾN 3
2.1 Cơ sở lý luận của sáng kiến 3
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến 4
2.3 Các giải pháp được sử dụng 6
2.4 Hiệu quả của sáng kiến 10
3 KẾT LUẬN – KIẾN NGHỊ 11
3.1 Kết luận 11
3.2 Kiến nghị 11
Trang 21 MỞ ĐẦU
1.1 Lí do chọn đề tài
Trường THPT Quan Sơn 2 là một trường nằm ở phía tây của tỉnh Thanh Hóa, một trong những trường THPT xa và vất vả nhất của Tỉnh chất lượng học sinh ở đây đặc biệt là đầu vào của học sinh rất thấp, hàng năm nhà trường được giao tuyển đầu vào giao động 160-180 em nhưng trên thực tế chỉ có từ 150-170
em đăng ký nạp hồ sơ thi vào lớp 10 Số lượng học sinh có học lực trung bình và yếu vẫn còn khá lớn tất cả đều học lớp cơ bản (tức là không nâng cao môn nào cả) Do đó khi dạy những lớp này, tôi luôn trăn trở để tìm ra cách truyền đạt dễ hiểu nhất những nội dung kiến thức cơ bản nhất để học sinh có thể nắm bắt được kiến thức
Như chúng ta biết, chương trình sách giáo khoa Tin học 11 trang bị cho học sinh một số kiến thức cơ bản về cấu trúc dữ liệu và ngôn ngữ lập trình bậc cao Bên cạnh đó, rèn luyện cho các em kĩ năng giải được một số bài toán đơn giản trên máy tính bằng cách vận dụng được các kiến thức về cấu trúc dữ liệu, thuật toán trên một ngôn ngữ lập trình cụ thể Chúng ta đều biết rằng, muốn viết được một chương trình giải bài toán trên máy tính thì yêu cầu học sinh phải có kiến thức chắc chắn với sự tư duy logic và tính chính xác cao Và quan trọng hơn cả là sự say mê, hứng thú với môn học Để một học sinh trung bình có thể
tự mình viết một chương trình đơn giản hoàn chỉnh đã rất khó khăn vậy đối với học sinh yếu-kém lại càng khó khăn hơn nhiều
Xuất phát từ thực tiễn giảng dạy tại trường THPT Quan Sơn 2 tôi thấy rằng cần phải thiết kế bài giảng cho phù hợp với nội dung kiến thức, phương pháp và phương tiện dạy học cũng như phù hợp với từng đối tượng học sinh Chính vì vậy, khi dạy các lớp cơ bản với phần đông là đối tượng học sinh từ trung bình trở xuống bài 16 “Ví dụ làm việc với tệp” thuộc chương trình Tin học
11, tôi đã thực hiện một số điểm khác so với các lớp còn lại Tôi xin được mạnh dạn trình bày ra đây để có thể xem như một kinh nghiệm được tích lũy trong quá trình giảng dạy của mình với mong muốn được góp phần nâng cao chất lượng học tập của học sinh trong nhà trường đồng thời cũng góp mình vào công cuộc đổi mới toàn diện giáo dục của cả nước hiện nay
Trang 31.2 Mục đích nghiên cứu
Với những trăn trở, tìm tòi của mình tôi thực hiện đề tài này để tìm ra phương pháp, cách thức tổ chức tốt hơn bài dạy cho đối tượng những học sinh
có học lực trung bình, yếu, kém để nâng cao chất lượng học tập của các em, với
sự đổi mới mang lại cho học sinh hứng thú hơn khi học bài, hiểu và nắm chắc kiến thức từ đó các em có thể áp dụng làm các bài tập trong sách giáo khoa, sách bài tập tin học và các bài tập nâng cao
1.3 Đối tượng nghiên cứu
- Nội dung bài 16 “Ví dụ làm việc với tệp” và hệ thống kiến thức phần kiểu dữ liệu tệp và những kiến thức liên quan
- Đối tượng những học sinh có học lực trung bình, yếu, kém khối lớp 11 trường THPT Quan Sơn 2
1.4 Phương pháp nghiên cứu
Kết hợp giữa thực tiễn giáo dục tại trường THPT Quan Sơn 2 với sự tham khảo các tài liệu về phương pháp giảng dạy, về ngôn ngữ lập trình và các kinh nghiệm, ý kiến của các đồng nghiệp, các tài liệu trên mạng internet…
Trang 42 NỘI DUNG 2.1 Cơ sở lí luận
Trong khi học Tin học 11, học sinh gặp rất nhiều khó khăn khi tiếp thu kiến thức Những khái niệm, cấu trúc lệnh ở những chương đầu còn dễ hiểu, khi học đến “Kiểu dữ liệu có cấu trúc” là học sinh bắt đầu mơ hồ và than khó Khi không nắm bắt được đầy đủ kiến thức, các em bắt đầu chán, bỏ bê và không muốn học Nhất là những học sinh có học lực từ trung bình trở xuống, tiền thân các em đã kém thì đến khi học đến phần này còn kém hơn Với đối tượng học sinh này, khi dạy bài 16 “Ví dụ làm việc với tệp”, tôi không thể dạy đúng như nội dung trong sách giáo khoa Tin học 11 được mà buộc phải đưa ra một kế hoạch dạy học với những ví dụ đơn giản, gần gũi dễ hiểu hơn
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Lại phải nói lại một lần nữa là trường tôi có những học sinh có chất lượng đầu vào rất thấp, gần nửa những em điểm thi đầu vào môn toán, tiếng Anh có 0,25 điểm Do vậy các em gần như không thể đọc hiểu được một chương trình tính toán đơn giản cứ chẳng mong viết nổi được chương trình Trong sách giáo khoa Tin học lớp 11, bài 16 “Ví dụ làm việc với tệp” đưa ra 2 ví dụ:
Ví dụ 1:
Một trường trung học phổ thông tổ chức cho giáo viên và học sinh của trường đi cắm trại, sinh hoạt ngoài trời ở vườn quốc gia Cúc Phương Để lên lịch đến thăm khu trại các lớp, thầy hiệu trưởng cần biết khoảng cách từ trại của mình (ở vị trí có toạ độ (0,0)) đến trại của các giáo viên chủ nhiệm Mỗi lớp có một khu trại, vị trí trại của mỗi giáo viên chủ nhiệm đều có toạ độ nguyên (x,y) được ghi trong tệp văn bản TRAI.TXT (như vậy tệp TRAI.TXT chứa liên tiếp các cặp số nguyên, các số cách nhau bởi dấu cách và không kết thúc bằng kí tự xuống dòng)
Và sách giáo khoa có đưa ra một chương trình đọc các cặp toạ độ từ tệp
‘TRAI.TXT’, tính rồi đưa ra màn hình khoảng cách (với độ chính xác hai chữ số sau dấu chấm thập phân) giữa trại của mỗi giáo viên chủ nhiệm và trại của thầy hiệu trưởng như sau:
Trang 5Program Khoang_cach;
var d: real;
f: text; x,y :integer;
begin
assign(f,’trai.xtx’);
reset(f);
while not eof(f) do
begin
read(f,x,y);
d :=sqrt(x*x + y*y );
writeln(‘khoang cach : ‘,d:10,2);
end;
close(f);
end
Ví dụ 2:
Cho 3 điện trở R1, R2, R3 Sử dụng cả ba điện trở để tạo ra năm mạch điện có điện trở tương đương khác nhau bằng cách mắc theo sơ đồ nêu ở Hình
17 trong sách giáo khoa trang 88 Mỗi cách mắc sẽ cho một điện trở tương đương khác nhau Ví dụ nếu mắc theo sơ đồ I thì điện trở tương đương sẽ là:
1* 2 * 3 1* 2 1* 3 2 * 3
R R R R
R R R R R R
Nếu mắc tho sơ đồ V thì R = R1+R2+R3
Cho tệp văn bản ‘RESIST.DAT’ gồm nhiều dòng, mỗi dòng chứa 3 số thực R1, R2, R3, các số cách nhau 1 dấu cách, 0 < R1, R2, R3 ≤ 105
Sau đó sách giáo khoa đưa ra chương trình đọc dữ liệu từ tệp
‘RESIST.DAT’, tính các điện trở tương đương và ghi kết quả ra tệp văn bản
‘RESIST.EQU’, mỗi dòng ghi 5 điện trở tương đương của 3 điện trở ở dòng dữ liệu vào tương ứng như sau:
Program Dien_tro;
Var a: array[1 5] of real;
R1, R2, R3: real;
f1,f2 :text;
i: integer;
Trang 6Assign(f1,‘RESIST.DAT’);
Reset(f1);
Assign(f2,‘RESIST.EQU’);
Rewrite(f2);
While not eof(f1) do
Begin
Readln(f1,R1,R2,R3);
a[1]:=R1*R2*R3/(R1*R2+R1*R3+R2*R3);
a[2]:=R1*R2/(R1+R2)+R3;
a[4]:=R2*R3/(R2+R3)+R1;
For i:=1 to 5 do write(f2, a[i]:9:3,’ ‘);
Writeln(f2);
End;
Close(f1); Close(f2);
End
Đối với 2 ví dụ này, nếu dạy các lớp phân ban hay các lớp cơ bản học nâng cao các môn tự nhiên thì không thành vấn đề Có lớp như 11A1, (là lớp học được môn tự nhiên), tôi cho học sinh vận dụng các kiến thức liên môn toán và vật lý xây dựng chương trình rất tốt Các em rất tích cực, hào hứng tham gia xây dựng bài và phần lớn các em hiểu bài, nắm chắc kiến thức Những lớp yếu hơn (như 11A2, 11A3, 11A4), tôi chỉ dừng lại ở việc đọc hiểu chương trình bằng cách giải thích ý nghĩa từng câu lệnh, biên dịch và chạy thử chương trình để học sinh dự đoán kết quả (tính bằng tay) và đối chiếu kết quả chạy trên máy tính Nhưng dù sao thì phần lớn các em cũng hiểu được ý nghĩa của chương trình, nhận biết được đâu là câu lệnh khai báo tệp, đâu là câu lệnh gắn tên tệp, mở tệp, đọc, ghi tệp và đóng tệp… Từ đó có thể vận dụng những câu lệnh đó để viết một chương trình đơn giản nhất như đọc từ tệp vào dãy số, tính tổng hay tích các số
đó rồi ghi kết quả vào một tệp khác Còn đối với các lớp ban cơ bản, tôi nhận thấy là nếu mình thực hiện như lớp trên thì học sinh sẽ không hiểu bài và mục tiêu bài học sẽ không đạt được Bởi thực tế dạy học ở các lớp này có những em
Trang 7học sinh không nhớ nổi công thức tính chu vi, diện tích hình tròn, hình chữ nhật, không giải nổi phương trình bậc hai chứ đừng mong các em tính được khoảng các giữa các điểm và tính được điện trở tương đương Tôi thấy rằng hai ví dụ mà sách giáo khoa đưa ra là quá sức đối với các em Có cố gắng thế nào đi nữa thì tôi cũng không thể làm sao cho các em hiểu được việc đọc các cặp tọa độ từ tệp TRAT.TXT, đọc dữ liệu từ tệp RESIST.DAT gồm nhiều dòng, mỗi dòng chứa 3
số thực R1, R2, R3, tính khoảng cách hay tính điện trở tương đương cho từng đoạn mạch rồi đưa kết quả vào mảng 1 chiều gồm 5 phần tử… Những vấn đề đó dường như quá trừu tượng và phức tạp đối với các em Do vậy, khi giảng dạy ở những lớp này (cụ thể là lớp 11A2, 11A3, 11A4) tôi không sử dụng hai ví dụ trong sách giáo khoa mà thay vào đó là những ví dụ vô cùng đơn giản để giúp các em có thể hiểu được chương trình và nắm được các thao tác với kiểu dữ liệu tệp
2.3 Các giải pháp đã sử dụng để giải quyết vấn đề
Cụ thể khi dạy các lớp cơ bản bài 16 “Ví dụ làm việc với tệp” tôi đã tiến hành như sau:
Tôi xin được trình bày sơ lược nội dung kế hoạch dạy-học của mình
2.3.1 Giải pháp 1:
Kiểm tra bài cũ và giao bài tập mang tính gợi nhớ kiến thức
Hoạt động 1: Ổn định tổ chức và kiểm tra bài cũ (15p)
Mục tiêu: Kiểm tra việc học bài cũ của học sinh đồng thời củng cố lại kiến thức
đã học
1.1 Gọi học sinh nêu vai trò của tệp và phân loại tệp
1.2 Gọi 3 học sinh lần lượt lên bảng thực hiện 3 câu hỏi sau
CH1:Viết cú pháp khai báo tệp, thủ tục gắn tên tệp và cho ví dụ khai báo 2 tệp văn bản và gắn tên cho 2 tệp đó
CH2: Viết cú pháp thủ tục mở tệp, đóng tệp Cho ví dụ mở tệp, đóng tệp với 2 tệp đã được khai báo ở câu trên
CH3: Viết cú pháp thủ tục đọc, ghi tệp văn bản Cho ví dụ
Sau khi học sinh thực hiện mỗi câu hỏi, giáo viên cho các học sinh khác nhận xét rồi chuẩn hóa kiến thức luôn
Trang 81.3 Mời một bạn lên bảng nêu lần lượt các thao tác để có thể đọc dữ liệu từ tệp văn bản và một bạn nêu các thao tác để ghi dữ liệu ra tệp văn bản
Cho lớp nhận xét Giáo viên nhận xét và chốt lại
Sơ đồ đọc dữ liệu từ tệp văn bản:
1 Khai báo tệp: var <biến tệp>: text;
2 Gắn tên tệp: assign (<biến tệp>,<tên têp>);
3 Mở tệp: reset(<biến tệp>);
4 Đọc tệp: read/readln(<biến tệp>,<danh sách biến>);
5 Đóng tệp: close(<biến tệp>);
Sơ đồ ghi dữ liệu ra tệp văn bản:
1 Khai báo tệp: var <biến tệp>: text;
2 Gắn tên tệp: assign (<biến tệp>,<tên têp>);
3 Mở tệp: rewrite(<biến tệp>);
4 Ghi tệp: write/writeln(<biến tệp>,<danh sách kết quả>);
5 Đóng tệp: close(<biến tệp>);
1.4 Gọi học sinh lên bảng nêu các hàm khi đọc/ghi tệp văn bản
Hoạt động 2: Tìm hiểu ví dụ 1: Chương trình đơn giản có sử dụng kiểu dữ liệu
tệp (15p)
Mục tiêu: Giúp học sinh nắm được cấu trúc của một chương trình đơn giản có
sử dụng kiểu dữ liệu tệp và nhận biết được các thao tác đối với tệp văn bản Program VD;
Var t1,t2: text;
a, b, c, d : integer;
Begin
Assign(t1,’so.inp’); assign(t2,’so.out’);
Reset(t1); rewrite(t2);
Read(t1,a,b);
c:= a+b;
write(t2,c,’ ’,d);
Close(t1); Close(t2);
End
Giáo viên chiếu chương trình Ví dụ 1 lên màn hình và yêu cầu học sinh
trả lời những câu hỏi sau:
Trang 9CH1: Chương trình trên sử dụng biến tệp nào? Đâu là câu lệnh khai báo biến tệp?
CH2: Đâu là câu lệnh gắn tên tệp? Tên tệp ở đây là gì?
CH3: Đâu là câu lệnh mở tệp? mở tệp để đọc hay ghi dữ liệu?
CH4: Đâu là câu lệnh đọc dữ liệu từ tệp? tệp được đọc dữ liệu tên là gì? đọc dữ liệu từ tệp gán giá trị cho biến nào?
CH5: Đâu là câu lệnh ghi dữ liệu vào tệp? ghi vào tệp tên là gì? ghi giá trị gì vào tệp?
CH6: Đâu là câu lệnh đóng tệp?
CH7: Chương trình này thực hiện công việc gì?
Sau khi học sinh trả lời từng câu hỏi, giáo viên cho cả lớp nhận xét, giáo viên nhận xét, chỉ ra đáp án
Sau đó, giáo viên lấy ví dụ trên tệp cụ thể Cho học sinh dự đoán kết quả của chương trình rồi biên dịch và chạy chương trình để học sinh quan sát và đối chiếu kết quả Đồng thời trong lúc lấy ví dụ chạy chương trình, giáo viên hướng dẫn luôn cho học sinh cách tạo tệp văn bản, lưu tệp văn bản và mở tệp văn bản
để xem trong Pascal Giáo viên chạy chương trình nhiều lần với các bộ dữ liệu khác nhau cho học sinh quan sát và có thể sửa đổi cấu trúc các tệp ‘so.inp’ và câu lệnh đọc dữ liệu từ tệp (thay read(t1,a,b); bằng readln(t1,a,b); hoặc readln(t1,a); read(t1,b); …) để học sinh hiểu cách đọc tệp Để học sinh phân biệt được việc khác nhau giữa Write và writeln trong câu lệnh ghi dữ liệu ra tệp, giáo viên có thể sửa đổi câu lệnh write(t2,c, ‘ ‘,d); thành writeln(t2,c); write(t2,d); …
Từ đó giúp học sinh củng cố lại một lần nữa câu lệnh đọc/ghi tệp văn bản và thấy nó không xa lạ gì vì giống với việc đọc dữ liệu vào từ bàn phím và ghi
dữ liệu ra màn hình đã được học từ trước
2.3.2 Giải pháp 2 : Rèn luyện kỹ năng
Hoạt động 3: Rèn luyện kĩ năng viết một chương trình hoàn chỉnh đơn giản có
sử dụng kiểu dữ liệu tệp (15p)
Mục tiêu: Học sinh sử dụng được các thủ tục làm việc với tệp để giải quyết yêu
cầu bài toán đặt ra
3.1 Ví dụ 2: Viết chương trình nhập 2 số dương từ bàn phím Tính chu vi, diện
tích của hình chữ nhật có kích thước là 2 số vừa nhập, kết quả in ra màn hình
Trang 10Với yêu cầu này thì phần đông các em có thể viết rất tốt nên buộc cả lớp phải viết vào giấy nháp để cô giáo kiểm tra và gọi 1 học sinh xung phong lên bảng viết chương trình ngay trên máy tính Viết xong, cho học sinh chạy thử luôn chương trình cho cả lớp quan sát
3.2 Ví dụ 3: Viết chương trình đọc 2 số dương từ tệp “so.inp” Tính chu vi, diện
tích của hình chữ nhật có kích thước là 2 số vừa nhập, kết quả ghi ra tệp “so.out”
Từ chương trình đã được viết ở trên với những kiến thức đã được củng cố đầu giờ học phần lớn các em có thể sửa đổi chương trình đã viết để đáp ứng yêu cầu đặt ra Giáo viên gọi 1 học sinh lên bảng để viết chương trình Sau đó giáo viên cho cả lớp nhận xét, rồi giáo viên nhận xét lại, chuẩn hóa chương trình nếu
có sai sót; chạy chương trình cho học sinh xem
3.3 Ví dụ 4: Viết chương trình đọc một dãy số từ tệp “Vidu.txt” tính tổng các
số trong dãy và ghi kết quả ra tệp “Ketqua.txt” Dữ liệu trong tệp “Vidu.txt” là các số thực trên cùng một dòng, các số cách nhau một dấu cách
Sau khi thực hiện ví dụ 3, học sinh đã nắm chắc hơn các câu lệnh làm việc với tệp để viết chương trình Cái khó ở ví dụ này đối với học sinh là vì ở đây có nhiều số nhưng lại không giới hạn là nhiều nhất bao nhiêu số nên học sinh sẽ bị lúng túng khi khai báo biến và đọc dữ liệu từ tệp Giáo viên phải dẫn dắt gợi ý học sinh một cách khéo léo Thông thường, các em sẽ nghĩ ngay đến kiểu dữ liệu mảng nhưng lại gặp khó khăn là không biết giới hạn cao nhất của số phần tử của mảng Nếu khai báo biến đơn thì không biết phải khai báo bao nhiêu biến
Do vậy ta buộc phải đọc từng số một từ tệp và như vậy ta phải sử dụng cấu trúc lặp để đọc tệp cụ thể ở đây phải sử vòng lặp While … do chứ không thể sử dụng For … do được Ta chỉ dừng việc đọc từng số cho đến số cuối cùng tức là khi hết tệp và ta sẽ dùng đến hàm eof(<biến tệp>)
Nếu sau khi gợi ý, có học sinh có thể tự viết được chương trình thì ta gọi học sinh lên viết, chạy chương trình cho cả lớp xem Nếu không có ai xung phong lên tự viết thì giáo viên sẽ hướng dẫn các em xây dựng chương trình từng phần một như: khai báo biến , gắn tên tệp, mở tệp, đọc tệp, tính tổng, ghi tệp và đóng tệp