Tải bản đầy đủ (.pdf) (17 trang)

(Sáng kiến kinh nghiệm) giúp học sinh tìm hiểu thêm về cách sử dụng kiểu dữ liệu tệp trong ngôn ngữ lập trình pascal chương trình 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 (172.28 KB, 17 trang )

MỤC LỤC
I. MỞ ĐẦU……………………………………………………………………...1
1.1. Lý do chọn đề tài…………………………………………………………...1
2.2. Mục đích nghiên cứu…………………………………………………….....1
2.3. Dối tượng nghiên cứu………………………………………………………1
2.4. Phương pháp nghiên cứu…………………………………………………...1
II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM………………………………....1
2.1. Cơ sở lý luận………………………………………………………………..1
2.2. Thực trạng…………………………………………………………………..2
2.3. Các sáng kiến kinh nghiệm…………………………………………………2
2.4. Hiệu quả của sáng kiến kinh nghiệm……………………………………...14
III. KẾT LUẬN, KIẾN NGHỊ…………………………………………………14
3.1. Kết luận…………………………………………………………………...14
3.2. Kiến nghị………………………………………………………………….15

1


I. MỞ ĐẦU
1.1. Lý do chọn đề tài
Tệp là một kiểu đọc ghi dữ liệu liệu của ngôn ngữ lập trình Pascal, nó trái
ngược nhiều so với cách nhập/xuất dữ liệu truyền thống, tức là chúng ta sẽ nhập
dữ liệu vào một file và Pascal sẽ đọc xử lí rồi ghi kết quả ra một tệp khác - cách
này giúp bạn xem được input và output khi chương trình kết thúc. Kiểu tệp thì
cũng khơng khó lắm, nhưng cịn rất nhiều học sinh lúng túng khi gặp kiểu tệp và
trong sách giáo khoa thì cũng chưa nói cho rõ ràng, chi tiết. Chính vì vậy, tơi
chọn đề tài “Giúp học sinh tìm hiểu thêm về cách sử dụng kiểu dữ liệu tệp
trong ngơn ngữ lập trình Pascal - chương trình tin học 11”.
1.2. Mục đích nghiên cứu
Tơi chọn nghiên cứu đề tài này nhằm mục đích hướng dẫn một cách chi tiết giúp
học sinh hiểu hơn về tệp, xử lý nhanh và hiệu quả kiểu dữ liệu tệp,và bổ trợ


thêm kiến thức về tệp cho đối tượng học sinh giỏi.
1.3. Đối tượng nghiên cứu
Trong đề tài này đối tượng nghiên cứu của tôi chủ yếu là hướng dẫn cho
các học sinh ôn luyên đội tuyển học sinh giỏi về kiểu dữ liệu tệp.
1.4. Phương pháp nghiên cứu
Trong đề tài tôi đã sử dụng phương pháp nghiên cứu xây dựng cơ sử lý
thuyết và thực hành trên máy tính để giúp học sinh hiểu về bản chất của kiểu dữ
liệu tệp.
II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM
2.1. Cơ sở lý luận
Căn cứ vào nội dung chương trình sách giáo khoa và điều kiện thực tế
trong quá trình giảng dạy, đặc biệt là giảng dạy cho các em đội tuyển học sinh
giỏi. Tôi thấy rằng những kiến thức trong sách giáo khoa là những kiến cơ bản,
đơn giản chưa đủ để đáp ứng cho các em học sinh ôn luyện học sinh giỏi. Chính
vì vậy tơi mạnh dạn đưa thêm một số nội dung về tệp để bổ trợ thêm kiến thức
cho học sinh về tệp.
2


2.2. Thực trạng
Tệp là một kiểu dữ liệu đơn giản, học sinh có thể dễ dàng tiếp thu kiến
thức về kiểu dữ liệu tệp, nhưng cũng còn rất nhiều học sinh lúng túng khi gặp
kiểu tệp và trong sách giáo khoa thì cũng chưa nói cho rõ ràng, chi tiết. Đặc biệt
là đối với các học sinh ôn luyện học sinh giỏi thì kiến thức được trình bày trong
sách giáo khoa là chưa đủ. Do vậy, đề tài này thật sự rất cần thiết đối với các em
vì nó có thể giúp các em hiểu, xử lý nhanh và hiệu quả kiểu dữ liệu này.
2.3. Các sáng kiến kinh nghiệm
A. HƯỚNG DẪN CỤ THỂ CHO HỌC SINH CÁCH SỬ DỤNG KIỂU DỮ
LIỆU TỆP
(Vì một số khái niệm và thao tác cơ bản đã có trong sách giáo khoa nên tơi

khơng trình bày trong phần nội dung của đề tài).
1. Nguyên lí hoạt động
Khi sử dụng kiểu tệp thì cần có hai tệp, một tệp để nhập dữ liệu vào
(input), sau khi nhập thì save lại. Cịn tệp kia là để Pascal ghi kết quả ra (output).
Bạn có thể xem được input và output bất kì lúc nào, bạn thể xem trong Pascal
hoặc cũng có thể xem bằng cách mở tệp đó ra với Notepad. 
2. Tạo tệp
Chúng ta cần tạo ra hai tệp cho mỗi bài tốn và có thể tạo trực tiếp trong
Pascal theo các bước bên dưới:
1. Khởi động Turbo Pascal
2. Mở một cửa sổ mới 
3. Save As
4. Nhập tên và đuôi của tệp (vd: Input.txt, Output.txt, Songuyento.inp,
Songuyento.out ...)
5. Ok
Như vậy là chúng ta đã tạo được một tệp, hãy tiếp tục tạo thêm một tệp
nữa. Có một lưu ý với cách tạo tệp này là tệp sẽ được lưu ở thư mục BIN của

3


Turbo Pascal, khi khai báo đường dẫn của tệp trong chương trình thì bạn cũng
chỉ việc viết tên tệp (có cả phần đuôi) ra thôi.
Nếu muốn tạo tệp và cất dữ ở một thư mục khác thuộc ổ đĩa khác, thư
mục baitappas thuộc ổ D chẳng hạn. Thì bạn hãy mở Notepad ra, tạo một file,
Save as nhưng nhớ chọn vị trí lưu tệp là D:\baitappas\. Cịn về phần tên thì như
trên.
3. Tạo hằng chứa đường dẫn của tệp
Chúng ta nên có hai hằng để lưu vị trí của tệp, ví dụ:
const fi ='input.dat';

         fo='output.dat';
Lí do là để khi khai báo ở chương trình thì sẽ ngắn gọn hơn, ví dụ:
assign(f,fi); tương dương với assign(f,'input.dat');
assign(f,fo); tương đương với assign(f,'output.dat');
Trên là tệp ở trong thư mục Bin nên chỉ cần viết tên, còn nếu ở ổ đĩa khác, ví dụ
như ở ổ D thì cách này sẽ hiệu quả hơn
const fi ='D:\baitappas\kieutep\input.dat';
         fo='D:\baitappas\kieutep\output.dat';
Khi viết ở chương trình chính sẽ là:
assign(f,fi); tương dương với assign(f,'D:\baitappas\kieutep\input.dat');
assign(f,fo); tương đương với assign(f,'D:\baitappas\kieutep\output.dat');
4. Đọc dữ liệu
Đây là phần mấu chốt của kiểu tệp, nếu khơng hiểu rõ cách đọc thì sẽ không làm
được với kiểu dữ liệu tệp:
1. Để đọc được trên một dịng thì các bạn hãy dùng read(tên biến tệp,danh sách
tên biến);
2. Để đọc được trên nhiều dòng thì hãy kết hợp read và readln: các bạn sử dụng
read để đọc trên một dòng, sau khi đọc xong một dịng thì sử dụng readln để đọc
dịng tiếp theo, bên dưới là ví dụ về việc đọc mảng hai chiều:

4


14257
14566
95373
26794
26892
Chúng ta thấy rằng, mảng hai chiều thì gồm nhiều hàng nên chúng ta phải sử
dụng read để đọc trên một hàng rồi lại sử dụng readln để xuống hàng. Trong bài

trên cũng khơng cho biết có bao nhiêu hàng và bao nhiêu cột nên ta phải sử
dụng hàm eof(tên biến tệp) - cho giá trị true khi đọc tới cuối file và eoln(tên biến
tệp)
cho giá trị true nếu đọc tới cuối dòng hiện tại.
while not eof(f) do {điều kiện chưa kết thúc file}
begin
inc(i); {tăng chỉ số dòng}
j:=0; {đưa chỉ số cột về 0}
while not eoln(f) do {điều kiện chưa kết thúc dòng}
begin
inc(j); {Tăng chỉ số cột}
read(f,a[i,j]); {đọc phần tử a[i,j]}
end;
readln(f); {xuống hàng tiếp theo}
end;
Thêm một ví dụ khác nữa, lần này sẽ cho số hàng và số cột:
55
14257
14566
95373
26794
5


26892
Bây giờ bạn phải đọc hai chỉ số hàng và cột đầu tiên sau đó chúng ta dùng vịng
lặp for - do để đọc:
readln(f,m,n); {đọc chỉ số hàng và cột}
for i:= 1 to m do {đọc theo từng dòng}
begin

for j:= 1 to n do read(f,a[i,j]); {đọc từng phần tử của dòng}
readln(f); {xuống dòng mới}
end;
Khi đọc chỉ số hàng và cột ta sử dụng readln vì đọc xong hai chỉ số đó ta cịn
phải xuống dịng tiếp theo để bắt đầu đọc mảng.
5. Ghi dữ liệu
Ghi dữ liệu thì cũng giống như đọc dữ liệu:
1. Nếu chỉ cần ghi trên một dịng thì bạn dùng write(tên biến tệp, danh sách
biến);
2. Nếu cần ghi dữ liệu trên nhiều dịng thì cần dùng write để viết trên một dòng
rồi sử dụng writeln để xuống dịng tiếp theo, dưới là ví dụ về ghi mảng hai
chiều:
for i:= 1 to n do
begin
for j:= 1 to m do write(f,a[i,j],' '); {viết các phần tử trên một hàng}
writeln(f); {xuống một hàng mới}
end;
B. MỘT SỐ KIẾN THỨC MỞ RỘNG CHO ĐỐI TƯỢNG HỌC SINH GIỎI
Phần này tôi xin được giới thiệu một số kiến thức về tệp định kiểu
1. Khai báo
6


Kiểu dữ liệu tệp định kiểu được định nghĩa như sau:
type
file-name = file of base-type;
Trong đó, base-type cho biết kiểu thành phần của tệp, nó có thể là kiểu số
nguyên, số thực, Boolean, kiểu liệt kê, kiểu bản ghi, kiểu mảng và kiểu tập hợp
ngoại trừ loại tệp khác. Các biến của kiểu tệp được tạo bằng cách sử dụng khai
báo var

Var f1, f2,...: file-name;
Dưới đây là một số ví dụ về định nghĩa một số kiểu tệp và biến tệp trong Pascal:
type
rfile = file of real;
ifile = file of integer;
bfile = file of boolean;
datafile = file of record;
arrfile = file of array[1..4] of integer;
var
marks: arrfile;
studendata: datafile;
rainfalldata: rfile;
tempdata: integer;
choices: bfile;
2. Cách tạo và ghi tệp
Ví dụ dưới đây viết một chương trình có thể tạo tệp dữ liệu cho kiểu bản
ghi student. Nó sẽ tạo 1 tệp có tên là students.dat và ghi dữ liệu của student vào
đó:
program DataFiles;
type
StudentRecord = Record
7


s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;

f: file of StudentRecord;
begin
Assign(f,'students.dat');
Rewrite(f);
Student.s_name := 'Nguyen van an';
Student.s_addr := 'Viet nam';
Student.s_batchcode := 'Computer science';
write(f,student);
close(f);
end.
Khi đoạn mã trên được biên dịch và thực thi, chương trình sẽ tạo 1 tệp có
tên students.dat vào trong thư mục đang hoạt động. Bạn có thể mở tệp này trên
các trình soạn thảo văn bản như Notepad.
3. Đọc tệp
Trong ví dụ trên bạn vừa tạo và ghi vào tệp có tên students.dat. Bước
tiếp theo bây giờ là viết một chương trình có thể đọc dữ liệu của student từ tệp:
program Datafiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
8


end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin

Assign(f,'students.dat');
reset(f);
while not eof(f) do
begin
read(f,Student);
writeln('Name: ',Student.s_name);
writeln('Address: ',Student.s_addr);
writeln('Batch Code: ',Student.s_batchcode);
end;
close(f);
readln
end.
Khi đoạn mã trên được biên dịch và thực thi, nó sẽ trả về kết quả dưới đây:
Name: Nguyen van an
Address: Viet nam
Batch Code: Computer science
4. Tệp dưới dạng thơng số các chương trình con
Pascal cho phép các biến tệp được sử dụng như các tham số trong các
chương trình con chuẩn và chương trình con do người dùng định nghĩa. Ví dụ
dưới đây sẽ minh họa rõ hơn về khái niệm này.

9


Trong ví dụ dưới đây chương trình tạo một tệp có tên là rainfall.txt và tệp
này lưu trữ dữ liệu về lượng mưa. Tiếp theo mở tệp, đọc dữ liệu và tính lượng
mưa trung bình.
Lưu ý nếu sử dụng tham số của tệp với các chương trình con, nó phải
được khai báo như một tham số var.
Program addFiledata;

const max = 4;
type
raindata = file of real;
var
rainfile: raindata;
filename: string;
procedure writedata(var f: raindata);
var
data: real;
i: integer;
begin
rewrite(f, sizeof(data));
for i:=1 to max do
begin
writeln('Enter rainfall data: ');
readln(data);
write(f,data);
end;
close(f);
end;
procedure Average(var x:raindata);
var
10


d, sum: real;
avg:real;
begin
reset(x);
sum := 0.0;

while not eof(x) do
begin
read(x,d);
sum := sum+d;
end;
avg := sum/max;
close(x);
writeln('Average Rainfall: ',avg:7:2);
end;
Begin
writeln('Enter the file name: ');
readln(filename);
assign(rainfile,filename);
writedata(rainfile);
Average(rainfile);
End.
Khi đoạn mã trên được biên dịch và thực thi, nó sẽ trả về kết quả dưới đây:
Enter the file name:
rainfall.txt
Enter the file name:
34
11


Enter the file name:
45
Enter the file name:
56
Enter the file name:
78

Average Rainfall: 53.25
5. Tệp Text trong Pascal
Tệp Text trong Pascal chứa các dòng của ký tự mà mỗi dòng được kết
thúc bằng dấu chấm. Cấu trúc khai báo và định nghĩa tệp có dạng:
type
file-name = text;
Tệp ký tự thơng thường và tệp text khác nhau ở chỗ tệp text được chia
thành các dòng, mỗi dòng kết thúc bằng dấu chấm, được hệ thống tự động chèn.
Ví dụ dưới đây tạo và ghi vào tệp text có tên contact.txt:
program exText;
var
filename: string;
myfile: text;
begin
writeln('Enter the file name: ');
readln(filename);
assign(myfile,filename);
rewrite(myfile);
writeln(myfile,'Thong tin ve sinh vien:');
writeln(myfile,'Name: Nguyen van an');
writeln(myfile,'Quoc tich: Viet nam');
12


writeln('completed');
close(myfile);
end.
Khi đoạn mã trên được biên dịch và thực thi, nó sẽ trả về kết quả dưới đây:
Enter the file name:
contact.txt

completed
6. Nối tệp trong Pascal
Nối tệp trong Pascal tức là ghi thêm một số dữ liệu vào tệp hiện có mà
khơng ghi đè lên tệp. Dưới đây là ví dụ chương trình có nối tệp:
Program Appendfile;
var
myfile: text;
info: string;
begin
assign(myfile, 'contact.txt');
append(myfile);
writeln('Ten khoa: TIN HOC');
writeln('Nganh: khoa hoc may tinh');
close(myfile);
assign(myfile,'contact.txt');
reset(myfile);
while not eof(myfile) do
begin
13


readln(myfile,info);
writeln(info);
end;
close(myfile);
end.
Khi đoạn mã trên được biên dịch và thực thi, nó sẽ trả về kết quả dưới đây:
Ten khoa: TIN HOC
Nganh: khoa hoc may tinh
Thong tin ve sinh vien:

Name: Nguyen van an
Quoc tich: Viet nam
7. Các hàm và thủ tục cơ bản với tệp trong Pascal
Free Pascal hỗ trợ các hàm, thủ tục các thao tác cơ bản với tệp trong Pascal:
Stt
1
2
3
4
5
6
7
8
9

Danh sách các hàm và thủ tục cơ bản với tệp trong Pascal
Tên hàm/thủ tục
Mô tả
Thủ tục Append (biến tệp);
Mở tệp ở chế độ nối tệp
Thủ tục Assign(biến tệp,tên
Gắn tên tệp cho biến tệp
tệp);
Thủ tục Read(biến tệp, danh
Đọc dữ liệu từ tệp
sách biến vào);
Thủ tục Readln(biến tệp,
Đọc dữ liệu từ tệp và chuyển qua dòng
danh sách biến vào);
Thủ tục Write(biến tệp, danh

sách kết quả);
Thủ tục Writeln(biến tệp,
danh sách kết quả);
Hàm EOF(biến tệp);
Hàm EOLn(biến tệp);
Thủ tục Erase(biến tệp);

tiếp theo
Ghi dữ liệu ra tệp
Ghi dữ liệu ra tệp và nối dòng mới
Kiểm tra cuối tệp
Kiểm tra cuối dịng
Xóa tệp từ ổ đĩa
14


10
11
12

Hàm FilePos(biến tệp);
Hàm Filesize(biến tệp);
Thủ tục Flush(biến tệp);

13

Hàm IOResult: word;

14
15

16
17
18
19
20

Thủ tục Rename(biến tệp);
Thủ tục Reset(biến tệp);
Thủ tục Rewrite(biến tệp);
Thủ tục Seek(biến tệp,i);
Hàm SeekEOF(biến tệp);
Hàm SeekEOLn(biến tệp);
Thủ tục Close(biến tệp);

Cho biết vị trí hiện thời của con trỏ tệp
Cho biết số phần tử có trong tệp
Ghi tệp vào bộ đệm ổ đĩa
Trả về mã lỗi khi thực hiện các thao tác
vào ra, IOResult <>0, đã xảy ra lỗi
Đổi tên tệp
Mở tệp để đọc
Mở tệp để ghi
Định vị con trỏ tại vị trí I của tệp
Đặt vị trí con trỏ ở cuối tệp
Đặt vị trí con trỏ ở cuối dịng
Đóng tệp

2.4. Hiệu quả của sáng kiến kinh nghiệm
Sáng kiến kinh nghiệm này là kết quả của cả một quá trình giảng dạy và
học tập của chính bản thân tơi và các em học sinh. Tơi nhận thấy nó rất thiết

thực với cơng tác giảng dạy của bản thân và các đồng nghiệp. Từ việc nắm được
các kiến thức đã trình bày trong đề tài, học sinh có thể chủ động làm bài tập về
kiểu dữ liệu tệp hiệu quả hơn.
III. KẾT LUẬN, KIẾN NGHỊ
3.1. Kết luận
Như vậy, tôi thấy rằng một khi giáo viên tập trung đầu tư công sức và
kiến thức vào bài dạy, học sinh sẽ tiếp thu bài một cách tích cực và khơng thụ
động. Các em hứng thú trong học tập hơn. Chính sự đam mê, tích cực của học
sinh là động lực thúc đẩy giáo viên đổi mới tư duy, phương pháp giảng dạy phù
hợp với yêu cầu cầu mới. Mỗi giờ học, mỗi đơn vị kiến thức mà các em đạt kết
quả cao đã thể hiện được phần nào tâm huyết của người dạy.
Từ những kết quả tích cực thu được, đề tài đã và đang được các giáo viên
trong nhóm chun mơn áp dụng để giảng dạy cho học sinh trong nhà trường,
đặc biệt là đối với các em học sinh giỏi.

15


Với đề tài này, không chỉ dừng ở một số kiến thức tôi đã giới thiệu trong
phần nội dung. Các giáo viên, các em học sinh, những người quan tâm đến lĩnh
vực này có thể dùng để tham khảo và mở rơng đề tài hơn nữa.
3.2. Kiến nghị
Tơi có đề xuất thêm một kiến nghị như sau:
- Đề nghị các ban ngành tổ chức thêm các đợt hội thảo trao đổi kinh
nghiệm giảng dạy để các anh em trong ngành thảo luận và trao đổi kinh nghiệm
với nhau.
- Hàng năm sau khi duyệt các đề tài sáng kiến kinh nghiệm nên phổ biến
đến các đơn vị như một tài liệu lưu hành nội bộ để mọi người cùng học tập và
phát triển.
- Đầu tư thêm các trang thiết bị cần thiết phục vụ cho công tác giảng dạy

và học tập của học sinh đối với những trường chưa đáp ứng được điều kiện này.
Trên đây là một số tìm tịi và suy nghĩ của tôi về những kinh nghiệm để
xây dựng đề tài. Trong khi trình bày khơng tránh khỏi nhiều thiếu sót, rất mong
được các đồng chí đồng nghiệp góp ý!
Tơi xin chân thành cảm ơn!
Thanh Hóa, ngày 24 tháng 05 năm 2019
Người viết

Trịnh Thị Thùy

TÀI LIỆU THAM KHẢO
[1] Hồ Sĩ Đàm (chủ biên): Sách giáo khoa Tin học 11 - Nhà xuất bản giáo dục.

16


SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ

TRƯỜNG THPT THIỆU HĨA
[2] Nguyễn Đình Tê (chủ biên): Giáo trình lý thuyết và bài tập Pascal - Nhà xuất
bản giáo dục.
[3] Quách Tuấn Ngọc (chủ biên): Ngơn ngữ lập trình Pascal - Nhà xuất bản
thống kê.

SÁNG KIẾN KINH NGHIỆM

ttp://thuthuat.taimienphi.vn/cac-thao-tac-co-ban-voi-file-trong-pascal34007n.aspx 

TÊN ĐỀ TÀI


GIÚP HỌC SINH TÌM HIỂU THÊM VỀ CÁCH SỬ DỤNG KIỂU
DỮ LIỆU TỆP TRONG NGƠN NGỮ LẬP TRÌNH PASCAL
CHƯƠNG TRÌNH TIN HỌC 11

Người thực hiện: Trịnh Thị Thùy
Chức vụ: Giáo viên
Đơn vị cơng tác: Trường THPT Thiệu Hóa
SKKN thuộc lĩnh vực (mơn): Tin học

THANH HOÁ NĂM 2019

17



×