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

SKKN giới thiệu một số bài tập khi học kiểu tệp

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 (96.18 KB, 14 trang )

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc

TÊN ĐỀ TÀI
GIỚI THIỆU MỘT SỐ BÀI TẬP KHI HỌC KIỂU TỆP

Họ và tên:

Từ Thị Thanh Hòa

Chức vụ:

Giáo viên

Đơn vị công tác:

Trường THPT H.H.Thám

Quảng Bình, tháng 1 năm 2019


CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc

TÊN ĐỀ TÀI
GIỚI THIỆU MỘT SỐ BÀI TẬP KHI HỌC KIỂU TỆP

Quảng Bình, tháng 1 năm 2019
2



1. PHẦN MỞ ĐẦU
1.1. LÝ DO CHỌN ĐỀ TÀI
Môn Tin học lớp 11 là một chương trình khó đối với đại đa số học sinh. Ở
những lớp học sinh thiên về học tự nhiên thì có lẽ là có đỡ phần nào, còn những
lớp học sinh thiên về học các môn xã hội thì mặc dù rất cố gắng, bản thân tôi
trước khi lên lớp đã cố gắng tìm tòi các ví dụ liên quan đến bài giảng, ví dụ thấy
dễ hiểu và tìm tòi cách nào khiến học sinh hiểu bài nhất. Tuy nhiên, việc để học
sinh nắm bắt được bài học là cả một vấn đề.
Từ khi bắt đầu học vào phần kiểu dữ liệu có cấu trúc, học sinh hầu như bắt
đầu gặp khó khăn. Kiểu dữ liệu mảng ban đầu còn khiến học sinh bỡ ngỡ thì khi
chuyển sang kiểu dữ liệu xâu học sinh cũng làm quen dần, nhưng rồi chuyển
sang tiếp kiểu dữ liệu tệp thì hầu như rất nhiều học sinh không còn theo kịp bài
giảng, đặc biệt là khi các bài tập của kiểu tệp kết hợp với các kiểu dữ liệu khác.
Điều này có nhiều nguyên nhân: từ khách quan và bản thân giáo viên và cả chủ
quan là chính bản thân học sinh.
Giáo viên đã rất băn khoăn với nhiều năm giảng dạy tin học 11, khi học đến kiểu
dữ liệu tệp học sinh đã khó mà nắm bắt được kiến thức. Đặc biệt là khi đây là
một kiểu dữ liệu khó nhưng lại được ứng dụng nhiều trong quá trình lập trình.
1.2. ĐIỂM MỚI CỦA ĐỀ TÀI
Với cách tiếp cận kiến thức phần kiểu dữ liệu tệp ở sách giáo khoa tin học
11 và đặc biệt sách giáo khoa chỉ đưa ra 2 ví dụ hay bài tập cho học sinh thì chắc
rằng học sinh khó tiếp thu được kiến thức phần này. Và những học sinh khá, giỏi
sẽ không nắm bắt được cái khó, cái hay trong kiểu dữ liệu tệp. Ngoài những kiến
thức liên quan đến phần kiến thức học sinh học thì tôi còn đưa thêm một số bài
tập kiểu tệp liên kết với kiểu bản ghi mà học sinh không được học ở chương
trình tin học 11. Với mục đích trên, giáo viên đã tìm hiểu và sưu tầm được các
bài toán về kiểu dữ liệu tệp từ dễ đến khó nhằm giúp các đối tượng học sinh có
thể tiếp cận dễ dàng hơn với kiểu dữ liệu tệp, trong đó có những bài được biên
tập để dạy cho học sinh giỏi.
- Đề tài là làm cho học sinh nhận thức rõ ràng, đầy đủ hơn về việc lĩnh hội kiến

thức kiểu dữ liệu tệp qua các bài tập.
- Ngoài những kiến thức liên quan đến phần kiến thức học sinh học thì đề tài còn
đưa thêm một số bài tập kiểu tệp liên kết với kiểu bản ghi mà học sinh không
được học ở chương trình tin học 11.
- Đề tài đã đưa ra được các bài toán về kiểu dữ liệu tệp từ dễ đến khó nhằm giúp
các đối tượng học sinh có thể tiếp cận dễ dàng hơn với kiểu dữ liệu tệp, trong đó
có những bài được biên tập để dạy cho học sinh giỏi. Điều này phù hợp hơn với
các đối tượng học sinh (đặc biệt là ở trường THPT Hoàng Hoa Thám), giúp học
sinh không cảm thấy quá ‘ngợp’ khi tiếp cận các bài tập trong phần kiểu tệp.
- Tùy vào đối tượng học sinh, giáo viên có thể vận dụng cách dạy theo hướng
phát triển năng lực học sinh nhằm giúp học sinh tự tìm tòi ra phương pháp giải
các bài tập và sau đó giáo viên giúp học sinh tổng hợp lại kiến thức.
1


2. PHẦN NỘI DUNG
2.1. THỰC TRẠNG VẤN ĐỀ
*Về kiểu dữ liệu tệp:
Cách tổ chức tệp và nội dung các thao tác vào/ra tệp trong các ngôn ngữ lập trình
là khác nhau. Tìm hiểu sâu sắc về vấn đề này không thuộc phạm vi của tin học
phổ thông. Với mục tiêu đặt ra ở trên, chỉ cần đặt ra trong phạm vi ngôn ngữ lập
trình Pascal là đủ, bao gồm:
- Vai trò của kiểu tệp: Dữ liệu của kiểu tệp bao gồm nhiều điểm khác biệt so
với các kiểu dữ liệu đã học ở các chương trước. Dữ liệu kiểu tệp được lưu
dữ lâu dài ở bộ nhớ ngoài. Đặc điểm này mở ra khả năng rộng lớn cho
việc lưu trữ thông tin (chỉ tuỳ thuộc vào dung lượng của đĩa).
- Phân loại tệp: Sách giáo khoa giới thiệu hai kiểu phân loại tệp, theo cách
tổ chức dữ liệu của tệp trên bộ nhớ ngoài và theo cách thức truy cập tệp.
*Phần dữ liệu kiểu tệp ở sách giáo khoa tin học 11 như sau:
a. Khái niệm:

Tệp là kiểu dữ liệu có cấu trúc. Kiểu dữ liệu này có ưu điểm so với các kiểu dữ
liệu khác là:
+ Không mất thông tin khi tắt máy.
+ Dung lượng dữ liệu được lưu trữ lớn.
+ Có hai loại kiểu tệp: tệp có cấu trúc và tệp văn bản.
b. Khai báo:
- Cấu trúc chung của khai báo biến tệp:
Var <tên biến tệp>: Text ;
- Các thao tác xử lý tệp như: gán tên tệp, tạo tệp mới để ghi, mở tệp để đọc, đóng
tệp.
+ Assign(<tên biến tệp>, <tên tệp>);
+ Rewrite(<tên biến tệp>);
+ Reset(<tên biến tệp>);
+ Read/Readln(<tên biến tệp>,<ds tên biến>);
+ Write/writeln(<tên biến tệp>,<ds kết quả>);
+ Close(<tên biến tệp>);
- Các hàm sử dụng để đọc/ghi tệp văn bản:
+Hàm eof(biến tệp) và eoln(biến tệp)
Với phần kiến thức kiểu tệp, sách giáo khoa chỉ đưa ra ví dụ và là bài tập
cho phần kiến thức này (ở bài 16 – Ví dụ làm việc với tệp). Điều này chắc chắn
làm học sinh khó tiếp thu được kiểu dữ liệu tệp. Và những học sinh khá, giỏi sẽ
không nắm bắt được cái khó, cái hay trong kiểu dữ liệu tệp.
2.2. BIỆN PHÁP GIẢI QUYẾT
Ngoài 2 bài được nêu ở bài 16 – SGK, để làm cho học sinh thấy được một số
dạng bài toán quan trọng đối với kiểu dữ liệu tệp. Sau đây ta xét các bài tập sau:
2.2.1. BÀI TẬP FILE VỚI KIỂU DỮ LIỆU ĐƠN GIẢN
BÀI TẬP 1. Viết chương trình ghi vào đĩa 100 số tự nhiên (Từ 1 đến 100).
2



PROGRAM GhiFile;
VAR
f : text;
I : Integer;
BEGIN
Writeln(‘ CHUONG TRINH GHI TAP TIN VAO DIA:’);
Assign(f, ‘Snguyen.DAT’);
Rewrite(f);
FOR i:=1 TO 100 DO
Write(f, i);
Close(f);
Readln;
END.
BÀI TẬP 2. Viết chương trình đọc 100 số tự nhiên (ở bt1) từ đĩa vào bộ nhớ.
PROGRAM DocFile;
VAR
f1 : text;
I : Integer;
Sophantu: Integer;
Tenfile: String[11];
BEGIN
Writeln(‘Cho biet ten tap tin:’);
Readln(Tenfile);
Assign(f1, Tenfile);
Reset(f1);
Sophantu := 0;
WHILE not EOF(f1) DO
BEGIN
Read(f1, i); {Đọc 1 phần tử vào biến 1}
Writeln( i); {Xuất ra màn hình}

Sophantu := Sophantu +1;
END;
Close(f1);
{Thông báo ra màn hình}
Write (‘ So phan tu cua tap tin:’ , Tenfile , ‘la’);
Writeln(Sophantu);
Readln;
END.
BÀI TẬP 3. Viết chương trình nhập 1 xâu từ bàn phím. Ghi xâu đó vào tệp
XAU.TXT
PROGRAM Ghixau;
VAR
f1 : text;
3


s : String;
Tenfile: String[11];
BEGIN
Writeln(‘Nhap xau tu ban phim:’);
Readln(s);
Writeln(‘Cho biet ten tap tin:’);
Readln(Tenfile);
Assign(f1, Tenfile);
Rewrite(f1);
Write(f1,s)
Close(f1);
END.
BÀI TẬP 4. Viết chương trình đọc xâu từ tệp XAU.INP, chuẩn hóa xâu rồi
ghi ra tệp XAU.OUT.

PROGRAM DocFile;
CONST
fi=’XAU.INP’;
fo=’XAU.OUT’;
VAR
f1,f2 : text;
s : String;
BEGIN
Assign(f1, fi);
Reset(f1);
Assign(f2, fo);
Reset(f2);
Read(f1,s);
{Chuẩn hóa xâu}
While s[1]=’ ’ do Delete (s,1,1);
While s[length(s)]=’ ’ do Delete (s,length(s),1);
While pos(‘ ‘,s)<>0 do Delete (s,pos(‘ ’,s),1);
Write(f2,s);
Close(f1); close(f2);
END.
BÀI TẬP 5: Viết chương trình kiểm tra xem một tập tin (file) nào đó đã
được ghi vào đĩa hay chưa?
PROGRAM PhatHienFile;
VAR
f : file;
Tenfile : String[20];
BEGIN
Write(‘ Hay cho biet ten tap tin:’);
Readln(Tenfile);
Reset(f);

4


IF IOResult=0 THEN
BEGIN
Write(‘ Co tap tin nay tren dia’);
Close(f);
END
ELSE
Writeln(‘ Khong co tap tin nay tren dia’);
Readln;
END.
2.2.2. BÀI TẬP FILE VỚI KIỂU DỮ LIỆU CÓ CẤU TRÚC
BÀI TẬP 6. Viết chương trình nhập điểm các môn học Toán, Lý, Hóa của
từng học sinh vào đĩa.
PROGRAM NhapDiem;
TYPE
Ten = String[20]
HocBa = RECORD
HoTen : Ten;
Toan,Ly,Hoa:Integer;
END;
fileHB = FILE OF HocBa;
VAR
HV : HocBa;
f : fileHB;
q : Boolean;
BEGIN
Assign (f, ‘LOPHOC.DaT’);
Rewrite(f);

Q : = True;
WHILE q Do
WITH HV DO
BEGIN
Write(‘* Ho va ten hoc sinh :’);
Readln(HoTen);
IF HoTen = ‘’ THEN
q : = False
ELSE
BEGIN
Write(‘-Diem Toan =’);
Readln(Toan);
Write(‘-DiemLy =’);
Readln(Ly);
Write(‘-Diem Hoa =’);
5


Readln(Hoa);
Write(f,HV)
END
END;
Close(f)
END.
BÀI TẬP 7. Viết Chương trình nhập dữ liệu và ghi vào dĩa các thành phần
HO,TEN,TUOI,CHUC VU,BAC LUONG. Khi nào không muốn nhập nữa
thì bấm phím Esc.
PRORAM NhapDuLieu;
USES CTR;
TYPE

BanGhi = RECORD;
Holot : String[20];
Ten : String[8];
Tuoi: 18..60;
Chucvu: string[15]
Bacluong: 200..500;
END;
VAR
f: FILE OF BanGhi;
NV: BanGhi;
Ans: Char;
BEGIN
ClrScr;
assign( f, LUONG.DTA’);
Rewrite(f);
REPEAT
WITH NV DO
BEGIN
Write(‘* Ho dem =’);
Readln (Holot);
Write(‘* Ten =’);
Readln( Ten);
Write(‘* Tuoi =’); {$R+}
Readln( Tuoi);
Write( Chuc vu =’);
Readln( Chucvu);
Write(‘* Bac luong =’);
Readln(Bacluong);
Write(f, NV)
END.

6


BÀI TẬP 8. Khi trên đĩa đã có file LUONG.DTA. Hãy viết chương trình để
bổ sung thêm dữ liệu.
PROGRAM BosungDulieu;
USES CR
TYPE
Bangghi = RECORD
Holot: String[20];
Ten: String[8];
Tuoi: 18..60;
Chucvu: String[15];
Bacluong: 200..500;
END;
VAR
f: FILE OF Banghi;
NV: Banghi;
ans: Char;
BEGIN
ClrScr;
Assign (f, ‘LUONG.DTA’);
Reset (f);
Seek( f, filesize (f)); { Dinh vi o cuoi }
REPEAT
WITH NV DO
BEGIN
Write(‘* HO dem =’);
Readln(Holot);
Write(‘* Ten =’)

Readln( Ten);
Write(‘* Tuoi =’); {$R+}
Readln( Tuoi);
Write(‘* Chuc vu =’);
Readln( Chucvu);
Write (‘* Bac luong =’);
Readln ( Bacluong);
Write(f, NV)
END.
2.2.3. BÀI TẬP FILE VỚI CÁC THUỘC TÍNH TRONG THƯ VIỆN DOS
BÀI TẬP 10. Sử dụng thủ tục SetFAttr trong Unit DOS, viết chương trình
lập thộc tính chỉ đọc (Reds Only) và lưu trữ (Archive) cho file
AUTOEXEC.BAT.
PROGRAM

Datthuoctinh;
7


USES DOS;
VAR
f: file;
BEGIN
Assign (f,’AUTOEXEC.BAT’);
SetFAttr(f, Read only); {Dat thuoc tinh chi dọc}
Readln;
SetFAttr(f, archive) {dat thuoc tinh luu tru}
END.
BÀI TẬP 11. Viết thủ tục ghi mảng hai chiều lên đĩa với khai báo:
CONST

MatrixSize = 3;
TYPE MatrixTYPE = ARRAY [1 . . MatrixSize,1 .. MatrixSize] OF Real;
PROCEDURE CatMang(VAR A: MatrixType);
USES Crt;
VAR
F: FILE OF Real;
i : Integer;
BEGIN
TextColor(yellow);
TextBackGround(Red);
CrtScr;
GotoXY(10,10);
Write(‘Chotenfile…’);
Readln(tenfile);
Assign(f,tenfile);
ReWrite(f);
FOR i: =1 TO MatrixSize DO
FOR j: =1 TO MatrixSize DO
Write (f,A[i,j]);
Close(f);
Writeln(‘Da ghi xong’);
Readln;
END.
BÀI TẬP 12. Viết thủ tục đọc dữ liệu từ tập tin vào mảng hai chiều.
PROCEDURE DocVaoMang(VAR A: MatrixType);
USES Crt;
VAR
F: FILE OF Real;
Tenfile: String[11] ;
I,j : Integer;

BEGIN
CrtScr;
TextColor(White);
8


TextBackGround(LinghtBlue);
GotoXY(10,10);
Write(‘Chotenfile…’)
Readln(tenfile);
Assign(f,fenfile);
Reset(f);
FOR i: =1 TO MatrixSize DO
FOR i: =1 TO MatrixSize DO
Read(f,A[i,j]);
Writeln(‘Da Nap Xong’);
Readln;
Close(f)
END.
2.3. KHẢ NĂNG ÁP DỤNG
Bằng thực nghiệm của bản thân, tôi nhận thấy đây là một sáng kiến kinh
nghiệm đem lại hiệu quả cao trong dạy học tin học 11 ở trường THPT Hoàng
Hoa Thám. Đề tài đã áp dụng trên 3 lớp học và thấy rõ hiệu quả khi áp dụng các
bài tập này trước hay đan xen với Bài 16 được giới thiệu trong SGK Tin học 11.
Hơn nữa, có thể dễ dàng sử dụng trong điều kiện hiện nay của các nhà trường. Vì
vậy, có thể áp dụng rộng rãi cho toàn bộ các lớp khối 11. Một số bài tập mở rộng,
nâng cao có thể sử dụng để dạy bồi dưỡng học sinh giỏi khối 11, 12. Tuy nhiên
tùy thuộc vào từng đối tượng học sinh mà giáo viên lựa chọn sử dụng các bài tập
hợp lí thì hiệu quả sẽ cao hơn.
2.4. KẾT QUẢ ĐẠT ĐƯỢC

Giới thiệu các bài tập từ dễ đến khó, trước hay đan xen với bài 16 – SGK
Tin học 11 mang lại sự hứng thú cho học sinh, giúp cho học sinh cảm thấy dễ
dàng hơn khi học Tin học lớp 11 nói chung và kiểu dữ liệu tệp nói riêng, làm cho
học sinh yêu thích môn học hơn.
Với kết quả thực nghiệm khi giảng dạy có sử dụng các bài tập kiểu tệp như sau:
Điểm trên 8 tăng 8,1% lên 9,3%; điểm 6,5-8 tăng từ 40,5% lên 43,4% ; 5- 6,5
điểm giảm từ 41,4% còn 40,3%; điểm dưới 5 giảm 10% còn 7%.
TT
1
2
3

Lớp
11B
11C
11F
TB

Giỏi
12%
7%
9%
9,3%

Khá
55%
35%
40%
43,4%


TB
30%
48%
43%
40,3%

Yếu
3%
10%
8%
7%

9


3. KẾT LUẬN
Trên cơ sở những kinh nghiệm thu nhận được trong quá trình giảng dạy tin
học 11 ở trường THPT Hoàng Hoa Thám, chúng tôi cố gắng sao cho học sinh 11
thấy không quá bỡ ngỡ khi học môn tin học nói chung và phần kiến thức về kiểu
dữ liệu tệp nói chung. Tạo điều kiện cho các em thấy môn tin học 11 có những
điểm gần gũi với thực tế.
Đề tài tuy được làm công phu, cẩn thận và nhiều tâm huyết của người làm
tuy nhiên với số năm kinh nghiệm giảng dạy tin học 11 không phải là nhiều, với
đặc thù môn tin học là một môn học khá mới ở trường phổ thông, và kiến thức
phần kiểu dữ liệu tệp rất rộng (đặc biệt khi kết hợp với các kiểu dữ liệu khác)
chắc chắn không tránh khỏi nhiều sai sót. Kính mong được sự quan tâm, giúp đỡ,
đóng góp ý kiến để bài viết của chúng tôi hoàn thiện hơn. Chúng tôi sẽ xem đó
như là một hướng mới để phát triển đề tài của mình.
Chúng tôi xin chân thành cảm ơn.


10


MỤC LỤC

11


TÀI LIỆU THAM KHẢO

1. Ngôn ngữ lập trình Pascal – Quách Tuấn Ngọc
2. Tin học đại cương – Nguyễn Mậu Hân
3. Tin học đại cương – Võ Văn Tiến Dũng – Nguyễn Gia Định
4. Cấu trúc dữ liệu và giải thuật – Lê Minh Hoàng
/> /> />
12



×