Hướng dẫn cách viết chương trình kiểu tệp năm 2024
Trong quá trình giảng dạy môn tin học 11 tôi đã rút ra nhiều bài học kinh nghiệm cho bản thân qua từng tiết dạy và luôn mong muốn học sinh có thể vận dụng hiệu quả máy tính để phục vụ cho việc tiếp thu kiến thức cho bản thân. Vì vậy với điều kiện phòng máy nhà trường hiện có tôi đã luôn tạo điều kiện cho các em học tập trực quan trên máy tính không chỉ các tiết thực hành mà còn cả đa số các tiết lí thuyết. Tuy nhiên ở chương V. Tệp và thao tác với tệp, sẽ rất khó cho học sinh trong việc tự mình thực hành được một bài tập về kiểu tệp nếu không có sự hướng dẫn của giáo viên bởi sách giáo khoa chưa làm rõ nhiều vấn đề và cũng không hướng dẫn học sinh thực hành. Bởi việc chạy được một chương trình có sử dụng kiểu tệp phải đảm bảo nhiều yếu tố đi kèm. Không như các chương trình không sử dụng kiểu tệp mà học sinh đã học trước đó thì chỉ cần gõ đầy đủ nội dung một chương trình sách giáo khoa viết thì nó sẽ chạy được và thế là có thể xem kết quả còn với kiểu tệp thì không. Để cho học sinh có thể hiểu được sâu sắc một số vấn đề cơ bản khi làm việc với kiểu tệp và tạo hứng thú cho các em ở nội dung này tôi đã tìm hiểu, xây dựng và áp dụng sáng kiến kinh nghiệm “Hướng dẫn thực hành kiểu tệp trên Pascal dành cho học sinh lớp 11”. Bạn đang xem 20 trang mẫu của tài liệu "Sáng kiến kinh nghiệm Hướng dẫn thực hành kiểu tệp trên Pascal dành cho học sinh Lớp 11", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên 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. Tất cả các dữ liệu thuộc các kiểu dữ liệu mà học sinh đã được học đều được lưu trữ trên 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ối lượ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). Với lợi ích của kiểu tệp được đề cập ở trên thì việc sử dụng được kiểu tệp một cách thành thạo trong quá trình lập trình là một điểu thật sự quan trọng và cần thiết. 2.1.2. Thao tác với tệp Qua quá trình tìm hiểu từ sách giáo khoa tin học 11, sách giáo viên tin học 11, quyển “Phương pháp giải các bài toán trong tin học” của thạc sĩ Trần Đức Huyên tôi xin trình bày những kiến thức cơ bản về kiểu tệp văn bản để hỗ trợ cho học sinh trong quá trình giải (thực hành) các bài toán đơn giản về kiểu dữ liệu này. 2.1.2.1. Khai báo kiểu tệp văn bản Khai báo biến tệp để sau đó có thể thực hiện các thao tác với tệp thông qua biến tệp. Cú pháp khai báo: var : text; Ví dụ: var f: text; 8 2.1.2.2. Gắn tên tệp Trong lập trình ta không thao tác trực tiếp với tệp dữ liệu trên đĩa mà thông qua biến tệp. Gắn tên tệp với biến tệp thực chất là tạo một tham chiếu giữa tệp trên đĩa và biến tệp trong chương trình, làm cho biến tệp trở thành đại diện cho tệp. Cú pháp: assign(, ); VD: assign(f, „E:\kieutep.doc‟); Giáo viên cần phân tích cho học sinh thấy rõ sự cần thiết phải gắn tên tệp. Trong cú pháp, tên tệp là hằng xâu kí tự hoặc giá trị của một biểu thức kiểu xâu kí tự (để hệ điều hành có thể xác định được tệp). Tất cả các phép toán trên biến tệp sẽ tác động tới tệp. Sau khi gọi thủ tục asign, sự liên kết giữa biến tệp và tệp chỉ kết thúc khi có lời gọi asign khác thực hiện cũng trên biến tệp này (nghĩa là lúc đó biến tệp được chuyển sang gắn cho một tên tệp khác). Tên tệp có thể là đường dẫn chứa ổ đĩa, danh sách các thư mục liên tiếp cách nhau bởi dấu đường dẫn (), cuối cùng là tên tệp: :\...\ Độ dài lớn nhất của tên tệp là 79 kí tự. Đặc biệt khi tên tệp là xâu rỗng (độ dài xâu bằng 0) thì biến tệp được gắn cho tên tệp vào/ra chuẩn. Các tệp vào ra chuẩn được quy định tương ứng với thiết bị nào là tùy thuộc vào sự mở rộng của mỗi chương trình dịch Pascal, nhưng thường quy định tệp input chuẩn là bàn phím, tệp output chuẩn là màn hình. 2.1.2.3. Mở tệp để ghi Trước khi ghi dữ liệu vào tệp ta phải dùng thủ tục mở tệp để ghi. Thủ tục này được gọi sau khi đã gắn tên tệp. Cú pháp như sau: rewrite(); Khi thực hiện thủ tục rewrite(), nếu trên thư mục gốc của ổ đĩa chưa có tệp cần ghi dữ liệu thì tệp sẽ được tạo với nội dung rỗng (tên tệp đã được xác định trong thủ tục gắn tên tệp. Nếu đã có, thì nội dung cũ sẽ bị xóa để chuẩn bị ghi dữ liệu mới vào. 9 Ví dụ: assign(f,‟e:\tong2so.doc‟); rewrite(f); 2.1.2.4. Ghi dữ liệu vào tệp Việc ghi dữ liệu vào tệp giống như ghi dữ liệu ra màn hình. Câu lệnh dùng thủ tục ghi có dạng: Write(,); hoặc Writeln(,); Trong đó, danh sách kết quả gồm một hoặc nhiều phần tử. Phần tử là biến đơn hoặc biểu thức (số học, quan hệ hoặc lôgic) hoặc hằng xâu. Trường hợp có nhiều phần tử thì các phần tử được ngăn cách bởi dấu phẩy. Khi hai kết quả liền nhau cùng là kiểu số thì thì cần xen vào giữa hai kết quả này một kết quả trung gian là hằng kí tự dấu cách. Ví dụ, write(f, x,„ „,y). Trong đó f là biến tệp, x và y là hai biểu thức số. Trước khi gọi thủ tục này, tệp tương ứng với biến tệp phải là đang mở. Thủ tục write sẽ ghi lần lượt các kết quả theo danh sách kết quả vào tệp kể từ vị trí hiện thời của con trỏ tệp. 2.1.2.5. Ghi thêm dữ liệu vào tệp đã có nội dung Đây là một nội dung mới không được đề cập trong chương trình sách giáo khoa nhưng tôi nghĩ nó thật sự cần thiết trong nhiều tình huống cụ thể. Để ghi thêm dữ liệu vào tệp đã có nội dung ta dùng thủ tục append có cú pháp: append(); Ví dụ: append(f); Sau khi gọi thủ tục append thì tệp sẽ sẵn sàng để ghi dữ liệu mới vào. Lưu ý: Trong cùng một chương trình nếu muốn ghi thêm dữ liệu thì không thể đồng thời sử dụng thủ tục rewrite và append vì khi dùng rewite nội dung tệp sẽ bị xóa (nếu tệp đã có nội dung). Vì vậy mục đích ghi thêm dữ liệu mới vào sẽ không được thực hiện như ý muốn. 10 2.1.2.6. Mở tệp để đọc Câu lệnh sử dụng thủ tục reset mở tệp văn bản đã tồn tại để đọc dữ liệu. Cú pháp: reset(); Ví dụ: reset(f); Trong cú pháp, biến tệp phải đã được gắn với một tên tệp (dùng asign). Nếu tệp này không tồn tại thì thực hiện reset sẽ gặp lỗi. Nếu tệp đã mở thì nó sẽ đóng lại rồi sau đó mở lại. Vị trí con trỏ tệp sau lời gọi reset là đầu tệp. 2.1.2.7. Đọc dữ liệu từ tệp Cú pháp đọc tệp văn bản: Read(, ); Hoặc Readln(, ); Ví dụ: read(f, x, y); hoặc readln(f, x, y); Thủ tục read ghi xong con trỏ tệp không xuống dòng tiếp theo, thủ tục readln ghi xong con trỏ tệp xuống đầu dòng tiếp theo. Danh sách biến là một hoặc nhiều tên biến đơn. Trong trường hợp nhiều biến thì các biến cách nhau bằng dấu phẩy.Các dữ liệu cần đọc trong tệp gán vào danh sách biến phải lần lượt có kiểu tương ứng với kiểu của biến trong danh sách biến. Nếu sai kiểu thì chương trình mắc lỗi. Lỗi này thường gặp khi biến có kiểu số, dữ liệu đọc được lại là kiểu xâu. Ví dụ: tệp docdulieu.txt chỉ có một dòng là tin hoc 11 Xét chương trình Var f: text; s: string[6]; x: longint; begin assign(f, ‘doc.txt’); reset(f); 11 read(f, s, x); writeln(s); writeln(x); readln end. Chương trình mắc lỗi “Invalid numberic format” vì sau khi đọc được s = „tin ho‟ , tiếp theo đọc dữ liệu cho x thì mắc lỗi thì mắc lỗi vì „c‟ không là dạng số. Nếu thay lại khai báo s:string[7] hoặc string[8] thì chương trình không mắc lỗi khi thực hiện đọc tệp, kết quả trên màn hình là Với biến kiểu xâu, thủ tục read sẽ đọc các kí tự trên một dòng vào biến (loại trừ các kí tự đánh dấu hết dòng hoặc hết tệp). Số kí tự đọc vào biến xâu bằng độ dài đã khai báo của xâu. Với biến kiểu nguyên hoặc thực, thủ tục read sẽ không đọc dấu cách, dấu tab hoặc dấu xuống dòng đứng trước xâu chữ số. Nếu xâu chữ số không phù hợp với kiểu của biến tương ứng thì xuất hiện lỗi vào/ra (I/O). Trong trường hợp ngược lại, giá trị kiểu số tương ứng của xâu chữ số sẽ được gán cho biến. Lệnh read tiếp theo sẽ sẽ được bắt đầu bằng dấu cách, dấu tab, hoặc kí tự hết dòng và chúng cũng lại được bỏ qua. Những dấu này vạch định cho các xâu chữ số. 2.1.2.8. Đóng tệp Cú pháp: close(); Trong cú pháp, biến tệp đã được gắn với một tệp đang mở bằng reset, rewrite hoặc append ở thời điểm trước đó để mở tệp. Sau lệnh close, tệp gắn với biến tệp được hoàn thành cập nhật và sau đó được đóng lại. Chương trình trả lại quyền quản lí tệp cho hệ điều hành. Nếu thực hiện ghi dữ liệu vào tệp mà không đóng tệp thì không có dữ liệu nào được ghi hoặc chỉ ghi được một phần vào tệp, nguyên nhân 12 do các dữ liệu chứa trong bộ nhớ đệm chưa chuyển kịp vào đĩa thì chương trình đã bị ngắt. 2.1.2.9. Một số hàm và thủ tục chuẩn thường dùng trong thao tác tệp Hàm EOF: trả lại giá trị true nếu con trỏ tệp ở vị trí cuối tệp, ngược lại trả giá trị false. Hàm EOL: nếu con trỏ tệp ở vị trí cuối dòng thì trả về giá trị true, ngược lại trả giá trị false. Vì vậy nếu muốn đọc dữ liệu của cả một dòng hay của cả tệp ta sẽ cần dùng đến một trong hai hàm này. Việc áp dụng sẽ được trình bày trong phần đọc dữ liệu từ tệp trong đề tài này. 2.2. Thực trạng vấn đề nghiên cứu Trường THPT Ngã Năm là một ngôi trường thuộc vùng nông thôn của tỉnh Sóc Trăng, đa phần học sinh không có máy tính cá nhân để hỗ trợ cho việc học nên học sinh chủ yếu thực hành tin học tại phòng máy của nhà trường. Điều này ít nhiều ảnh hưởng đến khả năng tự rèn luyện cũng như kiến thức về tin học của các em. Bên cạnh đó đối với học sinh 11 việc học Pascal là một nỗi “nhọc nhằn” với đa số học sinh của trường. Trong quá trình giảng dạy tại trường qua các năm tôi nhận thấy chỉ có rất ít học sinh thích và học được Pascal. Qua khảo sát các lớp tôi đã từng dạy qua nội dung mà đề tài đang nghiên cứu thì có đa số học sinh không biết viết một chương trình đơn giản để ghi dữ liệu vào một tệp và đọc dữ liệu từ tệp đó rồi ghi kết quả đọc được ra màn hình. Các em chỉ biết cú pháp khai báo, gắn tên tệp, các thao tác với tệp cùng các ví dụ riêng lẻ mà không hệ thống lại được thành một chương trình hoàn chỉnh được. Nguyên nhân là do:
|