1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

17 221 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 145,5 KB

Nội dung

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

Trang 1

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

Trang 2

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

Trang 3

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 toá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

Trang 4

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:

Trang 5

1 4 2 5 7

1 4 5 6 6

9 5 3 7 3

2 6 7 9 4

2 6 8 9 2

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:

5 5

1 4 2 5 7

1 4 5 6 6

9 5 3 7 3

2 6 7 9 4

Trang 6

2 6 8 9 2

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

Trang 7

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

Trang 8

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;

Trang 9

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

Trang 10

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

Trang 11

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

Trang 12

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');

Trang 13

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

Trang 14

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:

Danh sách các hàm và thủ tục cơ bản với tệp trong Pascal

1 Thủ tục Append (biến tệp); Mở tệp ở chế độ nối tệp

2 Thủ tục Assign(biến tệp,tên

tệp); Gắn tên tệp cho biến tệp

3 Thủ tục Read(biến tệp, danh

sách biến vào); Đọc dữ liệu từ tệp

4 Thủ tục Readln(biến tệp,

danh sách biến vào);

Đọc dữ liệu từ tệp và chuyển qua dòng tiếp theo

5 Thủ tục Write(biến tệp, danh

sách kết quả); Ghi dữ liệu ra tệp

6 Thủ tục Writeln(biến tệp,

danh sách kết quả); Ghi dữ liệu ra tệp và nối dòng mới

7 Hàm EOF(biến tệp); Kiểm tra cuối tệp

8 Hàm EOLn(biến tệp); Kiểm tra cuối dòng

9 Thủ tục Erase(biến tệp); Xóa tệp từ ổ đĩa

Trang 15

10 Hàm FilePos(biến tệp); Cho biết vị trí hiện thời của con trỏ tệp

11 Hàm Filesize(biến tệp); Cho biết số phần tử có trong tệp

12 Thủ tục Flush(biến tệp); Ghi tệp vào bộ đệm ổ đĩa

13 Hàm IOResult: word; 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

14 Thủ tục Rename(biến tệp); Đổi tên tệp

15 Thủ tục Reset(biến tệp); Mở tệp để đọc

16 Thủ tục Rewrite(biến tệp); Mở tệp để ghi

17 Thủ tục Seek(biến tệp,i); Định vị con trỏ tại vị trí I của tệp

18 Hàm SeekEOF(biến tệp); Đặt vị trí con trỏ ở cuối tệp

19 Hàm SeekEOLn(biến tệp); Đặt vị trí con trỏ ở cuối dòng

20 Thủ tục Close(biến tệp); Đó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 chuyên 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

Ngày đăng: 21/10/2019, 20:27

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w