* biennho: là biến đã được khai báo cùng kiểu với các phần tử của tệp, biến nhớ đóng vai trò vùng nhớ đệm để lưu trữ dữ liệu đọc từ phần tử của tệp ra. * j: là biến kiểu Word, dùng để gh[r]
(1)Sở GD&ĐT Đồng Nai Trường THPT Ngô Quyền
SÁNG KIẾN KINH NGHIỆM
GIÚP DẠY TỐT BÀI “KIỂU DỮ LIỆU TỆP”
GV: PHAN THỊ TÀI TỔ: TOÁN-TIN Năm 2012
(2)I. THÔNG TIN CHUNG VỀ CÁ NHÂN
1 Họ teân: Phan Thị Tài
2 Ngày tháng năm sinh: 20-06-1983 Giới tính: Nữ
4 Địa chỉ:20/2-Tổ 12-Khu phố 1_P Tân Hiệp-TP Biên Hịa Điện thoại: 0909790083
6 Email: info@123doc.org
7 Chức vụ: Giáo viên
8 Đơn vị công tác: Trường THPT Ngô Quyền – Biên Hòa –
Đồng Nai.
II. TRÌNH ĐỘ ĐÀO TẠO:
Học vị cao nhất: Cử nhân Năm nhận : 2006
Chuyên ngành đào tạo : Đại học sư phạm Tin
III KINH NGHIỆM KHOA HỌC:
1 Lĩnh vực chun mơn có kinh nghiệm: Giảng dạy mơn Tin Số năm giảng dạy:
(3)Hiện nay, với chương trình giảng dạy theo SGK làm học sinh cảm thấy chương trình học Tin học 11 thật khó hiểu Cụ thể đến “Kiểu dữ liệu tệp”, học sinh cảm thấy thật mơ hồ nhập nhằng.
Trước thực trạng đó, tơi nghĩ nên chọn cách dạy cho đầy đủ dễ hiểu cho học sinh Giúp cho học sinh cảm thấy gần gũi, nhận việc học lập trình thật thú vị.
Khi học lớp 10, em học “Tệp thư mục”, em được làm quen với tệp, dạng tệp Trong ta tiếp tục nhắc dạng cho em thấy với dạng muốn ghi liệu, muốn đọc liệu muốn mở để ghi tiếp liệu có,
(4)KIỂU DỮ LIỆU TỆP I Khái niệm tệp:
Tệp dãy phần tử kiểu xếp cách Tệp liệu lưu trữ nhớ tên
Tệp tập hợp số phần tử liệu có cấu trúc giống mảng khác mảng số phần tử tệp chưa xác định
Trong Pascal có loại tệp sử dụng là: Tệp có kiểu:
Tệp có kiểu tệp mà phần tử có độ dài kiểu liệu
Tệp văn bản:
Dùng để lưu trữ liệu dạng ký tự bảng mã ASCII, ký tự lưu thành dòng, độ dài dịng khác Ví dụ 2008 (kiểu word) ghi vào tệp văn cần Byte ( Byte)
Tệp không kiểu:
Tệp không kiểu loại tệp không cần quan tâm đến kiểu liệu ghi tệp Dữ liệu ghi vào tệp không cần chuyển đổi
Tác dụng lớn kiểu liệu tệp ta lưu trữ liệu nhập vào từ bàn phím kết xử lý nhớ RAM tệp để dùng nhiều lần
Khai báo:
* Định nghĩa kiểu tệp với từ khóa FILE OF phần mô tả kiểu sau từ TYPE, khai báo biến tệp phần khai báo biến
Ví dụ 2.6: Type
(5)TSN= File of MSN; {định nghĩa tệp TSN có phần tử mảng số nguyên} TCV=File of String[80]; {định nghĩa tệp TCV có phần tử chuỗi có độ dài 80 ký tự
Bangdiem= Record ……
End;
TBD= File of Bangdiem;
Var:
Tep1: TSN; Tep2: TCV; Tep3: TBD;
* Định nghĩa trực tiếp biến kiểu tệp phần khai báo biến Var
Tep4:File of Array[1 5] of String[80]; Tep5: File of Bangdiem;
2 Truy nhập vào tệp:
Turbo Pascal xử lý loại tệp : Tệp truy nhập tệp truy nhập trực tiếp
(6)* Tệp truy nhập trực tiếp: tệp truy nhập vào phần tử tệp Muốn truy nhập trực tiếp phải dùng thủ tục Seek (số hiệu phần tử)
* Mở tệp:
Để mở tệp chuẩn bị lưu trữ liệu, ta sử dụng thủ tục chuẩn sau đây: ASSIGN(biến tệp, tên tệp);
REWRITE(biến tệp); Trong đó:
Biến tệp: tên biến tệp khai báo sau từ khóa VAR Tên tệp: Là tên ta chọn để ghi liệu vào đĩa Ví dụ : ASSIGN(f, ‘a:\baitap.txt’);
REWRITE(f); {khởi tạo tệp rỗng}
Sau thủ tục trên, để tiến hành ghi liệu vào tệp ta lại dùng thủ tục WRITE(…):
Cách viết:
WRITE(biến tệp, giá trị cần ghi vào tệp); Cuối cùng, ta phải đóng tệp thủ tục:
CLOSE(biến tệp); II Các loại tệp
1 Tệp văn bản:
a Khai báo tệp văn bản:
Tệp văn khai báo trực tiếp phần khai báo biến: Var Bientep:Text;
(7)Truy nhập vào tệp hiểu nhập liệu vào tệp, ghi lại liệu thiết bị nhớ ngoài, đọc liệu hình máy in xử lý
* Mở tệp để ghi:
Assign(bientep, tentep); Rewrite(bientep);
* Mở tệp có để ghi thêm: Assign(bientep, tentep); Append(bientep);
* Mở tệp để đọc liệu: Assign(bientep, tentep); Reset(bientep);
c Ghi liệu vào tệp
Sau mở tệp dùng thủ tục Write Writeln để ghi liệu vào tệp
Ví dụ 2.7:
Var T1:Text; Begin
Assign(T1,’Dulieu.dat’); Rewrite(T1);
Writeln(T1,’Tep van ban’); Write(T1,123);
Write(T1,’ ’,123.45); Writeln(T1);
(8)End
Dữ liệu ghi vào tệp sau: Tep van ban
123 1.234500000E+02 Dòng trống
d Đọc liệu từ tệp văn bản
Sau tiến hành mở tệp, trỏ tệp đặt dòng đầu.Ta dùng thủ tục Read Readln để đọc liệu từ dòng thời gán vào biến tương ứng, viết biến hình máy in
Để viết tồn liệu từ tệp văn thiết bị ngồi thì, lệnh đọc viết phải lặp lặp lại từ dòng đến dòng cuối cùng, nghĩa phải sử dụng vòng lặp:
While not eof(Bientep) Begin
Readln(Bientep, Dong); {biến Dong phải khai báo trước, kiểu String}
Write(Dong); End;
Hoặc:
(9)Readln(Bientep,Dong); Write(Dong);
End;
Lưu ý: Muốn lấy lại kiểu liệu nhập vào tệp văn biến phải nhập dịng
Ví dụ 2.8:
Xây dựng chương trình đơn giản để quản lý công chức Dữ liệu nhập bao gồm: Họ tên, Hệ số lương số Dữ liệu xuất hình bao gồm Họ tên, Hệ số lương, Số Lương tháng ( tính theo quy định nhà nước = heso*540000)
Chương trình đặt hai khả lựa chọn:
Nếu tệp liệu tồn nhập thêm người Nếu tệp chưa có mở tệp
Trong trường hợp cho biết số người cần nhập Dữ liệu in dạng bảng
Program Quan_ly_can_bo; Uses Crt;
Var f:Text; hoten:String[20]; c1, heso:real; c2,i,n,socon:byte; Ten:string[12];
Begin
Clrscr;
(10)Reset(f);
If IOResult=0 then Append(f); Else Rewrite(f);
Write(‘nhap bao nhieu nguoi’); readln(n); For i:=1 to n
Begin
Write(‘Hoten’); Readln(hoten); Write(‘He so’); Readln(heso); Write(‘So con’); Readln(socon); Writeln(f,hoten);
Writeln(f,heso:4:2); Writeln(f,socon); End;
Close(f); Assign(f,ten); Reset(f);
Writeln(‘ -‘); Writeln (‘| Ho va ten | Hs | socon | Luong |’);
Writeln(‘ -‘) While not eof(f)
Begin
(11)Readln(f,heso); Readln(f,socon);
Writeln(‘|’,ten:19,’|’,heso:4:2,’|’,socon:4,’|’,heso*540000:10:2,’|’); End;
Readln; End
2 Tệp có kiểu: a Đọc ghi :
- Ghi lên tệp: Write(bientep,bien1,bien2,…); bien1,bien2,…là biến kiểu với biến tệp - Đọc tệp: Read(bientep,bien1,bien2,…);
Chú ý:
Khác với tệp văn bản, việc ghi đọc tệp có kiểu khơng sử dụng lệnh Writeln readln nghĩa tệp có kiểu khơng ghi liệu thành dòng Các phần tử tệp có kiểu ghi liên tục nhớ có ký hiệu kết thúc tệp EOF
Khi đọc ghi xong phần tử trỏ tệp tự động chuyển đến vị trí
b Truy nhập vào tệp: Seek(bientep,i); i=0,1,2,… Thủ tục seek định vị trỏ vị trí thứ i tệp c Các hàm xử lý tệp:
* Filesize(bientep) cho biết số phần tử có tệp
(12)* Eof(Bientep) cho giá trị True trỏ tệp vị trí cuối tệp, ngược lại cho giá trị False
Ví dụ 2.9:
Tạo tệp lấy tên TEPCK.DAT để vừa ghi vừa sửa liệu:
Program Tep_co_kieu: Uses crt;
Var bt:file of byte; i:byte; n:real; Begin
Clrscr;
Assign(bt,’ TEPCK.DAT’); Rewrite(bt);
For i:=0 to write(bt,i); {ghi vào tệp số nguyên} Reset(bt);
Writeln(‘Du lieu luu tru tep TEPCK.DAT’); While not eof(BT)
Begin
Read(bt,i); write(i:5); End;
Writeln;
Seek(bt,3); {định vị trỏ phần tử thứ 4} Textcolor(magenta);
(13)Writeln (‘So tep o vi trí thu 4:’,i); i:=33;
seek(bt,3); write(bt,i);
seek(bt,3); read(bt,i);
writeln(‘So moi tep o vi tri 4:,i);
writeln(‘vi tri hien thoi cua tro:’, filepos(bt)); readln;
close(bt); end
3 Tệp không kiểu: a Khai báo biến tệp:
Var Bientep:File; b Mở tệp để ghi-đọc: * Mở tệp để ghi:
Assign(bientep, tentep); Rewrite(bientep, n); * Mở tệp để đọc liệu:
Assign(bientep, tentep); Reset(bientep, n);
(14)* Đọc tệp không định kiểu: BlockRead(bientep,biennho,i,j);
* biennho: biến khai báo kiểu với phần tử tệp, biến nhớ đóng vai trị vùng nhớ đệm để lưu trữ liệu đọc từ phần tử tệp * i: số phần tử quy định cho lần đọc
* j: biến kiểu Word, dùng để ghi lại số phần tử thực đọc * Ghi tệp không định kiểu:
BlockWrite(bientep,biennho,i); d Truy nhập tệp không định kiểu
Tệp không kiểu truy nhập tệp có kiểu nghĩa dùng thủ tục Seek(bientep,n) để truy nhập vào phần tử thứ n+1 tệp
Lưu ý với tệp không kiểu, lần trỏ dịch chuyển dịch chuyển số byte số byte quy định lệnh Rewrite() Reset()
Ví dụ 2.10
Nhập vào tệp phần tử record sau viết chúng hình Trong phần khai báo record chọn Hoten string[15] Diem thuộc kiểu Real
Program tep_khong_kieu; Uses Crt;
Type hs=record
Hoten:string[15]; Diem:real;
(15)bt:file; k,nguoi:hs; i,j:byte; begin
clrscr;
assign(bt,’tep0kieu.dat’); rewrite(bt,22);
write(‘Nhap bao nhieu nguoi?’); readln(n);
for i:=1 to n with nguoi begin
write(‘ Ho va ten:’); readln(hoten); write(“Diem tong:’); readln(diem); blockwrite(bt,nguoi,1);
end;
for i:=1 to n-1 begin
seek(bt,i);
blockread(bt,k,1); textcolor(red);
with k writeln(hoten.’ ‘,diem:5:2); end;
(16)