Viết chương trình về tệp

baochau1112

Cựu Phụ trách nhóm Văn | CN CLB Khu vườn ngôn từ
Thành viên
6 Tháng bảy 2015
6,549
13,985
1,304
Quảng Nam
Vi vu tứ phương
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

1/ Tệp "so.txt" chứa dãy số thực. Hãy tính tổng dãy số đó và ghi kết quả vào tệp trong txt.
2/ Tệp "dulieu.txt" chứa dãy số nguyên. Kiểm tra và ghi vào tệp "sochan.txt" các số chẵn trong dãy đồng thời thông báo ra màn hình bao nhiêu số chẵn.
P/s: Mấy bài này trên lớp mk học lâu rồi ... Nhưng vì một số việc riêng, nên mk ko học phần này :( Sắp kiểm tra rồi, mọi người giúp mk với ^^ ... Mk thực sự ko hiểu chi hết T^T
 

Nguyễn Thánh Tiền

Mr Favoirite 2012
Thành viên
2 Tháng mười 2010
1,931
782
324
Hà Nội
cO VUA
1khai báo

var f:text;
2 đọc file
assign(f,'data.inp'); reset(f);
while not eof(f) do
begin
// đọc từ file vào biến s
read(f,s);
end;
3 ghi file

assign(f,'data.out'); rewrite(f);
// vi du minh sẽ viết ra file "abc"
writeln(f,'abc');
close(f);
 
  • Like
Reactions: baochau1112

huutoan00

Học sinh tiến bộ
Thành viên
19 Tháng hai 2012
181
67
181
24
Your UnderWorld
www.facebook.com
đầu tiên là phần khai báo nhé: thường thì ngta sẽ sử dụng kiểu text(dạng văn bản) cho file để ra đề, khai báo thẳng luôn(ko phải qua type):
Mã:
var f : text;

tiếp theo là lệnh assign (đăng kí), dùng để đăng kí biến file với tên của file
Mã:
assign(f,'so.txt');
như trên thì biến f đã được ghép với file tên 'so.txt'

sau assign thì ta có thể làm 2 việc: đọc từ file hoặc viết ra file
- reset(f); sẽ mở file f ra và cho phép chúng ta đọc từ f
lúc này trong f sẽ có 1 con trỏ, nó sẽ chỉ dần vào các phần tử trong f, bắt đầu từ vị trí đầu tiên.
việc của mình chỉ cần đọc như bình thường thôi, giống như nhập từ bàn phím ý, chỉ có điều là nếu có xuống dòng thì dùng readln(f,biến);, không xuống dòng thì dùng read(f,biến);.(Nên c phải biết được khi nào cần xuống dòng).
Mã:
read(f,a);
readln(f,b);

-rewrite(f); sẽ xóa toàn bộ dữ liệu file f và cho ta viết vào f (nếu trên ổ ko có file f thì nó sẽ tự tạo)
Tương tự như read:
Mã:
write(f,'      ');
writeln(f,'       ');

*Nhớ là phải có f ở đầu mỗi phần*
*với những cái tên khác nhau thì phải đăng kí(assign) khác nhau*

Sau khhi làm việc xong với các tệp đó rồi thì phải close(f); để đóng và lưu lại(nếu ko đóng thì tệp viết ra sẽ ko lưu đâu)
*sau khi close 1 biến f rồi thì có thể assign cho nó với tên tệp khác và dùng với mục đích khác
 
  • Like
Reactions: baochau1112

baochau1112

Cựu Phụ trách nhóm Văn | CN CLB Khu vườn ngôn từ
Thành viên
6 Tháng bảy 2015
6,549
13,985
1,304
Quảng Nam
Vi vu tứ phương
đầu tiên là phần khai báo nhé: thường thì ngta sẽ sử dụng kiểu text(dạng văn bản) cho file để ra đề, khai báo thẳng luôn(ko phải qua type):
Mã:
var f : text;

tiếp theo là lệnh assign (đăng kí), dùng để đăng kí biến file với tên của file
Mã:
assign(f,'so.txt');
như trên thì biến f đã được ghép với file tên 'so.txt'

sau assign thì ta có thể làm 2 việc: đọc từ file hoặc viết ra file
- reset(f); sẽ mở file f ra và cho phép chúng ta đọc từ f
lúc này trong f sẽ có 1 con trỏ, nó sẽ chỉ dần vào các phần tử trong f, bắt đầu từ vị trí đầu tiên.
việc của mình chỉ cần đọc như bình thường thôi, giống như nhập từ bàn phím ý, chỉ có điều là nếu có xuống dòng thì dùng readln(f,biến);, không xuống dòng thì dùng read(f,biến);.(Nên c phải biết được khi nào cần xuống dòng).
Mã:
read(f,a);
readln(f,b);

-rewrite(f); sẽ xóa toàn bộ dữ liệu file f và cho ta viết vào f (nếu trên ổ ko có file f thì nó sẽ tự tạo)
Tương tự như read:
Mã:
write(f,'      ');
writeln(f,'       ');

*Nhớ là phải có f ở đầu mỗi phần*
*với những cái tên khác nhau thì phải đăng kí(assign) khác nhau*

Sau khhi làm việc xong với các tệp đó rồi thì phải close(f); để đóng và lưu lại(nếu ko đóng thì tệp viết ra sẽ ko lưu đâu)
*sau khi close 1 biến f rồi thì có thể assign cho nó với tên tệp khác và dùng với mục đích khác
Hơ ... mk ko hiểu ... cậu nói mâu thuẫn quá @@
Đầu tiên là dùng Var để khai báo, sau đó thì dùng assign để đăng kí tên tệp, tiếp đó là dùng reset để mở tệp. Mở tệp thì phải nhập dữ liệu vào chứ? Chứ sao lại dùng rewrite để xóa hết dữ liệu, xóa rồi thì làm sao mà ...
Với lại mấy đứa bạn mk bảo là dùng while eof gì gì đó là sao cậu?@@
 

Nguyễn Thánh Tiền

Mr Favoirite 2012
Thành viên
2 Tháng mười 2010
1,931
782
324
Hà Nội
cO VUA
đầu tiên là phần khai báo nhé: thường thì ngta sẽ sử dụng kiểu text(dạng văn bản) cho file để ra đề, khai báo thẳng luôn(ko phải qua type):
Mã:
var f : text;

tiếp theo là lệnh assign (đăng kí), dùng để đăng kí biến file với tên của file
Mã:
assign(f,'so.txt');
như trên thì biến f đã được ghép với file tên 'so.txt'

sau assign thì ta có thể làm 2 việc: đọc từ file hoặc viết ra file
- reset(f); sẽ mở file f ra và cho phép chúng ta đọc từ f
lúc này trong f sẽ có 1 con trỏ, nó sẽ chỉ dần vào các phần tử trong f, bắt đầu từ vị trí đầu tiên.
việc của mình chỉ cần đọc như bình thường thôi, giống như nhập từ bàn phím ý, chỉ có điều là nếu có xuống dòng thì dùng readln(f,biến);, không xuống dòng thì dùng read(f,biến);.(Nên c phải biết được khi nào cần xuống dòng).
Mã:
read(f,a);
readln(f,b);

-rewrite(f); sẽ xóa toàn bộ dữ liệu file f và cho ta viết vào f (nếu trên ổ ko có file f thì nó sẽ tự tạo)
Tương tự như read:
Mã:
write(f,'      ');
writeln(f,'       ');

*Nhớ là phải có f ở đầu mỗi phần*
*với những cái tên khác nhau thì phải đăng kí(assign) khác nhau*

Sau khhi làm việc xong với các tệp đó rồi thì phải close(f); để đóng và lưu lại(nếu ko đóng thì tệp viết ra sẽ ko lưu đâu)
*sau khi close 1 biến f rồi thì có thể assign cho nó với tên tệp khác và dùng với mục đích khác
mở ra đọc thì cần gì đóng lại hihi
 
  • Like
Reactions: baochau1112

Nguyễn Thánh Tiền

Mr Favoirite 2012
Thành viên
2 Tháng mười 2010
1,931
782
324
Hà Nội
cO VUA
while eof(f) do

begin

end;

khi chưa hết tệp thì làm

ví dụ

var ff:text;/// khai báo tệp
k: integer;
begin
assign (ff,"tep.txt");// gán têp tep.txt vào ff
reset (ff); // để đọc
while eof(ff) do
begin
read(ff, k); // đọc từ file vafon biến
write(" ",k); in ra man hình
end;
close(ff);
end.

Anh code có thể sai về ngôn ngữ nhé
 
Last edited:
  • Like
Reactions: baochau1112

baochau1112

Cựu Phụ trách nhóm Văn | CN CLB Khu vườn ngôn từ
Thành viên
6 Tháng bảy 2015
6,549
13,985
1,304
Quảng Nam
Vi vu tứ phương
mở ra đọc thì cần gì đóng lại hihi
Ủa ko đóng lại thì sao mà lưu hay kết thúc chương trình ạ???
while eof(f) do

begin

end;

khi chưa hết tệp thì làm

ví dụ

var ff:text;/// khai báo tệp
k: integer;
begin
assign (ff,"tep.txt");// gán têp tep.txt vào ff
reset (ff); // để đọc
while eof(ff) do
begin
read(ff, k); // đọc từ file vafon biến
write("%d",k); in ra man hình
end;
close(ff);
end.
Biến k dùng để làm gì vậy ạ?
Sao lại có dấu % ở đó ạ?? E nghe mấy đứa bảo là viết chương trình ko đc dùng % mà @@
 

Nguyễn Thánh Tiền

Mr Favoirite 2012
Thành viên
2 Tháng mười 2010
1,931
782
324
Hà Nội
cO VUA
Sao lại có dấu % ở đó ạ?? E nghe mấy đứa bảo là viết chương trình ko đc dùng % mà @@

nhầm ngôn ngữ Anh chuyên c ++ !!!

Biến k dùng để làm gì vậy ạ?

biến k kiểu integer dùng để đọc từ file ra

ví dụ trong file có các số

2 7 4 14

đầu tiên kiểm tra chưa hết tệp

đọc số 2 vào biến k rồi in ra màn hình

Sau đó kiểm tra thấy vẫn chưa hết tệp

đọc đến số 7

Ủa ko đóng lại thì sao mà lưu hay kết thúc chương trình ạ???

mở ra để đọc thì đóng mần chi lưu hay không vẫn rứa
 
  • Like
Reactions: baochau1112

baochau1112

Cựu Phụ trách nhóm Văn | CN CLB Khu vườn ngôn từ
Thành viên
6 Tháng bảy 2015
6,549
13,985
1,304
Quảng Nam
Vi vu tứ phương
nhầm ngôn ngữ Anh chuyên c ++ !!!



biến k kiểu integer dùng để đọc từ file ra

ví dụ trong file có các số

2 7 4 14

đầu tiên kiểm tra chưa hết tệp

đọc số 2 vào biến k rồi in ra màn hình

Sau đó kiểm tra thấy vẫn chưa hết tệp

đọc đến số 7



mở ra để đọc thì đóng mần chi lưu hay không vẫn rứa
Sao e ko hiểu chi hết vậy?? :(
Anh viết mẫu bài 2 cho e với ạ ... để e thử tương tự làm bài 1 được ko ... :D
 

Nguyễn Thánh Tiền

Mr Favoirite 2012
Thành viên
2 Tháng mười 2010
1,931
782
324
Hà Nội
cO VUA
Sao e ko hiểu chi hết vậy?? :(
Anh viết mẫu bài 2 cho e với ạ ... để e thử tương tự làm bài 1 được ko ... :D
var fi,fo:text;
k,i: integer;
begin
assign (fi,"dulieu.txt");
reset (fi);
assign (fo,"sochan.txt");
rewrite(fo);
while eof(fi) do
begin
read(fi, k);
if k mod 2=0 then
begin
write(fo," ",k);
i:=i+1;
end;
end;close(fo);
write(i);
end.
 
  • Like
Reactions: baochau1112

huutoan00

Học sinh tiến bộ
Thành viên
19 Tháng hai 2012
181
67
181
24
Your UnderWorld
www.facebook.com
Hơ ... mk ko hiểu ... cậu nói mâu thuẫn quá @@
Đầu tiên là dùng Var để khai báo, sau đó thì dùng assign để đăng kí tên tệp, tiếp đó là dùng reset để mở tệp. Mở tệp thì phải nhập dữ liệu vào chứ? Chứ sao lại dùng rewrite để xóa hết dữ liệu, xóa rồi thì làm sao mà ...
Với lại mấy đứa bạn mk bảo là dùng while eof gì gì đó là sao cậu?@@
var chỉ dùng để khai báo biến, còn assign là để đăng kí biến đấy với tên tệp cần sử dụng

reset để mở tệp => nó được dùng khi đọc tệp cũ để lấy dữ liệu
rewrite để tạo mới tệp => được dùng khi viết tệp mới

eof là viết tắt của EndOfFile đấy, có nghĩa là khi con trỏ trong file đi qua vị trí cuối cùng của file f thì eof(f) sẽ là true
 
  • Like
Reactions: baochau1112

huutoan00

Học sinh tiến bộ
Thành viên
19 Tháng hai 2012
181
67
181
24
Your UnderWorld
www.facebook.com
1/ Tệp "so.txt" chứa dãy số thực. Hãy tính tổng dãy số đó và ghi kết quả vào tệp trong txt.
2/ Tệp "dulieu.txt" chứa dãy số nguyên. Kiểm tra và ghi vào tệp "sochan.txt" các số chẵn trong dãy đồng thời thông báo ra màn hình bao nhiêu số chẵn.

1/
khai báo:
Mã:
var f:text;
ở đây ta cần 2 file khác nhau(file 'so.txt' và file ghi ra) nhưng chỉ cần khai báo 1 biến f,
vì cậu có thể đọc xong file 'so.txt', đóng file đó lại và mở file mới ra để ghi vào

mở file "so.txt" để đọc dữ liệu từ file:
Mã:
assign(f,'so.txt');             {ghép biến f với file tên 'so.txt'}
reset(f);                           {xác định file f là dùng để đọc}
while not eof(f) do           {khi nào còn "không phải" eof(f) đúng thì làm}
begin
read(f,k);                         {đọc từ vị trí con trỏ trong f lưu vào biến k}
{thay vào biến k có thể là biến kiểu khác, vd a[i], biến string,... cho phù hợp với bài}
{cũng có thể là readln(f,k); nếu cần đọc xong xuống dòng}
......                                  {xử lí dữ liệu nếu muốn(cần)}
end;
close(f);                        {đóng tệp 'so.txt' và lưu lại, đồng thời tách biến f ra khỏi tệp 'so.txt'}

sau khi xử lí xong các dữ liệu cần thiết thì viết nó ra tệp theo yêu cầu đề:
Mã:
assign(f,'tên là gì đấy thì hình như đề cậu viết thiếu');
rewrite(f);                {tạo mới 1 tệp với tên trên}
write(f,s);                  {hoặc writeln(f,s); nếu cần}
close(f);
 
  • Like
Reactions: baochau1112

baochau1112

Cựu Phụ trách nhóm Văn | CN CLB Khu vườn ngôn từ
Thành viên
6 Tháng bảy 2015
6,549
13,985
1,304
Quảng Nam
Vi vu tứ phương
1/
khai báo:
Mã:
var f:text;
ở đây ta cần 2 file khác nhau(file 'so.txt' và file ghi ra) nhưng chỉ cần khai báo 1 biến f,
vì cậu có thể đọc xong file 'so.txt', đóng file đó lại và mở file mới ra để ghi vào

mở file "so.txt" để đọc dữ liệu từ file:
Mã:
assign(f,'so.txt');             {ghép biến f với file tên 'so.txt'}
reset(f);                           {xác định file f là dùng để đọc}
while not eof(f) do           {khi nào còn "không phải" eof(f) đúng thì làm}
begin
read(f,k);                         {đọc từ vị trí con trỏ trong f lưu vào biến k}
{thay vào biến k có thể là biến kiểu khác, vd a[i], biến string,... cho phù hợp với bài}
{cũng có thể là readln(f,k); nếu cần đọc xong xuống dòng}
......                                  {xử lí dữ liệu nếu muốn(cần)}
end;
close(f);                        {đóng tệp 'so.txt' và lưu lại, đồng thời tách biến f ra khỏi tệp 'so.txt'}

sau khi xử lí xong các dữ liệu cần thiết thì viết nó ra tệp theo yêu cầu đề:
Mã:
assign(f,'tên là gì đấy thì hình như đề cậu viết thiếu');
rewrite(f);                {tạo mới 1 tệp với tên trên}
write(f,s);                  {hoặc writeln(f,s); nếu cần}
close(f);
Ok, mk đã hiểu bài 1 .... mk làm thử bài 2, cậu check hộ mk nhé ^^

Program sochan;
Var f,g: text;
a,t: integer;
Begin
t:=0
Assign (f, ' dulieu.txt');
reset (f);
Assign (g, 'sochan.txt')
Rewrite (g);
While (not) eof (f) do [ Mk vẫn chưa rõ ở đây ..... nhất thiết là lúc nào mk cũng để not ko cậu]
Begin
read (f,a);
If a mod 2 = 0 then
Begin t:=t+1;
write (g);
end;
end;
write ('co' , t, ' sochan');
close (f);
close (g);
readln;
End.
 

huutoan00

Học sinh tiến bộ
Thành viên
19 Tháng hai 2012
181
67
181
24
Your UnderWorld
www.facebook.com
While (not) eof (f) do [ Mk vẫn chưa rõ ở đây ..... nhất thiết là lúc nào mk cũng để not ko cậu]
đây là 1 biểu thức logic nhé: not là "không phải"; eof(f) là "cuối file f" => not eof(f) là "không phải cuối file f"

chỗ này hình như có nhầm lẫn phải ko?
write(g,a, sau đó phải cách ra nữa để phân biệt các số với nhau);
hoặc viết mỗi số trên 1 dòng thì dùng writeln(g,a);
 
  • Like
Reactions: baochau1112

baochau1112

Cựu Phụ trách nhóm Văn | CN CLB Khu vườn ngôn từ
Thành viên
6 Tháng bảy 2015
6,549
13,985
1,304
Quảng Nam
Vi vu tứ phương
đây là 1 biểu thức logic nhé: not là "không phải"; eof(f) là "cuối file f" => not eof(f) là "không phải cuối file f"


chỗ này hình như có nhầm lẫn phải ko?
write(g,a, sau đó phải cách ra nữa để phân biệt các số với nhau);
hoặc viết mỗi số trên 1 dòng thì dùng writeln(g,a);
Uhm ... uhm ... Mk nghĩ mk hiểu được chút chút :D Để mk làm thêm dạng này rồi nhờ cậu giúp tiếp nhé :D
 
  • Like
Reactions: huutoan00

Nguyễn Thánh Tiền

Mr Favoirite 2012
Thành viên
2 Tháng mười 2010
1,931
782
324
Hà Nội
cO VUA
các em thông cảm cho anh nhé Anh giờ không code đc pascal chỉ có thể giúp đỡ các em vể thuật toán thôi

nếu các em nhờ code C thì chắc là đc :)

Thân
 
  • Like
Reactions: baochau1112

thanhba123

Học sinh mới
Thành viên
28 Tháng năm 2017
3
0
1
38
Các bạn giúp mình bài này nhé
Screenshot29.png
 
Top Bottom