Giáo trình Tin học đại cương - Phần 2 - Chương 6: Kiểu dữ liệu có cấu trúc Kiểu bản ghi và kiểu tệp

Kiểu bản ghi là một kiểu dữ liệu có cấu trúc gồm một số cố ñịnh các phần tử có kiểu khác

nhau.

Kiểu bản ghi dùng ñể mô tả các dữ liệu có nhiều thành phần khác kiểu liên kết với nhau như

dữ liệu của các bảng, các cột của bảng là các thành phần, mỗi cột có một kiểu dữ liệu khác

nhau, các cột liên kết với nhau ñể biểu diễn một nội dung nhất ñịnh.

Ví dụ1: Bảng lương bao gồm các cột: Số thứ tự, Họ và tên, Ngày sinh, Hệ số, Lương, Bảo

hiểm xã hội, Tổng lĩnh. Mỗi dòng của bảng lương thuộc kiểu dữ liệu bản ghi. Các cột là các

thành phần còn ñược gọi là các phần tử.

pdf15 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 1782 | Lượt tải: 4download
Tóm tắt nội dung Giáo trình Tin học đại cương - Phần 2 - Chương 6: Kiểu dữ liệu có cấu trúc Kiểu bản ghi và kiểu tệp, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ign(f, 'Diem.dat' ); 
 reset(f); 
 write(‘ Diem chuan : ‘); readln(diemc); 
 writeln(‘ Danh sach thi sinh trung tuyen dai hoc ‘); 
 while not eof(f) do 
 begin 
 read(f,hs); 
 with hs do 
 if toan+ly+hoa >= diemc then writeln(ten:25,toan:10:1,ly:10:1,hoa:10:1); 
 end; 
 close(f); 
 end; { ket thuc thu tuc doc} 
 {******************} 
 { than chuong trinh chinh} 
repeat 
 clrscr; 
 writeln(‘ 1- Tao tep’); 
 writeln(‘ 2- Doc tep’); 
 writeln(‘ 3- Ket thuc’); 
 write(‘ Hay chon mot viec ? ‘); readln(i); 
 case i of 
 1: tao; 
 2: doc; 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 170 
 170 
 end; 
 until i=3; 
 readln; 
end. 
2.6 - Truy nhập tệp trực tiếp 
 Các phần ñã xét ở trên là truy nhập tuần tự tệp có ñịnh kiểu. Trong phần này ta xét cách 
truy nhập trực tiếp tệp có ñịnh kiểu. 
 Sử dụng tất cả các thủ tục và lệnh ñã nêu ở trên, ngoài ra ñể truy nhập trực tiếp tệp còn 
sử dụng một số thủ tục và hàm sau. 
* Thủ tuc Seek ñể dịch chuyển con trỏ tệp 
 Seek( biến_tệp, n); 
 n có kiểu longint. Thủ tục này thực hiện chuyển con trỏ tệp tới phần tử thứ n. 
 Trong tệp phần tử ñầu ñược ñánh thứ tự là 0. 
* Hàm Filepos 
 Filepos(biến_tệp) 
 Hàm này cho vị trí hiện thời của con trỏ tệp. Ví trí ñầu là 0. 
* Hàm Filesize 
 Filesize(biến_tệp) 
 Hàm này cho số lượng phần tử của tệp. Hàm cho giá trị 0 khi tệp rỗng. 
 ðể thêm 1 phần tử vào tệp phải thêm vào cuối tệp. Như vậy phải dịch con trỏ tới cuối tệp 
bằng thủ tục seek như sau: 
 seek(biến_tệp, Filesize(biến_tệp)-1 ); 
* Ví dụ chương trình truy nhập tệp trực tiếp 
Bài toán 1: Tạo tệp ‘sochan.dat’ ghi các số nguyên dương chẵn <=20. Truy nhập ñể sửa một 
phần tử bất kỳ và thêm một phần tử vào tệp. 
 Chương trình 
Program truy_nhap_truc_tiep_tep; 
 uses crt; 
 var i,j : integer; f: file of byte; 
 { thu tuc tao tep } 
 procedure tao; 
 begin 
 clrscr; 
 assign(f, ‘sochan.dat’); 
 rewrite(f); 
 for i:=1 to 20 do 
 if (i mod 2) =0 then write(f, i); 
 close(f); 
 readln; 
 end; {ket thuc thu tuc tao } 
{ thu tuc sua } 
procedure sua; 
 begin 
 clrscr; 
 reset(f); 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 171 
 171 
 write(‘ sua phan tu thu ? ‘); readln(i); 
 seek(f, i-1); 
 read(f,j); 
 witeln(‘ gia trị cu: ‘, j); 
 write(‘ nhap gia tri moi : ‘); 
 readln(j); 
 seek(f, i-1); 
 write(f, j); 
 close(f); 
 end; { ket thuc thu tuc sua } 
{ thu tuc them phan tu } 
 procedure them; 
 begin 
 clrscr; 
 reset(f); 
 write(‘ gia tri moi them: ‘); 
 readln(j); 
 seek(f, filesize(f)-1); 
 write(f,j); 
 close(f); 
 readln; 
 end; {ket thuc thu tuc sua } 
{ thu tuc doc } 
procedure doc; 
 uses crt; 
 clrscr; 
 reset (f); 
 while not eof(f) do 
 begin 
 read(f,i); 
 witeln(i); 
 end; 
 close(f); 
end; { ket thuc thu tuc doc} 
{******************} 
 { than chuong trinh chinh} 
repeat 
 clrscr; 
 writeln(‘ 1- Tao tep’); 
 writeln(‘ 2- Sua tep’); 
 writeln(‘ 3- Them phan tu’); 
 writeln(‘ 4- Doc tep’); 
 writeln(' 5- ket thuc '); 
 write(‘ Hay chon mot viec ? ‘); readln(i); 
 case i of 
 1: tao; 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 172 
 172 
 2: sua; 
 3: them; 
 4: doc; 
 end; 
 until i=5; 
 readln; 
end. 
2.7 - Tệp văn bản 
* Khai báo tệp văn bản 
Trong Pascal có một kiểu tệp ñã ñược ñịnh nghĩa trước ñó là tệp văn bản, ñược ñịnh 
nghĩa với từ chuẩn TEXT. 
 Khai báo kiểu tệp văn bản; 
 Var Ten_bien: TEXT; 
Các phần tử của TEXT là các kiểu kí tự, ñược tổ chức thành các dòng với ñộ dài của các dòng 
khác nhau, nhờ có thêm các dấu hết dòng (End of Line). ðó là cặp kí tự ñiều khiển CR 
(Carriage Return, nhẩy về ñầu dòng, mã ASCII là 13) và LR(Line Feed: xuống dòng, mã 
ASCII là10), chúng dùng ñể ngăn cách các dãy kí tự tương ứng với 2 dòng khác nhau. 
Ví dụ: ðoạn văn bản sau: 
 HANOI 
 123 
 THUDO 
ðược chứa trong tệp văn bản thành một dãy như sau: 
HANOI CR LF 123 CR LF THUDO CR LF EOF 
Do tệp văn bản ñược tổ chức thành từng dòng nên việc ghi và ñọc tệp văn bản có thẻ tục ghi 
và ñọc theo dòng. 
* Ghi vào tệp văn bản 
 Có thể ghi các giá trị kiểu Integer, real, boolean, string vào tệp văn bản bằng lệnh 
Write hoặc Writeln, các lệnh này cho phép chuyển các giá trị kiểu nói trên sang dạng kí tự. 
Có 3 dạng sau: 
Dạng 1: 
 Write(biến _tệp, biểu_thức_1, biểu_thức_2,..., biểu_thức_n); 
 Ghi các giá trị của biểu thức vào tệp không có dấu hết dòng 
Dạng 2: 
 Writeln(biến _tệp, biểu_thức_1, biểu_thức_2,..., biểu_thức_n); 
 Ghi các giá trị của biểu thức vào tệp có dấu hết dòng. 
Dạng 3: 
 Writeln(biến _tệp); 
Ghi dấu hết dòng vào tệp. 
* ðọc dữ liệu từ tệp vănbản 
 Chúng ta có thể ñọc các kí tự, các số nguyên, số thực, boolean từ tệp văn bản thông 
qua các thủ tục sau: 
 Dạng 1: 
 read(biến _tệp, biến1, biến2, biến3,..., biếnn); 
 ðọc các giá trị từ tệp gán cho các biến tương ứng và không sang ñầu dòng tiếp theo. 
Dạng 2: 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 173 
 173 
 readln(biến _tệp, biến1, biến2, biến3,..., biếnn); 
 ðọc các giá trị từ tệp gán cho các biến tương ứng và ñưa con trỏ sang ñầu dòng tiếp 
theo. 
Dạng 3: 
 readln(biến _tệp); 
ðưa con trỏ sang ñầu dòng tiếp theo. 
Hàm chuẩn EOLN(f) sẽ phát hiện ra dấu hết dòng của tệp f. 
Hàm này cho giá trị là True nếu kết thúc dòng, ngược lại là False. 
* Các chương trình xử lý tệp văn bản 
Bài toán 1: Tạo tệp văn bản ghi lại n dòng văn bản nhập vào từ bàn phím. ðọc tệp ñã tạo và 
hiện ra trên màn hình. 
 Program Tao_doc_tep_van_ban; 
 uses crt; 
 var i,n: integer; f: text; s: string; 
{**************} 
 procedure tao; { thu tuc tao } 
 begin 
 clrscr; 
 assign(f, ‘vanban.txt’); 
 rewrite(f); 
 write(‘ So dong van ban: ‘); readln(n); 
 for i:=1 to n do 
 begin 
 write(‘ Nhap dong ‘, i ); readln(s); 
 writeln(f, s); 
 end; 
 close(f); 
 end; { ket thuc thu tuc tao} 
{ ***************} 
Procedure doc; { thu tuc doc } 
 begin 
 clrscr; 
 Assign(f, 'vanban.txt' ); 
 reset(f); 
 Writeln(‘ Tep van ban da tao’); 
 while not eof(f) do 
 begin 
 readln(f,s); 
 writeln(s); 
 end; 
 close(f); 
 end; { ket thuc thu tuc doc} 
 {******************} 
 { than chuong trinh chinh} 
repeat 
 clrscr; 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 174 
 174 
 writeln(‘ 1- Tao tep’); 
 writeln(‘ 2- Doc tep’); 
 writeln(‘ 3- Ket thuc’); 
 write(‘ Hay chon mot viec ? ‘); readln(i); 
 case i of 
 1: tao; 
 2: doc; 
 end; 
 until i=3; 
 readln; 
end. 
Bài toán 2: ðọc xâu văn bản từ tệp, kiểm tra xem xâu ñó có ñối xứng không, sau ñó sắp xếp 
các chữ số trong xâu theo thứ tự tăng dần. 
chương trình 
 PROGRAM DOC_XAU_SAP_TT_SO; 
USES CRT; 
TYPE MANG=ARRAY[1..200] OF CHAR; 
VAR I,K,L,N:INTEGER;T:BOOLEAN;S:STRING;A:MANG;F:TEXT; 
PROCEDURE SAPTANG(VAR X:MANG;M:INTEGER); 
VAR J,Z:INTEGER;P:CHAR; 
BEGIN 
 FOR J:=1 TO M-1 DO 
 FOR Z:=1 TO M-J DO IF X[Z]>X[Z+1] THEN BEGIN P:=X[Z]; 
 X[Z]:=X[Z+1]; 
 X[Z+1]:=P; 
 END; 
END; 
BEGIN { thân chương trinh chính} 
CLRSCR; 
ASSIGN(F,'VB.TXT'); 
RESET(F); 
READLN(F,S); 
WRITELN(' XAU DOC DUOC'); 
WRITELN(S); 
N:=LENGTH(S); 
{tim xau doi xung} 
K:=1;L:=N;T:=TRUE; 
WHILE (K<L) AND T DO 
 IF S[K]=S[L] THEN BEGIN K:=K+1; L:=L-1; END 
 ELSE T:=FALSE; 
IF T THEN WRITELN(' XAU DOI XUNG ') ELSE WRITELN(' XAU KHONG DOI XUNG '); 
{ sap cac so trong xau tang dan } 
K:=0; 
FOR I:=2 TO N DO IF (ORD(S[I])>=48) AND (ORD(S[I])<=57) THEN 
 BEGIN 
 K:=K+1; 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 175 
 175 
 A[K]:=S[I]; 
 END; 
SAPTANG(A,K); 
L:=0; 
FOR I:=1 TO N DO IF (ORD(S[I])>=48) AND (ORD(S[I])<=57) THEN 
 BEGIN 
 L:=L+1; 
 S[I]:=A[L]; 
 END; 
WRITELN('XAU DA SAP THU TU CAC SO '); 
WRITELN(S); 
READLN; 
CLOSE(F); 
END. 
Trường ðại học Nông nghiệp 1 - Giáo trình Tin học ñại cương --------------------------------------------- 176 
 176 
Bài tập chương VI 
1. Viết chương trình gồm 2 CT con làm các công việc sau: Ghi 1 bài thơ có n dòng, nội dung 
nhập vào từ bàn phím lên tệp văn bản có tên ‘BAITHO.TXT’ và ñọc tệp văn bản ñã tạo từ 
ñĩa và cho hiện nội dung lên màn hình. Dùng câu lệnh lựa chọn ñể chọn công việc: 1= Ghi, 
2=Doc. 
2. Viết chương trình tạo tệp dữ liệu ‘DIEM.DAT’ chứa bảng ñiểm của n người và in kết quả 
ra màn hình. Bảng ñiểm gồm các cột: Họ tên, ðiểm Toán, ðiểm Lý, ðiểm Hoá , Tổng, Loại. 
 Nhập vào: Họ tên, ðiểm toán, ðiểm lý, ðiểm hoá. 
 Tính Tổng, Loại : 
 Tổng = ðiểm toán + ðiểm lý + ðiểm hoá . 
 Loại = ‘ DO ’ nếu Tổng > 19 
 Loại = ‘ TRUOT' nếu Tổng <= 19 
3. Viết chương trình tạo tệp dữ liệu ‘LUONG.DAT’ chứa bảng lương của n người và in kết 
quả ra màn hình. 
 Bảng lương gồm các cột: Họ tên, Ngày công, Lương ính,Thưởng, Tổng 
 Nhập vào : Họ tên, Ngày công, Lương chính . 
 Tính Thưởng, Tổng : 
 Thưởng = Lương chính x 2 nếu Ngày công > 25 
 Thưởng = Lương chính nếu Ngày công <= 25 
 Tổng = Lương chính + Thưởng . 
4. Viết chương trình tạo tệp dữ liệu ‘HANG.DAT’ chứa bảng Thống kê hàng nhập của n mặt 
hàng và in kết quả ra màn hình. Bảng Thống kê hàng nhập gồm các cột: 
Tên , Số lượng, ðơn giá, Tiền, Loại. 
 Nhập vào: Tên , Số lượng, ðơn giá. 
 Tính Tiền, Loại : Tiền = Số lương x ðơn giá . 
 Loại = ‘Cao’ nếu Tiền > 500000. 
Loại = ‘THAP’ nếu Tiền <= 500000. 
5. Viết chương trình tạo tệp dữ liệu ‘SACH.DAT’ chứa bảng danh mục của n quyển sách và 
in kết quả ra màn hình. Bảng danh mục sách bao gồm các cột: 
Tên, Năm, Tác giả, Giá, Loại. 
Nhập vào : Tên, Năm, Tác giả, Giá. 
Tính Loại theo công thức sau: 
 Loại = ‘Cao’ nếu Tiền > 50000 
 Loại = ‘TB’ nếu 20000<= Tiền <= 50000 
 Loại = ‘THAP’ nếu Tiền < 20000. 

File đính kèm:

  • pdfGiáo trình Tin học đại cương - Phần 2 - Chương 6_Kiểu dữ liệu có cấu trúc Kiểu bản ghi và kiểu tệp.pdf