Nội dung của Bài 15: Thao tác với tệp dưới đây, các em sẽ được tìm hiểu về cách khai báo tệp, các thao tác cơ bản với tệp văn bản và cách sử dụng một số hàm và thủ tục chuẩn làm việc với tệp. Mời các em cùng theo dõi nội dung dưới đây.
Để làm việc với dữ liệu kiểu tệp ta phải sử dụng biến tệp.
Khai báo biến tệp văn bản có dạng:
var < tên biến tệp > : text;
Ví dụ 1: var tep1,tep2: text;
Khai báo trên xác định hai biến tệp văn bản tep1 và tep2.
Thủ tục gắn tên tệp với biến tệp:
assign(< biến tệp >, < tên tệp >);
Hình 1. Minh họa thao tác gắn tên tệp
rewrite(tep3);
Khi thực hiện thủ tục rewrite(tep3), nếu trên thư mục gốc của đĩa C chưa có tệp KQ.DAT, thì tệp sẽ được tạo với nội dung rỗng. Nếu đã có, thì nội dung cũ sẽ bị xóa để chuẩn bị ghi dữ liệu mới.
tentep:= 'DL.INP';
assign(tep1,tentep);
reset(tep1);
hoặc
assign(tep1, 'DL.INP');
reset(tep1);
Cú pháp: read( < biến tệp >,< danh sách biến > );
hoặc
readln( < tên biến tệp >,< danh sách biến >);
Trong đó:
Cú pháp: write(< biến tệp >,< danh sách kết quả >);
hoặc
writeln( < biến tệp >,< danh sách kết quả > );
Trong đó:
Giả sử trong chương trình có khai báo:
var tepA, tepB: text;
và tệp tepA được mở để đọc dữ liệu, còn tệp tepB dùng để ghi dữ liệu.
write(tepB,' A = ', A,' B = ',B,' C = ',C);
writeln(tepB,' X1 = ',(-B – SQRT(B*B- 4*A*C))/(2*A):8:3);
Sau khi đóng một tệp vẫn có thể được mở lại.
Khi mở lại tệp, nếu vẫn dùng biến tệp cũ thì không cần phải dùng thủ tục assign gắn lại tên tệp.
Sau khi học xong Bài 15: Thao tác với tệp, các em có thể thao tác với tệp được mô tả trong hình 1 dưới đây:
Hình 1. Thao tác với tệp
Các em có thể hệ thống lại nội dung kiến thức đã học được thông qua bài kiểm tra Trắc nghiệm Tin học 11 Bài 15 cực hay có đáp án và lời giải chi tiết.
Trong NNLT Pascal, cú pháp để khai báo biến tệp văn bản là:
Để có thể thao tác với tệp dữ liệu trên đĩa thông qua biến tệp cho trước thì bước đầu tiên chúng ta phải làm gì?
Trong NNLT Pascal, cú pháp để gắn tên tệp cho biến tệp là:
Câu 4-10: Mời các em đăng nhập xem tiếp nội dung và thi thử Online để củng cố kiến thức về bài học này nhé!
Trong quá trình học tập nếu có thắc mắc hay cần trợ giúp gì thì các em hãy comment ở mục Hỏi đáp, Cộng đồng Tin học DapAnHay sẽ hỗ trợ cho các em một cách nhanh chóng!
Chúc các em học tập tốt và luôn đạt thành tích cao trong học tập!
-- Mod Tin Học 11 DapAnHay
Trong NNLT Pascal, cú pháp để khai báo biến tệp văn bản là:
Để có thể thao tác với tệp dữ liệu trên đĩa thông qua biến tệp cho trước thì bước đầu tiên chúng ta phải làm gì?
Trong NNLT Pascal, cú pháp để gắn tên tệp cho biến tệp là:
Trong NNLT Pascal, cú pháp để mở tệp ở chế độ đọc dữ liệu từ tệp là:
Cú pháp của thủ tục đọc dữ liệu từ tệp văn bản là:
Cú pháp của thủ tục ghi dữ liệu vào tệp văn bản là:
Hàm eof() trả về giá trị TRUE khi nào?
Hàm eoln() trả về giá trị TRUE khi nào?
Trong NNLT Pascal, sau khi làm việc với tệp cần phải đóng tệp. Cú pháp để đóng tệp là:
Trong một chương trình Pascal, sau khi đã đóng tệp bằng thủ tục đóng tệp thì có thể mở lại tệp đó hay không?
Họ và tên
Tiêu đề câu hỏi
Nội dung câu hỏi
Câu trả lời của bạn
Program DapAnHay;
var s: string;
code,t: integer;
c: byte;
f: text;
procedure out;
begin
assign(f,'dulieu.dat');
rewrite(f);
write(f,t);
close(f);
end;
begin
write('Nhap xau : '); readln(s);
t:=0;
for i:=1 to length(s) do
if (s[i] in ['2'..'8']) then
begin
val(s[i],c,code);
if c mod 2=0 then t:=t+c;
end;
out;
readln
end.
Câu trả lời của bạn
const fi='data.txt';
fo='ketqua.txt';
var f1,f2:text;
a:array[1..100]of integer;
n,i,tb,dem:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
n:=0;
while not eoln(f1) do
begin
inc(n);
read(f1,a[n]);
end;
tb:=0;
dem:=0;
for i:=1 to n do
if a[i] mod 2<>0 then
begin
tb:=tb+a[i];
inc(dem);
end;
writeln(f2,tb/dem:4:2);
close(f1);
close(f2);
end.
- Trung bình cộng các phần tử chẵn
- Trung bình cộng các phần tử lẻ
- Trung bình cộng các phần tử trong dãy
- Đưa kết quả ra màn hình
- Ghi kết quả vào tệp 'kq.out' (trên 3 dòng khác nhau)
Câu trả lời của bạn
Program DapAnHay;
const fi='dulieu.dat';
fo='kq.out';
var f: text;
t,t1,t2: longint;
i,n,d,d1: integer;
procedure ip;
begin
assign(f,fi);
reset(f);
readln(f,n);
d:=0; d1:=0; t:=0; t1:=0; t2:=0;
for i:=1 to n do
begin
read(f,a[i]);
if a[i] mod 2=0 then
begin
t1:=t1+a[i];
d:=d+1;
end;
if a[i] mod 2<>0 then
begin
t2:=t2+a[i];
d1:=d1+1;
end;
t:=t+a[i];
end;
close(f);
end;
procedure out;
begin
assign(f,fo);
rewrite(f);
writeln(f,t1/d:1:2);
writeln(f,t2/d1:1:2);
write(f,t/n:1:2);
close(f);
end;
begin
ip;
out;
end.
Câu trả lời của bạn
const fi='dulieu.txt';
fo='ketqua.txt';
var f1,f2:text;
m,n,t,i:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,m,n);
t:=0;
for i:=m to n do
if i mod 3=0 then t:=t+i;
writeln(f2,t);
close(f1);
close(f2);
end.
- Yêu cầu: Cho một dãy số gồm N số nguyên dương. Hãy thực hiện các yêu cầu trên. Giả thiết dữ liệu được nhập đúng đắn, không cần kiểm tra
- Dữ liệu vào: Cho từ tệp văn bản có tên DAYSO.INP có dạng như sau:
+ Dòng 1: Ghi số nguyên dương N (1≤N≤100000)
+ Dòng 2: Ghi dãy N số nguyên dương a1, a2,..., an (1≤ai≤1000,i=1..n)
- Kết quả: Ghi ra tệp văn bản có tên DAYSO.OUT theo cấu trúc sau:
+ Dòng 1: In ra tổng các phần tử trong dãy số.
+ Dòng tiếp theo: In ra phần tử và số lần xuất hiện của nó
Câu trả lời của bạn
const fi='dayso.inp';
fo='dayso.out';
var f1,f2:text;
a,b:array[1..100000]of integer;
i,n,dem,j,kt,t,dem1:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
t:=0;
for i:=1 to n do
t:=t+a[i];
writeln(f2,'Tong cac phan tu trong day so la: ',t);
b[1]:=a[1];
dem:=1;
for i:=1 to n do
begin
kt:=0;
for j:=1 to dem do
if a[i]=b[j] then kt:=1;
if kt=0 then
begin
inc(dem);
b[dem]:=a[i];
end;
end;
for i:=1 to dem do
begin
dem1:=0;
for j:=1 to n do
if b[i]=a[j] then inc(dem1);
writeln(f2,b[i],' xuat hien ',dem1,' lan');
end;
close(f1);
close(f2);
end.
Câu trả lời của bạn
Dùng thủ tục Reset(<tên file>)
Câu trả lời của bạn
const fi='tong.inp';
fo='tong.out';
var f1,f2:text;
a:array[1..100]of integer;
n,i,t:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
t:=0;
for i:=1 to n do
t:=t+a[i];
writeln(f2,t);
close(f1);
close(f2);
end.
Câu trả lời của bạn
*Viết chương trình ghi hai số 5 và 15 vào tệp so.txt:
const f='so.txt';
var f1:text;
begin
assign(f1,f); rewrite(f1);
writeln(f1,'5 15');
close(f1);
end.
*Viết chương trình tính tổng, hiệu, tích, thương của x,y và in kết quả ra màn hình:
uses crt;
const fi='so.txt';
var x,y:integer;
f1:text;
begin
clrscr;
assign(f1,fi); reset(f1);
readln(f1,x,y);
writeln('Tong la: ',x+y);
writeln('Hieu la: ',x-y);
writeln('Tich la: ',x*y);
writeln('Thuong la: ',x/y:4:2);
close(f1);
readln;
end.
Câu trả lời của bạn
uses crt;
const fi='baitap.txt';
var f1:text;
a,b:integer;
begin
clrscr;
assign(f1,fi); reset(f1);
readln(f1,a,b);
writeln('Chu vi la: ',(a+b)*2);
writeln('Dien tich la: ',a*b);
close(f1);
readln;
end.
Câu trả lời của bạn
const fi='dulieu.txt';
fo='ketqua.txt';
var f1,f2:text;
a,b,c,d:array[1..100]of integer;
i,n,dem,dem1:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
n:=0;
while not eof(f1) do
begin
n:=n+1;
readln(f1,a[n],b[n]);
end;
dem:=0;
dem1:=0;
for i:=1 to n do
if a[i]>b[i] then
begin
inc(dem);
inc(dem1);
c[dem]:=a[i];
d[dem]:=b[i];
end
else begin
inc(dem);
inc(dem1);
c[dem]:=b[i];
d[dem]:=a[i];
end;
for i:=1 to dem do
write(f2,c[i]:4);
writeln(f2);
for i:=1 to dem1 do
write(f2,d[i]:4);
close(f1);
close(f2);
end.
Câu trả lời của bạn
const fi='dulieu.txt';
fo='ketqua.txt';
var f1,f2:text;
a:array[1..100]of integer;
i,n:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
n:=0;
while not eof(f1) do
begin
inc(n);
read(f1,a[n]);
end;
for i:=1 to n do
if a[i] mod 3=0 then write(f2,a[i]:4);
close(f1);
close(f2);
end.
Câu trả lời của bạn
const fi='songuyen.txt';
fo='kluan.txt';
var f1,f2:text;
n:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
if n mod 2=0 then writeln(f2,'La so chan')
else writeln(f2,'La so le');
close(f1);
close(f2);
end.
Câu trả lời của bạn
const fi='dulieu.dat';
fo='tb.dat';
var f1,f2:text;
a,b:real;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,a);
readln(f1,b);
writeln(f2,(a+b)/2:4:2);
close(f1);
close(f2);
end.
Câu trả lời của bạn
const fi='mang.txt';
fo='tong.txt';
var f1,f2:text;
a:array[1..100]of integer;
n,i,t:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewriteln(f2);
n:=0;
while not eof(f1) do
begin
inc(n);
read(f1,a[n]);
end;
t:=0;
for i:=1 to n do
t:=t+a[i];
writeln(f2,t);
close(f1);
close(f2);
end.
a) Tính tổng số thực trên mỗi dòng trong tệp input.txt
b) Tính trung bình cộng các số thực trên mỗi dòng trong tệp input.txt
Câu trả lời của bạn
uses crt;
const fi='input.txt';
var f1:text;
a,b,c:array[1..100]of real;
i,n:integer;
begin
clrscr;
assign(f1,fi); reset(f1);
n:=0;
while not eof(f1) do
begin
n:=n+1;
readln(f1,a[n],b[n],c[n]);
end;
for i:=1 to n do
writeln('Tong cua dong ',i,' la: ',a[i]+b[i]+c[i]:4:2);
for i:=1 to n do
writeln('Trung binh cong cua dong ',i,' la: ',(a[i]+b[i]+c[i])/3:4:2);
close(f1);
readln;
end.
Câu trả lời của bạn
uses crt;
const fi='dst.txt';
var f1:text;
a,b:integer;
begin
clrscr;
assign(f1,fi); reset(f1);
readln(f1,a);
readln(f1,b);
writeln('Tong cua hai so la: ',a+b);
writeln('Gia tri tuyet doi hieu hai so la: ',abs(a-b));
readln;
end.
- Yêu cầu: Cho một dãy số gồm N số nguyên dương. Hãy thực hiện các yêu cầu trên. Giả thiết dữ liệu được nhập đúng đắn, không cần kiểm tra
- Dữ liệu vào: Cho từ tệp văn bản có tên DAYSO.INP có dạng như sau:
+ Dòng đầu tiên: Ghi số nguyên dương N (1≤N≤100000)
+ Dòng thứ hai: Ghi dãy N số nguyên dương a 1 , a 2 ,..., a n (1≤a i ≤1000,i=1..n)
- Kết quả: Ghi ra tệp văn bản có tên DAYSO.OUT theo cấu trúc sau:
+ Dòng đầu tiên: In ra tổng các phần tử trong dãy số.
+ Dòng tiếp theo: In ra phần tử và số lần xuất hiện của nó.
Câu trả lời của bạn
const fi='dayso.inp';
fo='dayso.out';
var f1,f2:text;
a,b:array[1..100]of integer;
i,n,dem,j,t,kt,dem1:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
t:=0;
for i:=1 to n do
t:=t+a[i];
writeln(f2,'Tong cua day so la: ',t);
b[1]:=a[1];
dem:=1;
for i:=1 to n do
begin
kt:=0;
for j:=1 to dem do
if a[i]=b[j] then kt:=1;
if kt=0 then
begin
inc(dem);
b[dem]:=a[i];
end;
end;
for i:=1 to dem do
begin
dem1:=0;
for j:=1 to n do
if b[i]=a[j] then inc(dem1);
writeln(f2,b[i],' xuat hien ',dem1,' lan');
close(f1);
close(f2);
end.
Câu trả lời của bạn
const fi='input.txt';
fo='output.txt';
var f1,f2:text;
a,b:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,a,b);
writeln(f2,a+b);
close(f1);
close(f2);
end.
Câu trả lời của bạn
const fi='chia.inp';
fo='chia.out';
var f1,f2:text;
a:array[1..100]of integer;
i,n:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
n:=0;
while not eof(f1) do
begin
inc(n);
read(f1,a[n]);
end;
for i:=1 to n do
if a[i] mod 7=2 then write(f2,a[i]:4);
close(f1);
close(f2);
end.
Câu trả lời của bạn
function max(a,b,c:integer):integer;
begin
max:=a;
if max<b then max:=b;
if max<c then max:=c;
end;
0 Bình luận
Để lại bình luận
Địa chỉ email của hạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *