3 Khai báo tệp ựịnh kiểu

Một phần của tài liệu giáo trình tin học đại cương (Trang 157 - 162)

- Khai báo trực tiếp trong khai báo biến

2. 3 Khai báo tệp ựịnh kiểu

Khai báo tệp ựịnh kiểu dùng cụm từ sau: File of kiểu_phần_tử;

Ớ Khai báo kiểu tệp:

Type tên_kiểu = File of kiểu_phần_tử; Ớ Khai báo biến têp:

Var tên_biến : File of kiểu_phần_tử;

Vắ dụ 1 type t= file of integer; var f1,f2 : t;

Vắ dụ 2: type bang= record ten: string[25]; Ns: string[10]; Que: string[30]; luong,bhxh:real; end;

var f1,f2,f3: file of bang;

2.4 - Tạo tp ựể ghi dliu

* Mtp ựể ghi dliu

Dùng 2 thủ tục ựi liền nhau theo thứ tự như sau: - Thủ tục Assign

Thủ tục này gán tên_tệp cho biến_tệp. Tên_tệp theo ựúng qui tắc ựặt tên trong DOS mà

ta ựã học ở phần trên. - Thủ tục Rewrite Rewrite(biến_tệp);

Thủ tục này thực hiện việc mở tệp ựể ghi.

Vắ dụ: Mở tệp có tên là Ổsonguyen.datỖ gán cho biến tệp f ựể ghi dữ liệu ta viết như sau: Assign(f,Ỗsonguyen.datỖ);

Rewrite(f);

Sau khi mở tệp xong thì tệp chưa có phần tử nào, tệp rỗng. Con trỏ tệp ( cửa sổ tệp ) trỏ vào cuối tệp (eof) . Nếu tên_tệp trùng với tệp ựã có thì tệp ựó sẽ bị xoá.

* Ghi dliu o tp ng thủ tục Write

Write(biến_tệp, biểu_thức1, biểu_thức2, . . ., biểu_thức n);

Các biểu_thức phải có giá trị cùng kiểu với kiểu của tệp. Giá trị của các biểu thức sẽ ựược ghi vào tệp theo như thứ tự ựã viết.

Write(f, 2, 4, 6, i*j+3);

* đóng tp bng thủ tục Close

Close(biến _tệp);

* c vắ dụ chương trình tạo tp ựể ghi dliu

i toán 1: Tạo tệp có tên là Ổsonguyen.datỖ ghi các số nguyên dương <200 mà chia hết cho 3.

Chương trình

Program Tao_tep_so_nguyen; uses crt;

var i : integer; f : file of integer ; Begin

assign(f, Ổsonguyen.datỖ); rewrite(f);

for i:=3 to 199 do

if (i mod 3) = 0 then write(f, i); close(f);

readln; end.

i toán 2: Tạo tệp Ổsach.datỖ ựể ghi các thông tin cho các cuốn sách bao gồm các dữ liệu như tên sách, năm xuất bản, số trang, tác giả.

Chương trình

Program Tao_tep_sach; uses crt;

Type tin = record ten: string[25]; nam: integer;

trang: longint; tacgia: string[25]; end;

Var i,n : integer; f: file of tin; nhap: tin; Begin

clrscr;

assign(f, Ổsach.datỖ); rewrite(f);

write(Ổ Nhap so sach n : Ổ); readln(n); for i:= 1 to n do

begin

with nhap do begin

write(ỔTen sach : Ổ); readln(ten); write(ỔNam xuat ban : Ổ); readln(nam); write(ỔSo trang : Ổ); readln(trang); write(ỔTen tac gia : Ổ); readln(tacgia); end; write(f, nhap); end; close(f); end. 2.5 - đọc dliu ttp ựã có * Mtp ựể ựọc

Mở tệp ựể ựọc dùng 2 thủ tục ựi liền nhau theo thứ tự sau: - Thủ tục Assign assign(biến_tệp, tên_tệp); - Thủ tục Reset Reset(biến_tệp) ; Thủ tục này thực hiện mở tệp ựể ựọc. Vắ dụ1: Mở tệp Ổsonguyen.datỖ gắn với biến tệp f ựể ựọc dữ liệu. assign(f, Ổsonguyen.datỖ); reset(f); Vắ dụ 2: Mở tệp Ổsach.datỖ gắn với biến tệp f1 ựể ựọc dữ liệu. assign(f1, Ổsach.datỖ); reset(f1); * đọc dliu ttp

đọc dữ liệu từ tệp ựược thực hiện bằng thủ tục Read như sau: Read(biên_tệp, biến1, biến2, . . . , biến n);

Thủ tục này thực hiện ựọc giá trị ở vị trắ con trỏ gán cho các biến tương ứng như thứ tự ựã

viết, khi ựọc xong con trỏ tệp lại chuyển sang phần tử tiếp theo ựọc và gán cho biến khác, cứ

thế ựọc cho ựến biến n .

Việc ựọc chỉ ựược thực hiện khi tệp vẫn còn phần tử, tức là con trỏ chưa tới eof ( cuối tệp). do vậy trước khi ựọc phải kiểm tra xem ựã kết thúc tệp chưa, dùng hàm chuẩn eof như sau: eof(biến_têp); hàm này cho giá trị True nếu con trỏ ở cuối tệp, ngược lại hàm cho giá trị

Có thể dùng 2 cấu trúc sau:

- Kiểm tra nếu tệp chưa kết thúc thì ựọc

if not eof(biến_têp) then read(biến_têp, biến); - đọc tất cả các phần tử của tệp

While not eof(biến_têp) do Begin

read(biến_tệp, biến); . . .

end;

Nếu con trỏ ở cuối tệp mà vẫn ựọc thì máy sẽ báo lỗi, sau ựó chương trình dừng lại. Do vậy

phải kiểm tra trước khi ựọc.

Vắ dụ while not eof(f) do begin read(f,x); writeln(x); end; * đóng tp Close(biến_tệp); * c vắ dụ chương trình ựọc dliu ttp

i toán 1:đọc dữ liệu từ tệp Ổsonguyen.datỖ ựã tạo ở trên và hiện kết quả trên màn hình. Chương trình

program Doc_tep_songuyen; uses crt;

var i: integer; f: file of integer; begin

clrscr;

assign(f, Ổsonguyen.datỖ); reset(f);

while not eof(f) do begin read(f, i); writeln(i); end; close(f); readln; end.

i toán 2: Viết chương trình thực hiện tạo tệp Ổdiem.datỖ ghắ lại ựiểm thi của thắ sinh, dữ

liệu bao gồm: họ và tên thắ sinh, ựiểm toán, ựiểm lý, ựiểm hoá. đồng thời thực hiện ựọc tệp và

in ra thắ sinh trúng tuyển, ựiểm chuẩn ựỗ ựược nhập vào từ bàn phắm. Chương trình program Tao_doc_tep_diemts; uses crt; type hs = record ten: string[25]; toan,ly,hoa : real; end;

var i,n: integer; f: file of hs; nhap: hs; diemc: real; {**************}

procedure tao; { thu tuc tao } begin

clrscr;

assign(f, Ổdiem.datỖ); rewrite(f);

write(Ổ So thi sinh: Ổ); readln(n); for i:=1 to n do

begin

with hs do begin

write(Ổ Ho va ten: Ổ); readln(ten); write(Ổ Diem toan: Ổ); readln(toan); write(Ổ Diem ly : Ổ); readln(ly); write(Ổ Diem hoa : Ổ); readln(hoa); end;

write(f, hs); end;

close(f);

end; { ket thuc thu tuc tao} { ***************}

Procedure doc; { thu tuc doc } begin

clrscr;

Assign(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;

end; until i=3; readln; end.

Một phần của tài liệu giáo trình tin học đại cương (Trang 157 - 162)

Tải bản đầy đủ (PDF)

(182 trang)