Sáng kiến kinh nghiệm tin học THPT xây dựng một số bài tập thực hành với tệp - Pdf 39

SÁNG KIẾN KINH NGHIỆM

ĐỀ TÀI:
"XÂY DỰNG MỘT SỐ BÀI TẬP THỰC HÀNH VỚI TỆP"

1


A .PHẦN MỞ ĐẦU
I. LÝ DO CHỌN ĐỀ TÀI
- Hiện nay trong phân phối chương trình Tin học THPT có sự thay đổi giảm tải đối
với việc học môn Tin học. Có những bài được lược bớt đi 1 phần, một mục hoặc có bài
học sinh không phải học mà chỉ đọc tham khảo thêm. Bên cạnh đó để đảm bảo đủ số tiết
học nên có những tiết được bổ sung như tiết bài tập hoặc bài tập thực hành, nhằm đảm
bảo cho học sinh nắm rõ hơn, vững hơn những phần lý thuyết đã được học. Tuy nhiên với
những tiết bài tập hoặc bài tập thực hành này sách giáo khoa, cũng như sách giáo viên
chưa có những hướng dẫn cụ thể để đạt được một cái chuẩn chung như những bài lý
thuyết. Thông thường giáo viên sẽ linh động dựa vào điều kiện cơ sở vật chất của nhà
trường, đặc biệt là tuỳ vào đối tượng học sinh của mình để cung cấp cho học sinh những
bài tập nhằm củng cố cho học sinh những kiến thức ở phần lý thuyết đã học.
- Tin học 11 là một modul chương trình tương đối khó trong hệ thống modul kiến
thức Tin học khối THPT. Ở đây học sinh được làm việc với ngôn ngữ lập trình và một
ngôn ngữ lập trình cụ thể, với thực tiễn cơ sở vật chất của trường THPT Đông Sơn 1
chúng tôi sử dụng ngôn ngữ lập trình Pascal để cùng làm việc với học sinh trong học
phần này.
Theo phân phối chương trình, ở chương 5: Tệp và thao tác với tệp của Tin học 11
có 2 tiết lý thuyết và 2 tiết bài tập thực hành. Phần lý thuyết, sách giáo khoa cung cấp đã
khá đầy đủ và dễ hiểu đối với học sinh. Tuy nhiên phần bài tập thực hành thì chưa có.
Với lý do trên tôi mạnh dạn đề xuất "Một số bài tập thực hành về cách làm việc
với tệp" cho 2 tiết 39, 40 nhằm giúp học sinh nắm vững hơn về cách làm việc với tệp.
Tuy giờ dạy đã dựa vào đối tượng học sinh, vào trọng tâm kiến thức chương trình,

1. CÁC THAO TÁC VỚI TỆP
* Khai báo tệp văn bản:
Tệp văn bản được khai báo trực tiếp trong phần khai báo biến:
Var <Bientep>:Text;
* Mở tệp để ghi dữ liệu:
Để mở một tệp chuẩn bị lưu trữ dữ liệu, ta sử dụng 2 thủ tục chuẩn sau đây:
ASSIGN(biến tệp, tên tệp);
REWRITE(biến tệp);
Trong đó:
Biến tệp: là tên biến tệp đã khai báo sau từ khóa VAR
Tên tệp: Là tên do ta chọn để ghi dữ liệu vào đĩa.
Ví dụ : ASSIGN(f, ‘a:\baitap.txt’);
REWRITE(f); {khởi tạo tệp rỗng}
Sau 2 thủ tục trên, để tiến hành ghi dữ liệu vào tệp ta dùng thủ tục WRITE(…),
hoặc WRITELN(…..):
Cách viết:
WRITE(biến tệp, các giá trị cần ghi vào tệp);
WRITELN(biến tệp, các giá trị cần ghi vào tệp);
* Mở tệp để đọc dữ liệu:
Để mở một tệp chuẩn bị lưu trữ dữ liệu, ta sử dụng 2 thủ tục chuẩn sau đây:
ASSIGN(biến tệp, tên tệp);
RESET(biến tệp);
Trong đó:
4


Biến tệp: là tên biến tệp đã khai báo sau từ khóa VAR
Tên tệp: Là tên do ta chọn để ghi dữ liệu vào đĩa.
Ví dụ :


Khi đó để giải 1 bài toán, người viết chương trình phải tương tác với 3 file:
File chương trình (nếu dùng Pascal thì có phần mở rộng là PAS)
File chứa dữ liệu vào (thường người ta để phần mở rộng là INP)
File chứa dữ liệu ra – ghi kết quả (thường người ta để phần mở rộng là OUT)
Quan hệ 3 file trong bài toán 1
BT01.PAS

BT01.INP

5

var
begin

end.

BT01.OUT

n,i:byte;
gt:longint;
f:text;

120

assign(f,'BT01.INP');
reset(f);
read(f,n);
close(f);
gt:=1;
for i:=2 to n do

Var f:text;
Ý nghĩa: khai báo biến f có kiểu file văn bản.
Đọc dữ liệu trong file:
Assign(<biến file>,<tên file>);reset(<biến file>);
Read(<biến file>,<danh sách biến>);
Hoặc Readln(<biến file>,<danh sách biến>);
Close(<biến file>);

{dòng 1} assign(f,'BT01.INP');reset(f);
{dòng 2} read(f,n);
{dòng 3} close(f);
Ý nghĩa:
Dòng 1: Mở file ‘BT01.INP’ để đọc nội dung
7


Dòng 2: Đọc 1 giá trị số nguyên trong file ‘BT01.INP’ gán cho biến n.
Dòng 3: Đóng file ‘BT01.INP’ để an toàn dữ liệu
Ghi kết quả vào file:
Assign(<biến file>,<tên file>);rewrite(<biến file>);
write(<biến file>,<danh sách biến hay kết quả>);
Hoặc writeln(<biến file>,);
Close(<biến file>);

{dòng 1} assign(f,'BT01.OUT');rewrite(f);
{dòng 2} writeln(f,gt);
{dòng 3} close(f);
Ý nghĩa:
Dòng 1: Mở file ‘BT01.OUT’ để ghi nội dung

hoặc

writeln(<biến file>,<danh sách biến hay kết quả>);

Trong thao tác với file giống như việc in kết quả ra màn hình (chỉ khác là thay vì ta thực
hiện in kết quả ra màn hình như thế nào thì sẽ ghi mọi thứ vào file như vậy).

Bài toán 2: Cho một số số nguyên dương n (n≤12).
Yêu cầu: hãy tính n! của mỗi số.
Dữ liệu vào từ file ‘BT02.INP’ chứa giá trị của một số số nguyên dương n.
Kết quả ghi vào file ‘BT02.OUT’ là kết quả của n!. Mỗi dòng trong file dữ liệu vào chứa một
giá trị của n và tương ứng với mỗi giá trị của n sẽ có một kết quả trong file dữ liệu ra.

Cũng giống như bài toán 1, nhưng mỗi dòng trong file dữ liệu vào chứa một giá trị của n
và tương ứng với mỗi giá trị của n sẽ có một kết quả trong file dữ liệu ra.
Bài giải tham khảo:
var

n,i:byte;
gt:longint;
f,g:text; {dùng 2 biến file f và g}
9


begin
assign(f,'BT02.INP');reset(f); {biến file f để làm file đọc dữ liệu}
assign(g,'BT02.OUT');rewrite(g); {biến file g làm file ghi dữ liệu}
while( not Eof(f)) do {đọc trong khi chưa kết thúc file}
begin
read(f,n); {hoặc readln(f,n) đều được}

for i:=1 to n do
read(f,a[i]);
close(f);
max:=a[1];
for i:=2 to n do
if max


Bài giải tham khảo:
var

a:array[1..100] of integer;
n,m,i,j:byte;
s:longint;
f,g:text;

begin
assign(f,'BT05.INP');reset(f);
assign(g,'BT05.OUT');rewrite(g);
for i:=1 to n do {đọc lần lượt n dòng tương ứng với n dãy số}
begin
m:=0; {m là số phần tử của dãy số}
while (not Eoln(f)) do {trong khi chưa kết thúc dòng}
begin
m:=m+1;
read(f,a[m]);
end;
readln(f); {Đưa đầu đọc xuống dòng tiếp theo để đọc dãy số mới}
s:=0;
for j:=1 to m do s:=s+a[j];
writeln(g,s);
end;
close(f);
close(g);
end.
Bài toán 6:



Bài toán 7: Cho một chuỗi ký tự.
Yêu cầu: hãy cho biết có bao nhiêu ký tự ‘a’.
Dữ liệu vào từ file ‘BT07.INP’ chứa chuỗi ký tự đã cho.
Kết quả ghi vào file ‘BT07.OUT’ ghi số lượng ký tự ‘a’ tìm được

Bài
giải
tham khảo:
var
ch:char;
i:byte;

dem:longint;
f:text;
begin
assign(f,'BT07.INP');reset(f);
dem:=0;
while (not Eoln(f)) do
begin
read(f,ch); {đọc từng ký tự thì dùng read}
if ch=’a’ then dem:=dem+1;
end;
close(f);
assign(f,'BT07.OUT');rewrite(f);
writeln(f,dem);
close(f);
end.
Bài toán 8:

for i:=2 to trunc(sqrt(x)) do
if (x mod i=0) then
begin
ngto:=false;
break; {thoát khỏi lặp for}
end;
if (ngto=true) then break; {thoát khỏi lặp
while not Eoln(f) trong tr. hợp có số nguyên tố}
end;
if (ngto=true) then writeln(g,1)
else writeln(g,0);
readln(f); {đưa đầu đọc xuống hàng tiếp theo}
end;
16


close(f);

close(g);

end.

Bài toán 9:
Cho hai số nguyên dương a và b.
Yêu cầu: Hãy tìm ước chung lớn nhất của hai số đó!
Dữ liệu vào từ file ‘BT09.INP’ gồm nhiều dòng, mỗi dòng chứa một cặp
giá trị của a và b (a, b≤109; hai số cách nhau một khoảng trắng).
Kết quả ghi vào file ‘BT09.OUT’ tương ứng với mỗi dòng trong file input
là một kết quả.
Ví dụ:



close(f);

close(g);

end.
Bài toán 10:
Cho số nguyên dương n.
Yêu cầu: Hãy đếm số lượng chữ số 0 tận cùng của n!
Dữ liệu vào từ file ‘BT10.INP’ gồm nhiều dòng, mỗi dòng chứa một giá trị
của n (n≤109).
Kết quả ghi vào file ‘BT10.OUT’ tương ứng với mỗi dòng trong file input
là một kết quả.
BT10.INP
BT10.OUT

Bài
giải
tham khảo:
var

n,dem:longint;

f,g:text;
begin
assign(f,‘BT10.INP’);reset(f);
assign(g,‘BT10.OUT’);rewrite(g);
while (not Eof(f)) do
begin

Bài 1

30

8

4

Bài 2

28

10

4

Bài 3

32

7

3

Bài 4

32

6



2

Bài 8

35

7

3

19


C. KẾT LUẬN VÀ ĐỀ XUẤT
I. KẾT LUẬN
Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây dựng các chương
trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học trong đó các nhà
lập trình chuyên nghiệp đóng vai trò không nhỏ mà hiện nay hầu hết các lĩnh vực trong
xã hội đã ứng dụng được tin học để giải quyết công viêc nhanh, hiệu quả và chính xác
hơn.
Hiện nay, ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến nhất trên
thế giới sử dụng trong lĩnh vực giảng dạy.
Đề tài này mang tính thực tiễn rất cao cụ thể là: trong tiết học bài tập các em học sinh đã
chủ động để tìm, nắm vững cách làm việc với tệp qua đó tiếp tục giải quyết được các bài
toán lập trình tiếp theo. Các em đã khá rõ ràng về sự độc lập dữ liệu, độc lập chương trình
(Code), độc lập kết quả.
Kết quả là có rất nhiều em đã dễ dàng vận dụng các thao tác với tệp để làm việc với tệp
để giải các bài toán tệp tiếp theo.
II. ĐỀ XUẤT


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status