Từ thực tiễn giảng dạy trên lớp kết hợp hướng dẫn học sinh học tại nhàbằng phương pháp trực tuyến về kiểu dữ liệu tệp file tôi đã rút ra một số kinhnghiệm để giúp học sinh làm bài tập
Trang 1
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THCS VÀ THPT NGHI SƠN
SÁNG KIẾN KINH NGHIỆM
“BIỆN PHÁP GIÚP HỌC SINH THỰC HÀNH VỚI KIỂU DỮ LIỆU TỆP TRONG CHƯƠNG TRÌNH TIN HỌC 11 Ở
TRƯỜNG THCS VÀ THPT NGHI SƠN”
Người thực hiện: Nguyễn Thị Lập Chức vụ: Giáo viên
SKKN thuộc lĩnh vực (môn): Tin học
THANH HOÁ NĂM 2020
Trang 3MỤC LỤC
1.MỞ ĐẦU 1
1.1 Lý do chọn đề tài 1
1.2 Phạm vi và đối tượng nghiên cứu 1
1.3 Mục đích của đề tài 1
1.4 Phương pháp nghiên cứu 1
2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2
2.1 Cơ sở lý luận của sáng kiến kinh nghiệm 2
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm 2
2.3 Các giải pháp đã sử dụng để giải quyết vấn đề 3
2.3.1 Thao tác với tệp 3
2.3.2 Hướng dẫn tạo tệp văn bản 5
2.3.3 Các bài tập giúp học sinh rèn luyện kỹ năng thao tác với tệp và tránh những lỗi hay gặp 7
2.4 Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, bản thân, đồng nghiệp và nhà trường 14
3 KẾT LUẬN, KIẾN NGHỊ 15
3.1 Kết luận 15
3.2 Kiến nghị và đề xuất 15
Trang 4DANH MỤC CHỮ VIẾT TẮT
Ngôn ngữ lập trình NNLT Tài liệu tham khảo TLTKSách giáo khoa SGK Sách giáo viên SGV
Trang 51.MỞ ĐẦU 1.1 Lý do chọn đề tài
Theo chương trình SGK Tin học 11 và hướng dẫn điều chỉnh nội dung dạyhọc học kỳ II năm học 2019 -2020 của Bộ giáo dục và đào tạo, kiểu dữ liệu tệp
và thao tác với tệp đang là nội dung rất quan trọng Tuy nhiên, thời lượngchương trình dành cho phần tệp không nhiều, trong đó:
Mục 2 Phân loại tệp và thao tác với tệp của §14 Kiểu dữ liệu tệp
Ví dụ 2 của §16 Ví dụ làm việc với tệp
Hai nội dung này không dạy, chỉ khuyến khích học sinh đọc thêm, vậy nênhọc sinh càng rất mơ hồ và gặp nhiều lỗi khi viết chương trình với kiểu dữ liệunày Vì nhiều thao tác hơn so với các kiểu dữ liệu khác mà các em cảm thấyphức tạp, khó hiểu, khó vận dụng vào bài tập dẫn đến mất hứng thú học tập.Trước thực trạng đó tôi nghĩ mình nên chọn một cách dạy sao đầy đủ và dễhiểu cho học sinh Từ đó giúp học sinh ngày càng hứng thú với các ngôn ngữ lậptrình Từ thực tiễn giảng dạy trên lớp kết hợp hướng dẫn học sinh học tại nhàbằng phương pháp trực tuyến về kiểu dữ liệu tệp (file) tôi đã rút ra một số kinhnghiệm để giúp học sinh làm bài tập ở chương V “Tin học 11” có hiệu quả nên
tôi viết sáng kiến kinh nghiệm: “Biện pháp giúp học sinh thực hành với kiểu
dữ liệu tệp trong chương trình Tin học 11 ở trường THCS và THPT Nghi Sơn”.
1.2 Phạm vi và đối tượng nghiên cứu
1 Phạm vi nghiên cứu: Trong đề tài này tôi chỉ xây dựng và đề xuất một sốbiện pháp hướng dẫn học sinh làm một số bài tập đơn giản liên quan đến kiểu dữliệu tệp trong chương trình Tin học 11 để học sinh có thể nắm bắt được các thaotác và tránh gặp phải những lỗi cơ bản khi làm việc với tệp (file)
2 Đối tượng nghiên cứu:
Học sinh khối 11 trường THCS và THPT Nghi Sơn – Thanh Hóa
1.3 Mục đích của đề tài
Giúp học sinh hiểu rõ, nắm vững và tránh được các lỗi thường gặp khi làmbài tập về tệp trong “chương V - Tin học 11” Từ đó các em có thể vận dụng vàyêu thích làm các bài tập có sử dụng kiểu dữ liệu tệp
1.4 Phương pháp nghiên cứu
- Lựa chọn các ví dụ các bài tập cụ thể từ đơn giản đến phức tạp để hướngdẫn học sinh tiếp cận với kiểu dữ liệu mới tệp (file) từ đó phân tích tỉ mỉ nhữngsai lầm của học sinh, vận dụng hoạt động năng lực tư duy và kỹ năng vận dụngkiến thức của học sinh để từ đó học sinh có thể viết được các chương trình hoànchỉnh
- Phương pháp quan sát: là phương pháp thu thập thông tin về quá trình giáo
dục trên cơ sở tri giác trực tiếp các hoạt động sư phạm cho ta những tài liệu sống
Trang 6về thực tiễn giáo dục để có thể khái quát nên những quy luật nhằm chỉ đạo tổchức quá trình giáo dục được tốt hơn1.
- Phương pháp thực nghiệm sư phạm: là phương pháp thu nhận thông tin về
sự thay đổi số lượng, chất lượng trong nhận thức và hành vi của các đối tượnggiáo dục do giáo viên tác động đến bằng một số câu hỏi và bài tập kiểm tra2
2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM 2.1 Cơ sở lý luận của sáng kiến kinh nghiệm
Tất cả các dữ liệu thuộc các kiểu dữ liệu đã xét đều được lưu trữ ở bộ nhớtrong (RAM) và do đó dữ liệu sẽ bị mất khi tắt máy Với một số bài toán có khốilượng dữ liệu lớn, có yêu cầu lưu trữ để xử lý nhiều lần, cần có kiểu dữ liệu tệp(file)3
Xét theo cách tổ chức dữ liệu, có thể phân tệp thành hai loại: Tệp văn bản vàtệp có cấu trúc (trong chương trình Tin học 11 chỉ xét đến tệp văn bản)
“Tệp văn bản là tệp mà dữ liệu được ghi dưới dạng các kí tự theo mã ASCII Trong tệp văn bản, dãy kí tự kết thúc bởi kí tự xuống dòng hay kí tự kết thúc tệp tạo thành một dòng” 4
Tệp là một kiểu dữ liệu có cấu trúc Định nghĩa của tệp có phần nào giốngmảng ở chỗ chúng đều là tập hợp của các phần tử dữ liệu có cùng kiểu Songmảng được định nghĩa và khai báo trong chương trình với số phần tử đã xácđịnh còn số phần tử của tệp không được xác định khi định nghĩa
Để có thể làm việc với tệp cần phải khai báo biến têp Các thao tác với tệpvăn bản bao gồm:
- Gắn tên tệp, mở tệp để đọc và mở tệp để ghi;
- Đọc dữ liệu từ tệp, ghi dữ liệu vào tệp;
- Đóng tệp
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Khi dạy “Chương V-Tin học 11” tại trường THCS và THPT Nghi Sơn tôinhận thấy các em rất lúng túng và thường mắc lỗi khi làm bài tập với kiểu dữliệu tệp Các em không hiểu được bản chất, ý nghĩa của từng câu lệnh khi thaotác với tệp nên khi viết chương trình thường mắc lỗi
Học sinh không nhớ kiến thức cũ để giải quyết các bài tập
Dữ liệu kiểu tệp khác hoàn toàn với các kiểu dữ liệu các em đã được học Bàitập cũng tương đối phức tạp với mức học của các em
Các em không hiểu vai trò, ý nghĩa của từng câu lệnh
1 Được trích dẫn từ TLTK số [1]
2 Được trích dẫn từ TLTK số [1]
3 Được trích dẫn từ TLTK số [2]
4 Được trích dẫn từ TLTK số [2]
Trang 7Thực tế giảng dạy đặt ra vấn đề: làm thế nào để học sinh hiểu bài và tránhđược những sai lầm thường gặp là điều quan trọng Tuy nhiên, để giải quyết vấn
đề này là không đơn giản Nên tôi đã áp dụng SKKN: “Biện pháp giúp học
sinh thực hành với kiểu dữ liệu tệp trong chương trình Tin học 11 ở trường THCS và THPT Nghi Sơn” vào giảng dạy “Chương V-Tin học 11”.
2.3 Các giải pháp đã sử dụng để giải quyết vấn đề
2.3.1 Thao tác với tệp
Để học sinh có thể tiếp thu được kiến thức về tệp một cách dễ dàng, trướchết giáo viên cần làm rõ cho học sinh hiểu được vai trò của kiểu tệp (chỉ xét đếntệp văn bản) và phân biệt được: tệp dữ liệu vào, tệp lưu trữ chương trình, tệp dữliệu ra Đối với NNLT Pascal giáo viên nên trình chiếu và hướng dẫn sơ bộ vềcác thao tác cơ bản khi làm việc với tệp như sau:
Trang 8Sau khi học sinh đã bước đầu hình dung được việc tương tác giữa chươngtrình chính và các tệp, giáo viên bắt đầu đi vào giới thiệu các thao tác cụ thểbằng ngôn ngữ lập trình
a Khai báo
Trong các NNLT để làm việc với dữ liệu kiểu tệp ta phải sử dụng biến tệp.Việc đọc (ghi) dữ liệu tệp sẽ được thực hiện thông qua biến tệp
Khai báo biến tệp văn bản trong NNLT Pascal có dạng:
Var <tên biến tệp> : text;5
Trong đó: <tên biến tệp> là tên do người lập trình đặt theo quy tắc đặt tên
của NNLT Pascal
Ví dụ: Var f1, f2: text;
b Gắn tên tệp
Để gắn tên tệp với biến tệp ta sử dụng thủ tục sau:
Assign(<tên biến tệp>,<tên tệp>);
Trong đó: <tên tệp> là biến xâu hoặc hằng xâu;
<tên biến tệp> được khai báo ở phần khai báo của chương trình.
Ví dụ1: Assign (f1,’songuyen.inp’);
Ví dụ 2: Để có thể đọc dữ liệu từ tệp INP.DAT trên thư mục gốc của ổ đĩa
C, ta cần gắn tệp đó với một biến tệp, ví dụ là tep2 bởi thủ tục:
Assign (tep2,’C:\INP.DAT’);6
c Mở tệp
Trước khi mở tệp ta phải gắn tên tệp cho biến tệp bằng thủ tục assign, tệp có
thể dùng để chứa kết quả ra hoặc dữ liệu vào nên cách mở tệp cũng khác nhau
Mở tệp để đọc dữ liệu ta dùng thủ tục:
Reset (<tên biến tệp>);
VD: Để đọc dữ liệu từ tệp ‘songuyen.inp’ ta có thể viết như sau:
Read (<tên biến tệp>,<danh sách biến>);
hoặc: Readln (<tên biến tệp>,<danh sách biến>);
VD: Giả sử đã có các khai báo đầy đủ về biến và tệp ‘SONGUYEN.INP’ lưu trữ
3 số nguyên Ta có thể đọc tệp như sau:
5 Được trích dẫn từ TLTK số [2]
6 Được trích dẫn từ TLTK số [2]
Trang 9Read (f1,x,y,z);
Thủ tục dùng để ghi dữ liệu vào tệp có dạng:
Write (<tên biến tệp>,<danh sách kết quả>);
hoặc: Writeln (<tên biến tệp>,<danh sách kết quả>);
VD: Ghi giá trị kq vào tệp ta có thể viết:
sự hoàn tất việc ghi dữ liệu ra tệp
2.3.2 Hướng dẫn tạo tệp văn bản.
Tệp dữ liệu vào (tệp Input) và tệp dữ liệu ra (tệp Output) có thể được tạobằng nhiều cách khác nhau và không cùng nằm trong tệp chương trình Nhiềuhọc sinh nhầm lẫn giữa ba tệp này dẫn đến khi thao tác trên tệp bằng lệnh bị sai,còn tệp chương trình chính là tệp được soạn thảo trên các NNLT có thể làPascal, C, C++,…Khi học về kiểu tệp ở trên lớp các em mới chỉ được học cácthao tác cơ bản như khai báo, gắn tên tệp, mở tệp, đọc/ghi dữ liệu tệp và đóngtệp Lúc này các em chưa hình dung được tệp Input và tệp Output là ở đâu ra vànằm ở chỗ nào, nên giáo viên nên giúp học sinh trả lời được câu hỏi này Vì vậytôi dùng biện pháp hướng dẫn học sinh tạo ra các tệp Input bằng các cách sau:
Cách 1: Tạo tệp Input có đuôi pas
Khi vừa mới làm quen với kiểu dữ liệu tệp, các em chưa hiểu được cách tạotệp và kiểm tra dữ liệu trong tệp, vậy nên để thuận tiện cho việc xem kết quả củathao tác ghi dữ liệu vào tệp và đọc dữ liệu ra từ tệp có đúng hay không trước hếtnên hướng dẫn các em cách tạo tệp và xem dữ liệu trong tệp ngay trên Pascalvới những tệp có phần đuôi là pas
Bài tập: Hãy tạo tệp ‘Songuyen.pas’ để lưu trữ các số nguyên từ 1 đến 10,mỗi số cách nhau ít nhất một dấu cách trống
Hướng dẫn
Bước 1: Khởi động Turbo Pascal (Free Pascal)
Bước 2: Chọn File -> New
Bước 3: Nhập các số nguyên từ 1 đến 10 mỗi số cách nhau một dấu cáchtrống
Trang 10Bước 4: Lưu tệp lại với tên là ‘Songuyen.pas’ (có thể không gõ phần đuôi,Pascal tự mặc định đuôi là Pas).
Hướng dẫn học sinh thực hiện trên máy theo các bước nêu trên, sau
đó hướng dẫn học sinh mở tệp ra để xem kết quả:
Cách 2: Tạo tệp bằng Notepad:
Hướng dẫn học sinh tạo tệp bằng Notepad
Bài tập : Hãy tạo tệp ‘dulieu.inp’ bằng Notepad có cấu trúc: Gồm một dòng lầnlượt là các số nguyên, mỗi số cách nhau ít nhất một dấu cách trống
Hướng dẫn:
Bước 1: Mở Notepad
Start -> Program -> Accessorie -> Notepad Bước 2: Nhập dữ liệu theo đúng cấu trúc đề bài yêu cầu;
Bước 3: Lưu dữ liệu đúng tên tệp cả phần đầu và phần mở rộng
Hướng dẫn học sinh thực hiện trên máy theo ba bước thực hiện tạo tệp theo yêu cầu bài tập:
Ví dụ một tệp tạo theo cấu trúc bài ra:
Trang 11Cách 3: Tạo tệp bằng viết chương trình
Có thể hướng dẫn học sinh viết một chương trình tạo một tệp văn bản bằngcách nhập dữ liệu từ bàn phím
Bài tập: Em hãy viết chương trình tạo tệp ‘dulieu.inp’ có cấu trúc: Gồm mộtdòng lần lượt là các số nguyên, mỗi số cách nhau ít nhất một dấu cách trống
bộ input đơn giản để học sinh nắm chắc được kiến thức về tệp
Trang 122.3.3 Các bài tập giúp học sinh rèn luyện kỹ năng thao tác với tệp và tránh
những lỗi hay gặp.
Bài tập 1: Chương trình sau là chương trình đọc dữ liệu từ tệp văn bản
Songuyen.inp Tính tổng các phần tử trong tệp và đưa dữ liệu ra tệpSonguyen.out
Tệp văn bản Songuyen.inp có cấu trúc:
- Dòng đầu ghi số nguyên N là số phần tử của tệp;
- Dòng thứ hai gồm đúng N số nguyên Mỗi số cách nhau một dấucách trống
Tệp văn bản Songuyen.out có cấu trúc: Một số duy nhất ghi tổng N phần tử
Trang 13for i:=1 to N do
begin
read(f1,x);
S:=S+x;end;
Write(f2,S:4);close(f1);
End.
Trang 14Câu hỏi 1: Em hãy nhập chương trình trên và chạy thử Kiểm tra tệp Songuyen.out cho kết quả thế nào?
Hướng dẫn: Tệp Songuyen.out là tệp trống không có dữ liệu
Câu hỏi 2: Tìm lỗi trong chương trình dẫn đến tệp songuyen.out là tệp không có dữ liệu?
Ở câu hỏi này phần lớn không tìm được nguyên nhân là do quên đóng tệp f2
Chú ý cho học sinh: Mỗi khi thao tác với tệp, khi làm việc với tệp ngoài gán
tên tệp và mở tệp (để đọc hoặc để ghi) thì sau khi làm việc xong phải đóng tệp.Nếu quên đóng tệp thì khi chạy chương trình sẽ không báo lỗi, nhưng không thểghi dữ liệu vào tệp Vì vậy chương trình trên cần thêm lệnh đóng tệp f2 như sau:
Trang 15Bài tập 2: Khắc phục lỗi đọc ghi dữ liệu không đúng vì chưa hiểu rõ các lệnh: read và readln; write và writeln
Cho tệp văn bản Dulieu.inp có cấu trúc:
- Dòng đầu ghi số nguyên N là số phần tử của tệp
- Dòng thứ hai gồm đúng N số nguyên Mỗi số cách nhau một dấu cáchtrống
a Viết chương trình đọc dữ liệu từ tệp Dulieu.inp và ghi dữ liệu vào tệpDulieua.out (tệp Dulieua.out có cấu trúc: một dòng lần lượt là các số nguyên củatệp Dulieu.inp, mỗi số cách nhau một dấu cách trống)
b Viết chương trình đọc dữ liệu từ tệp Dulieu.inp và ghi dữ liệu vào tệpDulieub.out (tệp Dulieub.out có cấu trúc: Gồm N dòng lần lượt là các số nguyêncủa tệp Dulieu.inp, mỗi số một dòng)
Hướng dẫn:
Đưa ra một ví dụ tệp văn bản Dulieu.inp để học sinh thấy rõ cấu trúc của tệp:
Trang 16Hướng dẫn:
Đưa ra hai chương trình cài đặt của câu a và câu b:
Câu hỏi 1: Hãy quan sát hai chương trình cài đặt và giải thích vì sao khi ghi
dữ liệu vào tệp ở chương trình “Baitap2a” sử dụng câu lệnh “write(f2,x:3);” còn ở chương trình “Baitap2b” sử dụng câu lệnh “writeln(f2,x:3);”?
Trả lời: Vì ở chương trình “Baitap2a” tệp Dulieua.out có cấu trúc gồm mộtdòng lần lượt là các số nguyên của tệp Dulieu.inp, mỗi số cách nhau một dấucách trống Còn ở chương trình “Baitap2b” tệp Dulieub.out có cấu trúc gồm Ndòng lần lượt là các số nguyên của tệp Dulieu.inp, mỗi số một dòng
Đưa ra hai tệp Dulieua.out và Dulieub.out sau khi thực hiện chương trình đểgiải thích rõ hơn để học sinh phân biệt được khi nào cần sử dụng câu lệnh write
read(f1,x);
writeln(f2,x:3);
end;
close(f1);
Trang 17Tệp văn bản Dulieub.out:
Câu hỏi 2: Hãy quan sát trong chương trình cài đặt “Baitap2a” đoạn lệnh đọc
dữ liệu từ tệp giải thích vì sao khi đọc số phần tử của tệp N thì dùng câu lệnh
Readln (readln(f1,N);) và khi đọc các phần tử của tệp thì dùng lệnh Read
(read(f1,x);)?
Trả lời: Vì cấu trúc tệp Dulieu.inp gồm hai dòng:
- Dòng đầu ghi số nguyên N là số phần tử của tệp
- Dòng thứ hai gồm đúng N số nguyên Mỗi số cách nhau một dấu cáchtrống
Nên sau khi đọc số phần tử của tệp N thì con trỏ chuột phải nằm ở đầu dòng
tiếp theo để đọc tiếp dữ liệu vì vậy dùng câu lệnh Readln (readln(f1,N);)
Các phần tử của tệp nằm trên một dòng nên sau khi đọc mỗi phần tử củatệp con trỏ chuột phải nằm trước phần tử tiếp theo cùng dòng để đọc tiếp cho tới
hết vì vậy dùng câu lệnh Read (read(f1,x);).
Bài tập 3: Cho tệp văn bản Sothuc.inp có cấu trúc:
Gồm các số thực, mỗi dòng một số
Viết chương trình đọc dữ liệu từ tệp, tính và đưa ra tổng các số trong tệp Kếtquả đưa ra tệp Sothuc.out
Hướng dẫn:
Một số câu hỏi hướng dẫn học sinh trước khi viết chương trình:
Câu hỏi 1: Số lượng phần tử của tệp đã biết trước chưa?
Trả lời: Số lượng phần tử của tệp chưa biết trước
Trang 18Câu hỏi 2: Khi chưa biết số lượng phần tử của tệp để thao tác đọc/ ghi với
tệp văn bản thường sử dụng hàm chuẩn nào
Trả lời: Hàm eof(<biến tệp>) trả về giá trị true nếu con trỏ tệp đang chỉ tớicuối tệp
Câu hỏi 3: Em hãy viết đoạn lệnh đọc dữ liệu từ tệp Sothuc.inp và tính tổng
Bài tập này giúp học sinh củng cố lại các thao tác khi làm việc với tệp
Đưa ra một ví dụ về tệp Sothuc.inp để học sinh thấy cấu trúc của tệp sẽ giúp các
em thực hiện yêu cầu của bài dễ hơn