Giáo trình Nhập môn Tin học LỜi nóI ĐẦU



tải về 4.67 Mb.
trang59/63
Chuyển đổi dữ liệu20.05.2018
Kích4.67 Mb.
1   ...   55   56   57   58   59   60   61   62   63

Tệp không định kiểu


* Tệp không định kiểu:

Tệp không định kiểu - Untyped File - là tệp không định rõ kiểu của phần tử khi khai báo, coi dữ liệu chính là các mã nhị phân 0,1 không cần biết nó biểu thị cái gì. Đơn vị xử lý là từng khối bít, có kích thước do ta quy định, gọi là các Record. Lưu ý rằng record ở đây không phải là kiểu bản ghi như đã biết.

Tệp không định kiểu chủ yếu dùng để tăng tốc độ thao tác vào ra dữ liệu.

* Cú pháp

Khai báo: dùng từ khoá FILE

Var biến tệp : File ;

Truy cập: Các thủ tục Reset, Rewrite đối với tệp không định kiểu cần có thêm tham trị kich thước Rec. Tham trị kích thước Rec là một số nguyên (kiểu Word) để ấn định kích thước của khối dữ liệu đơn vị (record) trong các thao tác tệp. Kích thước này tính theo byte.


Reset ( biến tệp , kích thước Rec );

Rewrite ( biến tệp , kích thước Rec );
Ví dụ 7.78:

Reset(F,4); đọc ra từng khối 4 byte một.

Rewrite(F,2); viết vào từng khối 2 byte một.

Nếu tham số này không có mặt thì record có kích thước mặc định là 128 byte.


* Các hàm, thủ tục khác.


Ngoài ra, để tăng nhanh tốc độ xuất nhập dữ liệu, còn có hai thủ tục dành riêng cho tệp không định kiểu là BlockReadBlockWrite.

BlockRead( biến tệp , vùng đệm , số Rec , kết quả );

Vùng đệm: vùng đệm trong bộ nhớ, là một tham biến, nơi chứa dữ liệu đọc vào

Sô Rec : tham trị kiểu Word, là số khối dự định đọc.

Kết quả : tham biến kiểu Word, là số khối thực đọc được.
Tác dụng.

BlockRead đọc một lượng số Rec khối bit từ tệp ứng với biến tệp rồi ghi vào bộ nhớ, bắt đầu từ byte thứ nhất của Vùng đệm. Số khối bit thực sự đọc được được trả về trong biến kết qủa. Lưu ý rằng số khối bít thực sự đọc được có thể bé hơn sô Rec dự định đọc nếu đã đến cuối tệp.

Nếu không có tham biến kết qủa thì khi số khối thực sự đọc được không bằng số Rec sẽ có lỗi I/O xảy ra.

Số byte đọc được nhiều nhất là số Rec * kích thước Rec, ở đây kích thước Rec là kích thước của khối. Kích thước khối là số lượng byte trong một khối, được ấn định khi mở tệp như đã trình bày ở trên.

Nếu số Rec * kích thước Rec > 65,535 (64K) thì sẽ có lỗi.


BlockWrite( biến tệp , vùng đệm , số Rec , kết quả );

Vùng đệm: vùng đệm trong bộ nhớ, là một tham biến, nơi chứa dữ liệu để xuất ra.

Sô Rec : tham trị kiểu Word, là số khối dự định xuất ra.

Kết quả : tham biến kiểu Word, là số khối thực sự xuất ra được.
Ý nghĩa của các tham số và công dụng của BlockWrite cũng tương tự như BlockRead ở trên. Chỉ có thao tác truy cập ở đây là viết từ bộ nhớ ra tệp.

Ví dụ 7.79:

Chương trình dưới đây minh hoạ cách dùng BlockRead, BlockWrite. Nó thực hiện sao chép tệp nhanh, đơn giản không kiểm tra lỗi.

Program CopyFile;

Var Fnguon, Fdich: file;

Byte_doc, byte_ghi: Word;

Buf: array[1..2048] of Char;

Begin

Assign(Fnguon,'nguon.txt');



Reset(Fnguon, 1); { đọc ra từng khối mỗi lần 1 byte }

Assign(Fdich,'dich.txt');

Rewrite(Fdich, 1); { ghi ra từng khối mỗi lần 1 byte }

Writeln('Copy ',FileSize(Fnguon),'

bytes tu file nguon.txt sang file dich.txt');

Repeat


BlockRead(Fnguon, Buf, SizeOf(Buf), byte_doc);

BlockWrite(Fdich, Buf, byte_doc, byte_ghi);

Until (byte_doc = 0) or (byte_ghi <> byte_doc);

{Việc đọc ghi sẽ dừng nếu file nguon.txt rỗng, tưc byte_doc=0 hoặc số byte đọc và ghi là khác nhau (NumWritten <> NumRead)}

Close(Fnguon);

Close(Fdich);

Readln;


End.






BÀI TẬP CHƯƠNG 7



Bài 7.1: Cho dãy số gồm n phần tử (n<=15), giá trị từng phần tử là số thực. Thực hiện các yêu cầu:

1. Nhập từ bàn phím số phần tử và giá trị của từng phần tử;

2. Tính tổng và trung bình cộng các phần tử của dãy;

3. In dãy đã cho ra màn hình và kết quả tìm được.


Bài 7.2: Cho dãy số gồm n phần tử (n<=20), giá trị từng phần tử là số nguyên. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số phần tử và giá trị của từng phần tử;

2. Tính tổng các phần tử âm của dãy;

3. In ra màn hình dãy số nhập, dãy chứa toàn số âm và các kết quả tìm được.


Bài 7.3: Cho dãy số gồm n phần tử (n<=20), giá trị từng phần tử là số nguyên. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số phần tử và giá trị của từng phần tử;

2. Tính tổng và trung bình cộng các phần tử chẵn của dãy;

3. In dãy đã cho, dãy chứa các phần tử chẵn ra màn hình và kết quả tìm được.


Bài 7.4: Cho dãy số gồm n phần tử (n<=15), giá trị từng phần tử là số thực. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số phần tử và giá trị của từng phần tử;

2. Tìm phần tử có giá trị lớn nhất và vị trí xuất hiện đầu tiên của nó trong dãy;

3. In dãy đã cho ra màn hình và các kết quả tìm được.


Bài 7.5: Cho dãy số gồm n phần tử (n<=15), giá trị từng phần tử là số thực. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số phần tử và giá trị của từng phần tử;

2. Kiểm tra điều kiên n (0

2. Tìm phần tử có giá trị tuyệt đối bé nhất và vị trí xuất hiện cuối cùng của nó trong dãy;

3. In dãy đã cho ra màn hình và các kết quả tìm được.
Bài 7.6: Cho dãy số gồm n phần tử (n<=15), giá trị từng phần tử là số thực. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số phần tử và giá trị của từng phần tử;

2. Sắp xếp dãy đã cho theo chiều tăng dần về giá trị của từng phần tử;

3. In dãy số nhập vào và dãy sau khi sắp ra màn hình.



Bài 7.7: Cho dãy số gồm n phần tử (n<=20), giá trị từng phần tử là số thực. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số phần tử và giá trị của từng phần tử;

2. Tìm phần tử nhỏ nhất trong dãy và chỉ ra vị trí của tất cả các phần tử đạt giá trị nhỏ nhất (nếu có);

3. In dãy số nhập ra màn hình và các kết quả tìm được.

4. Thêm vào đoạn chương trình câu hỏi đáp: Co tinh tiep khong (C/K) ?

Nếu gõ C hoặc c thì chương trình thực hiện lại từ đầu


Bài 7.8: Cho một ma trận chữ nhật mxn phần tử (m,n<=5), giá trị từng phần tử là số thực. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số hàng, số cột và giá trị từng phần tử của ma trận

2. Tính tổng các phần tử của ma trận

3. Tìm phần tử lớn nhất trong ma trận.

4. In ma trận đã cho dưới dạng bảng ra màn hình và các kết quả tìm được.
Bài 7.9: Cho một ma trận chữ nhật mxn phần tử (1<=m,n<=5), các phần tử có giá trị nguyên. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số hàng, số cột và giá trị từng phần tử của ma trận

2. Tính tổng các phần tử âm và trung bình cộng của chúng

3. In ma trân nhập và các kết quả tính.

4. Kiểm tra xem ma trận có phải là ma trận vuông hay không. Nếu là ma trận vuông hãy tính tổng các phần tử trên đường chéo chính. Nếu không phải là ma trân vuông hãy in dòng thông báo: Ma tran nhap khong phai la ma tran vuông.
Bài 7.10: Cho ma trận vuông nxn phần tử 1<=n<=5), các phần tử có giá trị nguyên. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số hàng, cột và giá trị từng phần tử của ma trận

2. Tìm phần tử có giá trị nhỏ nhất về giá trị tuyệt đối của ma trận và vị trí của nó.

3. Tính tổng các phần tử trên đường chéo chính của ma trận

4. In ma trận đã cho dưới dạng bảng ra màn hình và các kết quả tìm được.
Bài 7.11: Cho ma trận vuông nxn phần tử 1<=n<=5), các phần tử có giá trị nguyên. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số hàng, cột và giá trị từng phần tử của ma trận

2. Tìm phần tử nhỏ nhất trên hàng k của ma trận và vị trí của nó - k được đọc vào từ bàn phím

3.Tìm phần tử có giá trị tuyệt đối nhỏ nhất trên đường chéo chính của ma trận.

4. In ma trận đã cho dưới dạng bảng ra màn hình và các kết quả tìm được.

Bài 7.12: Cho một ma trận chữ nhật mxn phần tử (m,n<=5), giá trị từng phần tử là số thực. Thực hiện các yêu cầu sau:

1. Nhập từ bàn phím số hàng, số cột và giá trị từng phần tử của ma trận

2. Đếm số phần tử chẵn âm của ma trận

3. In ma trận đã cho dưới dạng bảng ra màn hình và các kết quả tìm được.

4. Kiểm tra xem ma trận nhập vào có phải là ma trận đơn vị hay không?
Bài 7.13: Viết chương trình quản lý điểm của một lớp học gồm có các chức năng sau:

1. Nhập hồ sơ của mỗi học sinh gồm: Họ và tên, năm sinh, điểm trung bình học kỳ một, điểm trung bình học kỳ hai.

2. In danh sách các học sinh của lớp có điểm trung bình cả năm từ 5 điểm trở lên và theo thứ tự giảm dần của điểm trung bình cả năm.

3. In danh sách các học sinh phải thi lại (điểm trung bình cả năm <5) theo thứ tự abc của tên.


Bài 7.14: Viết chương trình nhập vào từ bàn phím Họ và tên, sau đó in phần tên lên màn hình. Ví dụ: nhập ‘Nguyen Thanh Lam’ và in ra ‘Lam’.
Bài 7.15: Nhập vào một xâu ký tự gồm các từ. Viết chương trình xoá bỏ bớt các dấu trống giữa các từ sao cho các từ chỉ cách nhau ít nhất một dấu trống. , ví dụ nhập ‘Cao dang Dien luc’ thì in ra ‘Cao dang Dien luc’
Bài 7.16: Viết chương trình thực hiện trò chơi sau:

Người chơi nhập một số k trong phạm vi từ 1 đến 9

Tạo một tập S gồm ba số ngẫu nhiên trong phạm vi từ 1 đến 9

Kiểm tra xem k có thuộc tập S không?. Nếu thuộc thì người chơi thắng, ngược lại là thua. In k và tập S lên màn hình.



Hướng dẫn: Trong thư viện CRT có hàm Random(n) trả về một số ngẫu nhiên j thuộc phạm vi: 0 <= j < n .
Bài 7.17: Mỗi phân số được mô tả như sau :

Type Phanso = Record

tu, mau : Integer;

end;


Nhập hai phân số từ bàn phím, tạo một tệp chứa hai phân số đó và hai phân số là tổng, hiệu của chúng. Đọc bốn phân số đó từ tệp và in lên màn hình.
Bài 7.18: Nhập số nguyên dương N (02, ..., AN . Ghi dãy số đó vào tệp DL.DAT. Đếm trong tệp DL.DAT có bao nhiêu số chẵn. Đọc các số lẻ từ tập DL.DAT và in lên màn hình.

Bài 7.19: Để quản lý Họ tên , các điểm Toán, Lý và Điểm trung bình của sinh viên, ta mô tả kiểu Ksvien như sau :

Type Ksvien= Record

Hoten: String[20];

Toan, Ly, Dtb : Real;

end;


Hãy nhập một danh sách sinh viên gồm Họ tên, điểm Toán và điểm Lý, rồi tính Điểm trung bình: Dtb:=(Toán+Lý)/2, lưu vào tệp QLY.DAT. Quá trình nhập kết thúc khi nhập Họ tên là rỗng ( tức không nhập gì cả, cứ Enter).

Đọc danh sách sinh viên từ tệp QLY.DAT và in danh sách lên màn hình.

Chép danh sách sinh viên vào tập QLY.IDX sao cho các phần tử của QLY.IDX được sắp xếp theo trật tự giảm của điểm trung bình.

Đọc dữ liệu của tệp QLY.IDX và ghi vào tệp văn bản tên là QLY.TXT theo dạng:




STT

Họ và tên

Điểm trung bình

1

Nguyen Thao Nguyen

8.5

2

Nguyen Thanh Lam

8.0

..

.. .. ..

..


Bài 7.20: Dùng hệ soạn thảo của Turbo Pascal để tạo một tệp văn bản có tên là MT.DAT chứa hai ma trận vuông cấp 3 là A và B có các phần tử là các số nguyên. Lấy dữ liệu từ tệp MT.DAT để tính ma trận C=A+B. Ghi ma trận C vào cuối tệp MT.DAT. Đọc các ma trận A, B, C từ tệp MT.DAT và in lên màn hình.

Chương 8

CHƯƠNG TRÌNH CON

1   ...   55   56   57   58   59   60   61   62   63


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2016
được sử dụng cho việc quản lý

    Quê hương