Tải bản đầy đủ (.doc) (22 trang)

Hệ thống một số vấn đề giúp học sinh giải quyết tốt thực hành kiểu tệp tin học 11

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (177.42 KB, 22 trang )

MỤC LỤC
1.MỞ ĐẦU................................................................................................................2
1.1. Lí do chọn đề tài.............................................................................................2
1.2. Mục đích và nhiệm vụ nghiên cứu..................................................................2
1.3. Đối tượng và phạm vi nghiên cứu...................................................................2
1.4. Phương pháp nghiên cứu................................................................................2
1.5. Tính mới của đề tài.........................................................................................2
2. NỘI DUNG......................................................................................................3
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm........................................................3
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm........................6
2.3. Các sáng kiến kinh nghiệm đã sử dụng để giải quyết vấn đề........................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, với bản thân,
với đồng nghiệp và nhà trường........................................................................15
3. KẾT LUẬN, KIẾN NGHỊ.............................................................................16
3.1. Kết luận.........................................................................................................16
3.2. Kiến nghị......................................................................................................16
TÀI LIỆU THAM KHẢO................................................................................18

1


1. MỞ ĐẦU
1.1 Lí do chọn đề tài
Hơn 12 năm tôi dạy ở trường cũ là trường THPT Lê Viết Tạo, tôi nhận thấy đa số học
sinh đều cho rằng tin học 11 là môn học khó vì nó liên quan đến việc lập trình để giải
quyết một bài toán. Nó đòi hỏi các em phải có tư duy về toán học, có cách giải quyết
để đưa ra thuật toán của bài toán. Đặc biệt là ở chương V- Tệp và thao tác với tệp, khi
dạy đến phần này tôi thấy học sinh còn mơ hồ. Hơn nữa ở phần này trong sách giáo
khoa không có bài thực hành nên học sinh còn nhiều vướng mắc khi giải một bài
toán liên quan đến kiểu dữ liệu tệp. Năm học này được chuyển về trường THPT Hậu
Lộc 4, với điều kiện phòng máy nhà trường hiện có nên tôi cố gắng tìm hiểu về kiểu


dữ liệu tệp, xây dựng và áp dụng sáng kiến kinh nghiệm “Hệ thống một số vấn đề
giúp học sinh giải quyết tốt thực hành kiểu tệp tin học 11”
1.2 Mục đích và nhiệm vụ nghiên cứu
Mục đích của đề tài tôi muốn hướng đến là giúp học sinh có thể thực thực hành một
cách hiệu quả các bài tập cơ bản về kiểu tệp văn bản mà cụ thể là có thể viết chương
trình trên máy tính để ghi dữ liệu vào tệp, đọc dữ liệu từ tệp .
Nhiệm vụ của đề tài là hướng dẫn người học giải quyết được các vấn đề xung quanh
việc dùng Pascal để: Khởi tạo một tệp, ghi dữ liệu của các lần thực hiện chương
trình vào tệp, ghi thêm dữ liệu vào tệp đã có nội dung, đọc dữ liệu kiểu xâu trên một
dòng, đọc dữ liệu kiểu số, đọc dữ liệu từ tệp có nội dung là kiểu xâu và kiểu số,…
1.3 Đối tượng nghiên cứu
Đề tài nghiên cứu về các thao tác đọc/ghi kiểu tệp văn bản trong Pascal của chương
trình tin học 11 nên đối tượng khảo sát là học sinh khối 11 và các em ở đội tuyển
tỉnh.
1.4 Phương pháp nghiên cứu
Ở mỗi vấn đề được nghiên cứu tôi đã sử dụng phương pháp phân tích để làm rõ nội
dung. Phương pháp phân tích là đặc biệt quan trọng và đó chính là chìa khóa để mở
ra những kiến thức mới nhưng dễ tiếp thu hơn.
1.5 Tính mới của đề tài
Đề tài nhằm hướng dẫn học sinh lớp thực hành các bài tập đơn giản về kiểu tệp văn
bản trên Pascal, giúp các em giải quyết được 2 thao tác cơ bản đối với tệp là đọc và
ghi tệp. Những điều này sách giáo khoa chỉ nói chung chung, chưa cụ thể rõ ràng và
cũng không hướng dẫn học sinh thực hành bài tập về kiểu tệp (cách khởi tạo một tệp
để đọc, ghi thêm dữ liệu vào tệp, ghi tất cả input và output của các lần
thực hiện chương trình vào tệp, cách để kiểm tra kết quả đọc được từ tệp hay kiểm
tra kết quả ghi tệp,…). Những vấn đề trên sẽ được trình bày trong đề tài này.

2



2. NỘI DUNG
2.1. Cơ sở lí luận
Pascal và kiểu tệp văn bản
Trong chương trình tin học 11 học sinh được làm quen với Pascal. Trong đó kiểu
tệp văn bản là một trong những nội dung được đề cập đế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ự được
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.
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 và một
số tài liệu trên mạng 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.
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 <biến tệp>: text;
Ví dụ: var f: text;
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(<biến tệp>, <tên tệp>);
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:
<ổ đĩa>:\<tên thư mục>\<tên thư mục>\...\<tên thư mục>\<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
3


chuẩn là màn hình.
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(<biến tệp>);
Khi thực hiện thủ tục rewrite(<biến tệp>), 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.
Ví dụ: assign(f,‟e:\tong2so.doc‟);
rewrite(f);
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(<biến tệp>,<danh sách kết quả>);


4


hoặc
Writeln(<biến tệp>,<danh sách kết quả>);
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.
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(<biến tệp>);
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.

5


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(<biến tệp>);
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.
Đọc dữ liệu từ tệp
Cú pháp đọc tệp văn bản:
Read(<biến tệp>, <danh sách biến>);
Hoặc
Readln(<biến tệp>, <danh sách biến>);
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,‘docdulieu.txt’);
reset(f);
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ẽ đượ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ố.
Đóng tệp
Cú pháp: close(<biến tệp>);
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 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.
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 Hậu lộc 4 là một ngôi trường thuộc vùng nông thôn của huyện,
nhiều 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..
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:


- Thời lượng phân phối chương trình không đủ để vừa cho học sinh học lý
thuyết và thực hành ngay sau đó;
- Nội dung sách giáo khoa không có bài tập thực hành cho nội dung này
đồng thời cũng không nêu ra các yếu tố để một chương trình có sử dụng kiểu tệp
chạy được trên máy;
- Phần mở rộng của các tệp ghi trong sách giáo khoa xa lạ với học sinh. Do
đó, nếu chạy được chương trình thì không biết cách để kiểm tra kết quả;
- Thiếu kiến thức căn bản để viết một chương trình đơn giản;
- Không có niềm đam mê dành cho môn học.
2.3. Các sáng kiến kinh nghiệm đã sử dụng để giải quyết vấn đề
Sau khi trình bày xong phần lý thuyết ở phần cơ sở lí luận, giáo viên phát cho mỗi
học sinh một phiếu bài tập thực hành kiểu tệp văn bản. Cụ thể biện pháp tiến hành

hướng dẫn thực hành các bài tập như sau:
Ghi dữ liệu vào tệp
So sánh thủ tục ghi dữ liệu ra màn hình và thủ tục ghi tệp
Học sinh có thể dễ dàng trả lời thông qua việc so sánh cú pháp giữa 2 thủ tục này.
Giống nhau: đều dùng tên thủ tục là write hoặc writeln, các phần tử của danh sách
kết quả; khác nhau: thủ tục ghi tệp có thêm biến tệp.
Tuy nhiên giáo viên cần nhấn mạnh cho học sinh nội dung sau: nếu muốn ghi dữ liệu
vào tệp trên nhiều hàng thì cần dùng thủ tục writeln (ghi xong xuống
dòng để chuẩn bị ghi tiếp dòng sau). Điều này tương tự như ghi dữ liệu ra màn
hình.
Để làm rõ những nội dung về gắn tên tệp, so sánh việc ghi dữ liệu ra màn hình và
ghi tệp tôi đã đưa ra vài tập ví dụ 1 như sau:
Ví dụ1 : Hãy viết chương trình trên Pascal tính tổng của 2 số (ghi kết quả ra màn
hình đồng thời ghi 2 số nhập từ bàn phím và tổng của chúng vào tệp
“e:\tong2so.doc”).
Giáo viên yêu cầu học sinh viết một chương trình nhập 2 số từ bàn phím,
tính tổng của chúng và xuất kết quả ra màn hình. Sau đó mới bổ sung vào các câu
lệnh để ghi giá trị của 2 biến đã nhập, kết quả tổng của chúng.
Sau đó, giáo viên cần mở tệp đã ghi xem nội dung cần ghi vào tệp có thực
sự được ghi vào tệp chưa (tệp ở đây là tong2so.doc) đồng thời yêu cầu các em so
sánh nội dung đã được ghi trên tệp này và nội dung được ghi ra màn hình.
Chương trình trên Pascal:
program tong2so;
uses crt;
var f:text;
x, a, b:integer;
begin
clrscr;



write('nhap 2 so: ');
readln(a, b);
x:=a+b;
writeln('tong cua 2 so da nhap: ',x);
assign(f,'e:\tong2so.doc');
rewrite(f);
writeln(f,'a= ',a,' b= ',b);
writeln(f,'tong cua 2 so da nhap: ',x);
close(f);
readln
end.
Kết quả sau khi thực hiện chương trình

Nội dung được ghi vào tệp “e:\tong2so.doc‟

Như vậy, nếu muốn ghi nhiều dòng dữ liệu vào tệp thì cứ thêm thủ tục Writeln(tệp>,<danh sách kết quả>);
Ghi vào tệp tất cả dữ liệu của các lần thực hiện chương trình
GV đặt ra cho các em các vấn đề sau:
- Nội dung cần ghi của các lần thực hiện chương trình có lần lượt được ghi
vào tệp không? Tại sao?
- Làm thế nào để có thể ghi được tất cả các dữ liệu (kết quả thực hiện
chương trình) của các lần thực hiện chương trình?
Điều này trong sách giáo khoa hoàn toàn không đề cập tới nhưng nếu không
tìm ra lời giải đáp cho HS thì không thể làm cho học sinh hiểu rõ về ghi tệp được.
Do đó tôi nhận thấy giải quyết vấn đề này là thực sự cần thiết.
Câu hỏi thứ nhất học sinh có thể trả lời được như sau: tệp chỉ ghi kết quả
của lần thực hiện chương trình sau cùng. Vì sau mỗi lần thực hiện chương trình thủ
tục rewrite(f) lại được gọi, điều đó có nghĩa là nội dung đã ghi trên tệp sẽ được xóa
để sẵn sàng cho việc ghi dữ liệu mới.

Câu hỏi thứ hai mới là một vấn đề quan trọng cần được làm rõ bởi ta dùng
kiểu tệp để lưu lại nội dung của các lần thực hiện chương trình để có thể sử dụng về


sau nhưng với kiến thức mà sác giáo khoa cung cấp không đủ để giải quyết vấn đề
này nên sẽ cần sự trợ giúp của giáo viên. Để có thể ghi thêm nội dung vào tệp ta sử
dụng thủ tục append(<biến tệp>). Thủ tục này sẽ thay thế cho thủ tục rewrite(tệp>) trong chương trình. Chú ý rằng thủ tục append(<biến tệp>) chỉ thay thế thủ
tục rewrite(<biến tệp>) khi ta đã thực hiện chương trình có rewrite(<biến tệp>) ít
nhất một lần để máy tính khởi tạo tệp cần ghi.
Ví dụ 2. Ghi tất cả dữ liệu của các lần thực hiện chương trình ở ví dụ 1 vào


p
r
o
g
r
a
m
t
o
n
g
2
s
o
n
h
a

p
t
h
e
m
;
u
s
e
s
c
r
t
;
v
a
r
f
:

te
xt
;

adln(a, b);
x:=a+b;
writeln('tong cua 2 so da nhap:
',x);
assign(f,'e:\tong2so.doc');
apappend(f);

writeln(f,'a= ',a,' b= ',b);
writeln;
writeln(f,'tong cua 2 so da nhap: ',x);
close(f);
readln

x
,
a
,
b
:
i
n
t
e
g
e
r
;

End.

b
e
g
i
n
cl
rs

cr
;
wr
it
e(
'n
ha
p
2
so
:
')
;
re


Kết quả thực hiện chương trình ở lần muốn ghi thêm dữ liệu:

Kết quả ghi tệp (sau 2 lần thực hiện chương trình):

Kể từ đây nếu muốn ghi thêm thì chỉ cần thực hiện chương trình thêm một lần nữa.
Với kiến thức vừa nêu chúng ta có thể ghi được input, outut của các bài tập trước
đây vào tệp. Ví dụ như bài toán giải phương trình bậc nhất, bậc hai,…
Ghi thêm dữ liệu vào tệp đã được khởi tạo trước đó
Nếu ta đã khởi tạo một tệp trên đĩa và nhập nội dung trực tiếp từ chương
trình ứng dụng tạo tệp hoặc khởi tạo một tệp rỗng thì việc ghi thêm dữ liệu vào nó
sẽ được thực hiện như thế nào?
Câu trả lời là chỉ cần dùng thủ tục append sau thủ tục assign rồi dùng thủ
tục write(<biến tệp>, <danh sách kết quả>) để ghi dữ liệu vào tệp.
Ví dụ 3. Ghi thêm dữ liệu vào tệp, dữ liệu này độc lập với dữ liệu đã khởi tạo trước

đó.
Nội dung tệp đã được khởi tạo trước đó bằng cách nhập trực tiếp trên Notepad
(hoặc khởi tạo một tệp rỗng):
Vd: dữ liệu ban đầu có: GV Hoang Thi Xinh
Truong THPH Hau Loc 4
Chương trình sử dụng thủ tục ghi thêm append(<biến tệp>):
Program nhap_them;
Uses crt;
Begin
Clrscr;
Assign(f,’e:\gv.txt’);
append(f);
writeln(f);
writeln(f,’to TD,QP - Tin’);
close(f);
readln
end.


Nội dung tệp đã được ghi thêm:
GV Hoang Thi Xinh
Truong THPH Hau Loc 4
To TD, QP- Tin
Đọc dữ liệu từ tệp
Đọc dữ liệu kiểu xâu trên một dòng vào một biến
Với biến 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 tối đa bằng độ dài đã
khai báo của biến xâu.
Đọc dữ liệu kiểu số
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 thì sẽ 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ẽ đượ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ố. Ví dụ sau sẽ làm rõ vấn đề này.
Ví dụ 4. Đọc xâu chữ số từ tệp vd4.txt có nội dung là các số 2 5 3 6 7 rồi ghi kết quả
đọc được ra màn hình:
Những cách có thể thực hiện:
Cách 1.
program vd4_1;
uses crt;
var f:text;

{khai bao bien tep f}

x,y,z,t,v:integer;
begin
clrscr;
assign(f,'e:\vd4.txt'); {gan ten tep}
reset(f);

{mo tep de doc}

read(f, x,y,z,t,v); {lan luot doc du lieu vao cac bien}
write(x,y,z,t,v); {xuat ket qua doc duoc ra man hinh}
close(f);
{dong tep}
readln
end.
Cách 2.



program vd4_2;
uses crt;
var f:text;
x:integer;

{khai bao bien tep f}
{khai bao bien x co kieu nguyen}

begin
clrscr;
assign(f,'e:\vd4.txt'); {gan ten tep}
reset(f);

{mo tep de doc}

while not eof(f) do {trong khi con tro tep chua tro toi
cuoi tep thi lam cong viec sau}

begin
read(f,x);
write(x);

{doc du lieu vao bien x}
{ghi ket qua doc duoc ra man hinh}

end;
close(f);


{dong tep}

readln

end
Cách 3.
program vd4_3;
uses crt;
var f:text;

{khai bao bien tep f}

A:array[1..10] of integer;{khai bao bien A co kieu mang}
begin
clrscr;
assign(f,'e:\vd4.txt'); {gan ten tep}
reset(f);

{mo tep de doc}

while not eof(f) do {trong khi con tro tep chua tro toi
cuoi tep thi lam cong viec sau}


b
e
g
i
n


e
n
d
.

r
e
a
d
(
f
,
A
[
i
]
)
;
{
d
o
c

i
]
}

{
g
h

i
k
e
t
q
u
a

l
i
e
u

d
o
c

v
a
o

d
u
o
c

t
u
A
[


end;

w close(f);
r readln
i
t
e
(
A
[
i
]
)
;

d
u

p
h
a
n

h}

r
a
m
a

n
h
i
n

{dong tep}


Cả 3 cách đều cho kết quả sau:

Bài tập vận dụng:
Sau đây là một số bài tập vận dụng các kiến thức về đọc và ghi dữ liệu để giải
quyết các bài toán đơn giản mà các em đã từng gặp qua chỉ khác là ở đây sử dụng
kiểu tệp văn bản. Các bài tập này sẽ giúp các em hiểu rõ hơn tác dụng của kiểu tệp
trong Pascal và giúp các em rèn luyện kỹ năng để viết chương trình có sử dụng cả
việc đọc và ghi tệp.
Bài 1. Cho tệp mang.txt có nội dung là 4 số nguyên như sau: 1 3 2 1
Hãy viết chương trình đọc dữ liệu từ tệp này.
Tính tổng các giá trị đọc được.
Ghi giá trị đọc được từ tệp mang.txt và tổng này vào tệp tong.txt.
Chương trình giải bài toán trên Pascal như sau:
program BT1;
uses crt;
var f1,f2:text;
A:array[1..10] of integer;
Tong:integer; i:byte;
begin
clrscr;
assign(f1,'e:\mang.txt');
assign(f2,'e:\tong.txt');

reset(f1);
rewrite(f2);
tong:=0;
for i:=1 to 4 do
begin
read(f1,A[i]);
write(f2,A[i]);
tong:=tong+A[i];
end;
writeln(f2);
write(f2,tong);
close(f1);
close(f2); readln
end.


Bài 2. Viết chương trình thực hiện các công việc sau:
- Đọc 3 số a, b, c từ tệp ptb2.txt
- Giải phương trình bậc hai với hệ số a, b, c vừa đọc được
- Ghi kết quả giải phương trình bậc hai vào tệp ketqua.txt.
Chương trình giải bài toán trên Pascal:
program giaiptb2;
uses crt;
var f1,f2:text;
a, b,
c:real;
d, x1, x2:real;
begin
assign(f1,'e:\ptb2.txt');
assign(f2,'e:\ketqua.txt');

reset(f1);
rewrite(f2);
read(f1, a, b, c);
d:=b*b-4*a*c;
if d<0 then writeln(f2,'ptvn')
else if d=0 then writeln(f2,'pt co nghiem kep
x1 = x2 = ',-b/(2*a))
else
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
write(f2,'nghiem cua pt la: ', 'x1= ',
x1:10:2,'x2= ', x2:10:2);
end;
close(f1);
close(f2);
end.
2.4 Hiệu quả của SKKN đối với hoạt động giáo dục, với bản thân, với đồng
nghiệp và nhà trường
Tôi đã áp dụng SKKN này ở lớp 11A7, khối 11. Đây là lớp đa số là học sinh khá.
Sau khi áp dụng tôi nhận thấy qua các bài tập kiến thức của các em về kiểu tệp văn
bản càng được hoàn thiện hơn, từ chổ chưa hiểu gì ở bài tập đầu các em đã dần làm
được các bài tập kế tiếp.
- Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2018-2019 khi chưa
thực hiện đề tài: (Khi tôi đang còn dạy ở trường THPT Lê Viết Tạo)


STT

Lớp


Sĩ số

Đạt yêu cầu

Không đạt yêu cầu

1
2

11A14
11D4

42
43

67%
55%

33%
45%

- Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2019-2020 sau khi thực
hiện đề tài:
STT

Lớp

Sĩ số


Đạt yêu cầu

Không đạt yêu cầu

1

11A7

43

90%

10%

2

11A11

36

85%

15%

Trong suốt quá trình áp dụng sáng kiến kinh nghiệm để truyền đạt cho học sinh, tôi
nhận thấy các em tỏ ra hăng hái, sôi nổi, năng phát biểu hơn. Các tiết học về kiểu tệp
nói riêng và thực hành nói chung trở nên sinh động hơn, học sinh ko còn cảm thấy
nhọc nhằn như trước. Vì đa phần các em đã có kiến thức cơ bản và vững về kiểu tệp.
Đối với bản thân tôi sau thời gian nghiên cứu đề tài đã giúp tôi có những tiết dạy
và thực hành hiệu quả. Tiết dạy thao giảng được đồng nghiệp đánh giá loại giỏi. Đồng

thời bản thân tôi cũng rút được nhiều kinh nghiệm trong quá trình giảng dạy để đạt
kết quả tốt nhất. Đồng nghiệp trong nhà trường cũng có tham khảo đề tài của tôi,
bước đầu đã có những vận dụng vào giảng dạy, góp phần nâng cao hiệu quả trong
chương V. Nhà trường có thêm số học sinh giỏi toàn diện và giáo viên cảm thấy hứng
thú trong từng tiết dạy, tâm huyết với nghề hơn.
3. KẾT LUẬN
3.1 Kết luận
Sáng kiến kinh nghiệm này là cả một quá trình tìm tòi học hỏi kiến thức từ sách,
thông tin trên internet, từ thực nghiệm của bản thân, từ những vấn đề bản thân tự đặt
ra và mong muốn giải quyết nó để đem đến cho học sinh những kiến thức cơ bản
nhưng đầy đủ và cần thiết nhất về kiểu tệp văn bản trong Pascal.
Tôi rất mong được sự góp ý, hỗ trợ của bạn bè đồng nghiệp để đề tài này được
hoàn thiện hơn.
3.2 Kiến nghị
Qua quá trình thực tiễn giảng dạy tôi xin kiến nghị cần bổ sung thêm nhiều bài tập
thực hành về kiểu tệp văn bản trong sách giáo khoa, cần trình bày rõ ràng, cụ thể
hơn về thao tác đọc, ghi dữ liệu vào tệp. Thời lượng phân phối chương trình nên
tăng thêm cho “chương V. Tệp và thao tác với tệp” để tạo điều kiện cho các em
tiếp thu kiến thức tốt hơn. Sáng kiến kinh nghiệm này bám theo chuẩn kiến thức
mà chương trình đã quy định nên chưa giải quyết được những bài tập nâng cao.
Tuy nhiên, với những gì đã đề cập trên đây tôi hi vọng nó sẽ là tài liệu hữu ích cho
các em học sinh và đồng nghiệp.
XÁC NHẬN CỦA THỦ

Thanh Hóa, ngày 25 tháng 5 năm 2020


TRƯỞNG ĐƠN VỊ

Trần Thị Huệ


TÀI LIỆU THAM KHẢO

Tôi xin cam đoan SKKN do mình viết, không sao
chép nội dung của người khác
Người viết SKKN

Hoàng Thị Xinh


1. Sách giáo khoa tin học 11 - NXB giáo dục
2. Sách giáo viên tin học 11 - NXB giáo dục
3. Học nhanh Pascal bằng ví dụ trong 15 giờ - Cao Bá Thành
4. Lập trình Pascal - Bùi Việt Hà
5. Phương pháp giải các bài toán trong tin học - Thạc sĩ Trần Đức Huyên
6. Một số sáng kiến kinh nghiệm và ý kiến đóng góp của đồng nghiệp
7. Có tham khảo một số bài tập trên mạng Internet.





×