Tải bản đầy đủ (.docx) (21 trang)

Một số dạng bài tập cơ bản rèn luyện kỹ năng lập trình với tệp vào giảng dạy chương v – tin học 11

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (577.83 KB, 21 trang )

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ

TRƯỜNG THPT LÊ VĂN HƯU

SÁNG KIẾN KINH NGHIỆM

MỘT SỐ DẠNG BÀI TẬP CƠ BẢN RÈN LUYỆN KỸ
NĂNG LẬP TRÌNH VỚI TỆP

Người thực hiện: Nguyễn Thị Trang
Chức vụ: Giáo viên
Đơn vị công tác: Trường THPT Lê Văn Hưu
SKKN thuộc mơn: Tin học

THANH HĨA NĂM 2021


MỤC LỤC


1. Mở đầu
1.1. Lí do chọn đề tài:
Tin học là một ngành khoa học có mục tiêu là phát triển và sử dụng máy
tính điện tử để nghiên cứu cấu trúc, tính chất của thơng tin, phương pháp thu
thập, lưu trữ, tìm kiếm, biến đổi, truyền thơng tin và ứng dụng vào các lĩnh vực
khác nhau của đời sống xã hội. Đối với các em học sinh, có thể nói đây là một
“hành trang” để giúp các em vững bước đi tới tương lai - tương lai của một thế
hệ công nghệ thông tin bùng nổ!
Trong việc giảng dạy cho học sinh, ngoài việc giúp học sinh lĩnh hội những
kiến thức cơ bản. Giáo viên cịn phải biết kích thích tính tích cực, sự sáng tạo
say mê học hỏi của học sinh trong việc học tập của các em. Bởi vì, việc học tập


tự giác, tích cực, chủ động và sáng tạo địi hỏi học sinh phải có ý thức về những
mục tiêu đặt ra và tạo được động lực bên trong thúc đẩy bản thân họ hoạt động
để đạt các mục tiêu đó.
Chương trình Tin học lớp 11 là một mơn học khó, kiến thức thì trải rộng,
địi hỏi các em phải biết vận dụng kiến thức của từng bài sắp xếp một cách
lơgíc để lập trình giải một bài tốn hồn chỉnh. Tuy nhiên trong thực tế rất ít
học sinh làm được điều đó. Hầu hết các em chưa viết cách vận dụng phù hợp
các câu lệnh, cú pháp để giải quyết các bài tập.
Ở chương V trong chương trình tin học 11, các em được tìm hiểu về kiểu dữ
liệu tệp – một kiểu dữ liệu phục vụ cho các bài tốn có khối lượng dữ liệu lớn
với yêu cầu cần được lưu trữ để xử lý nhiều. So với các kiểu dữ liệu đã học thì
thời lượng chương trình dành cho phần tệp khơng nhiều nhưng khi viết chương
trình lại có nhiều thao tác nên khiến cho các em cảm thấy phức tạp, khó hiểu,
mơ hồ, khó vận dụng vào bài tập dẫn đến mất hứng thú học tập.
Từ thực tiễn giảng dạy về kiểu dữ liệu tệp (file) với mong muốn học sinh sẽ
có thái độ u thích mơn học, chủ động, sáng tạo, tích cực trong việc tiếp thu
kiến thức, tự tin khi lập trình nên tơi mạnh dạn đưa ra sáng kiến “Một số dạng
bài tập cơ bản rèn luyện kỹ năng lập trình với tệp” vào giảng dạy “chương V
– Tin học 11”.
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, nhưng vẫn cịn mang tính chất cá nhân đề xuất, mong nhận được sự góp ý
của bạn đọc và đồng nghiệp để việc giảng dạy hồn thiện hơn.
1.2. Mục đích nghiên cứu:
Nhận thấy việc học sinh khi lập trình liên quan đến kiểu dữ liệu tệp cịn gặp
nhiều lúng túng, mơ hồ, khơng biết sử dụng câu lệnh, cú pháp như thế nào cho
phù hợp nên tôi đã sử dụng một số dạng bài tập cơ bản về tệp (thơng qua ngơn
ngữ lập trình Pascal) để giúp các em cùng nhau tìm hiểu trao đổi thảo luận qua
đó hiểu rõ bản chất và nắm vững cú pháp, ý nghĩa câu lệnh của các thao tác xử
lý tệp, cách làm việc với tệp từ đó “rèn luyên kỹ năng khi lập trình với tệp”.
Và từ những “kỹ năng” đó sẽ giúp các em u thích môn học, mạnh dạn hơn,

tự tin hơn khi tham gia xây dựng bài học, tạo nên sự sôi nổi, hưng phấn, hứng
3


thú trong lớp học, kích thích được tính tích cực, chủ động, sự tự tin của bản
thân; đồng thời hình thành ở các em kỹ năng phân tích, xử lý các vấn đề không
chỉ liên quan đến kiểu dữ liệu mà cịn cả trong tồn bộ q trình học lập trình.
1.3. Đối tượng nghiên cứu
Đề tài nghiên cứu về một số dạng bài tập cơ bản có sử dụng các thao tác
với tệp văn bản trong pascal của chương trình Tin học 11, áp dụng thực nghiệm
trên hai lớp 11B7 và 11B8 của trường THPT Lê Văn Hưu
1.4. Phương pháp nghiên cứu
Kết hợp nhiều phương pháp như:
- Phương pháp nghiên cứu lý luận: Trên cơ sở những kiến thức cơ bản bộ
môn Tin Học THPT, phương pháp dạy học và những quan điểm đường lối của
Đảng, các văn bản của Bộ giáo dục và Đào tạo về chuẩn kiến thức và phương
pháp dạy học tích cực.
- Phương pháp quan sát: Nhìn nhận lại thực trạng của cơng tác giảng dạy kết
hợp thực tiễn giáo dục bộ môn Tin Học và việc tiếp thu bài của học sinh của
trường THPT Lê Văn Hưu – Thanh Hóa trong năm học 2020 – 2021. Thơng
qua q trình giảng dạy và các bài kiểm tra, bản thân tơi đã tìm hiểu và tích
luỹ được.
- Phương pháp phân tích, so sánh.
- Phương pháp kiểm tra, đánh giá.
2. Nội dung sáng kiến kinh nghiệm
2.1. Cơ sở lí luận của sáng kiến kinh nghiệm
- Các kiểu dữ liệu như kiểu dữ liệu chuẩn, kiểu mảng, kiểu xâu là các kiểu
dữ liệu được lưu trữ ở bộ nhớ trong (RAM) sẽ bị mất đi khi tắt máy. Với một số
bài tốn có khối lượng dữ liệu lớn, có yêu cầu lưu trữ để xử lý nhiều lần thì cần
có kiểu dữ liệu tệp (file). Tệp là một kiểu dữ liệu có cấu trúc.

- Xét theo cách tổ chức dữ liệu, có thể phân loại tệp thành hai loại: Tệp văn
bản và tệp có cấu trúc (trong chương trình tin học 11 chỉ xét đến tệp văn bản).
- Tệp văn bản là tệp mà dữ liệu được ghi dưới dạng các kí tự theo mã
ASCII. Dữ liệu trong tệp văn bản được chia thành các dòng kết thúc bởi kí tự
xuống dịng hay kí tự kết thúc tệp.
- Để làm việc với tệp thì cần khai báo biến tệp. Các thao tác với tệp văn bản
bao gồm:
+ Gắn tên tệp
+ Mở tệp để đọc và mở tệp để ghi
+ Đọc dữ liệu từ tệp, ghi dữ liệu vào tệp
+ Đóng tệp
2. 2. Thực trạng của vấn đề trước khi áp dụng sáng kiến kinh nghiệm
- Tin học 11 là một mơn học khó
4


- Ý thức học tập cịn là học đối phó, sự quan tâm chủ động dành cho môn
học không nhiều nên nhiều em không nhớ kiến thức cũ để giải quyết các bài
tập.
- Mặt khác, dữ liệu kiểu tệp khác hoàn toàn với các kiểu dữ liệu các em đã
được học mà thời lượng ít, số lượng thao tác nhiều nên gây khó khăn cho các
em khi học và làm bài tập. Các em khơng hiểu rõ vai trị, bản chất, ý nghĩa của
từng câu lệnh khi thao tác với tệp, lúng túng, mơ hồ, nhầm lẫn trong việc xác
định các thao tác, các câu lệnh xử lý tệp nên không làm được bài tập dẫn đến
thái độ chán nản, không hứng thú với môn học.
Thực tế giảng dạy đặt ra vấn đề: làm thế nào để học sinh hiểu được vai trò,
bản chất, ý nghĩa của từng câu lệnh khi thao tác với tệp và có “kỹ năng” giải
quyết bài tập liên quan đến kiểu dữ liệu này. Thông qua “một số dạng bài tập
cơ bản” mà các em làm quen sẽ giúp bản thân ghi nhớ, hiểu rõ vai trò, bản chất,
ý nghĩa và cách làm việc với các câu lệnh thao tác xử lý tệp từ đó “rèn luyện

kỹ năng lập trình” vì vậy tơi đã mạnh dạn áp dụng sáng kiến kinh nghiệm
“Một số dạng bài tập cơ bản rèn luyện kỹ năng lập trình với tệp” vào giảng
dạy chương V – Tin học 11.
2.3. Giải pháp thực hiện
2.3.1. Phần lý thuyết
 Khai báo tệp văn bản:
Tệp văn bản được khai báo trực tiếp có dạng
VAR <tên biến tệp> : Text;
Trong đó:
- tên biến tệp: do người lập trình đặt theo quy tắc đặt tên của Pascal.
- text: kiểu dữ liệu tệp văn bản.
 Gắn tên tệp:
ASSIGN (<biến tệp> , <tên tệp>);
Trong đó:
Tên tệp: Là biến xâu hoặc hằng xâu; có thể chứa cả đường dẫn ổ đĩa, các
thư mục liên tiếp cách nhau bởi dấu đường dẫn (\), cuối cùng là tên tệp.
 Mở tệp:
Tệp có thể dùng để chứa kết quả ra hoặc dữ liệu vào nên ta có:
- Mở tệp để ghi: REWRITE (<biến tệp>);
- Mở tệp để đọc: RESET (<biến tệp>);
Lưu ý: - Trước khi mở tệp, biến tệp phải được gắn tên tệp bằng thủ tục
ASSIGN
- Khi sử dụng thủ tục REWRITE nếu trên ở đĩa chưa có tệp đó thì tệp sẽ
được tạo ra với nội dung rỗng; còn nếu tệp đó đã có thì tồn bộ nội dung cũ sẽ
bị xóa để chuẩn bị ghi dữ liệu mới.

5


- Khi sử dụng thủ tục RESET nếu trên ở đĩa chưa có tệp đó thì khi thực hiện

chương trình hệ thống sẽ báo lỗi.
 Đọc /ghi tệp văn bản
- Sau khi sử dụng thủ tục mở tệp để ghi, để tiến hành ghi dữ liệu vào tệp ta
dùng thủ tục WRITE(…), hoặc WRITELN(…..):
WRITE (<biến tệp> , <danh sách kết quả>);
WRITELN (<biến tệp>, <danh sách kết quả>);
Trong đó danh sách kết quả là các giá trị sẽ ghi vào tệp
- Sau khi sử dụng thủ tục mở tệp để đọc, để tiến hành đọc dữ liệu từ tệp ta
dùng thủ tục READ(…), hoặc READLN(…..). Cách viết:
READ(<biến tệp>, <danh sách biến>);
READLN(<biến tệp>, < danh sách biến>);
Trong đó, danh sách biến là một hoặc nhiều tên biến đơn, nếu nhiều biến thì
các biến phân cách nhau bởi dấu phẩy
 Đóng tệp:
CLOSE (<biến tệp>);
Thủ tục Close(<biến tệp>);chuyển nội dung trong bộ nhớ vào tệp trên đĩa,
đồng thời đóng tệp lại để giải phóng bộ nhớ dành cho biến tệp. Các tệp khi đã
mở mà khơng đóng lại thì sẽ mất các dữ liệu truy xuất trê biến tệp
 Một số hàm chuẩn thường dùng khi đọc/ ghi tệp:
- Hàm EOF (<biến tệp>) trả về giá trị bằng TRUE nếu con trỏ đang chỉ tới
cuối tệp.
Vị trí cuối tệp là vị trí ngay sau vị trí dữ liệu cuối cùng của tệp. Tại vị trí
cuối tệp là một kí tự điều khiển (có mã số 26)
Việc đọc một phần tử của tệp còn cần có có một điều kiện: phải thử xem tệp
đó có cịn phần tử hay khơng, tức là con trỏ chưa chỉ đến cuối tệp (eof). Hàm
chuẩn eof sẽ báo cho biết nếu con trỏ chỉ vào cuối tệp thì eof (<biến tệp>) =
True còn nếu con trỏ chỉ vào phần tử của tệp thì eof (<biến tệp>)= false. Do
vậy trước khi thực hiện một thao tác gì để đọc tệp và gán cho biến cần phải thử
xem tệp đó đã kết thúc chưa bằng câu lệnh:
IF NOT EOF (<biến tệp>) then read(<biến tệp>, <danh sách biến>);

Hoặc nếu muố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>, <danh sách biến>);
..................................................{các lệnh xử lý thao tác khác}
end;
- Hàm EOLN (<biến tệp>) trả về giá trị bằng TRUE nếu con trỏ đang chỉ tới
cuối dòng.
Nhận xét: Việc đọc / ghi tệp văn bản tương tự như việc đọc ghi từ bàn phím

6


 Sơ đồ mơ tả trình tự các thao tác với tệp:

2.3.2. Một số dạng bài tập rèn luyện kỹ năng lập trình.
2.3.2.1. Dạng bài tập rèn luyện kỹ năng nhận diện câu lệnh và ý nghĩa câu lệnh
thao tác với tệp.
Giúp học sinh nắm được cú pháp, cách viết và ý nghĩa của các câu lệnh gắn
với các thao tác xử lý tệp
Bài tập 1: Tìm các câu lệnh liên quan đến kiểu dữ liệu tệp trong chương
trình và cho biết ý nghĩa của chúng?
{Dòng 1}
Program
bai1;
{Dòng 2}
Var
f:text;
{Dòng 3}
x, y:integer;

{Dòng 4}
Begin
{Dòng 5}
Assign ( f, ‘tong.out’);
{Dòng 6}
Rewrite(f);
{Dòng 7}
Writeln(‘ nhap vao gia tri cua x, y’);
{Dòng 8}
Readln (x,y);
{Dòng 9}
Writeln(f, ‘x+y=’, x+y);
{Dòng 10}
Close(f);
{Dòng 11}
Readln;
{Dòng 12}
End.
 Học sinh dựa trên kiến thức đã học về tệp để tìm các câu lệnh liên quan
đến tệp và trình bày ý nghĩa của các câu lệnh đó.
- Giáo viên: nhận xét, bổ sung và hệ thống lại kiến thức
Các câu lệnh liên quan đến kiểu
Ý nghĩa của câu lệnh
dữ liệu tệp
{Dòng 2} Var f:text;
khai báo biến f có kiểu tệp văn bản.
{Dịng 5} Assign( f, ‘tong.out’);

Gắn tên tệp ‘tong.out’ cho biến tệp f
để biến f có thể tham chiếu đến tệp

7


‘tong.out’ trong bộ nhớ
{Dòng 6} Rewrite(f);
Mở file ‘tong.out’ để ghi dữ liệu
{Dòng 9}Writeln(f, ‘x+y=’, x+y); Ghi hằng xâu và giá trị tổng của x+y
vào file ‘tong.out’
{Dịng 10} Close(f);
Đóng file ‘tong.out’ để an tồn dữ
liệu.
Bài tập 2: Tìm các câu lệnh liên quan đến kiểu dữ liệu tệp trong chương
trình và cho biết ý nghĩa của chúng?
{Dòng 1} Program
doc_tep;
{Dòng 2} Var
f1:text;
{Dòng 3}
x,y:integer;
{Dòng 4} Begin
{Dòng 5}
y:=0;
{Dòng 6}
Assign ( f1, ‘so.inp’);
{Dòng 7}
Reset(f1);
{Dòng 8}
read(f1,x);
{Dòng 9}
y:= y+x;

{Dòng 10}
writeln(‘y= ’, y)
{Dòng 11}
Close(f1);
{Dòng 12} Readln;
{Dòng 13} End.
 Học sinh dựa trên kiến thức
về tệp để tìm các câu lệnh liên quan đến tệp và trình bày ý nghĩa của các
câu lệnh đó.
- Giáo viên: nhận xét, bổ sung và hệ thống lại kiến thức
Các câu lệnh liên quan đến kiểu
Ý nghĩa của câu lệnh
dữ liệu tệp
{Dòng 2} Var f1:text;
khai báo biến f1 có kiểu tệp văn bản.
{Dịng 6} Assign ( f1, ‘so.inp’); Gắn tên tệp ‘so.inp’ cho biến tệp f1 để
biến f1 có thể tham chiếu đến tệp
‘so.inp’ trong bộ nhớ
{Dòng 7} Reset(f1);
Mở file ‘so.inp’ đọc nội dung
{Dòng 8} read(f1,x);
Đọc 1 giá trị số nguyên trong file
‘so.inp’ cho biến x
{Dịng 11} Close(f1);
Đóng file ‘so.inp’ để an tồn dữ liệu.
Bài tập 3: Tìm các câu lệnh liên quan đến kiểu dữ liệu tệp trong chương
trình và cho biết ý nghĩa của chúng?
{Dòng 1} Program
doc_tep;
{Dòng 2} Var

f1:text;
{Dòng 3}
x, y:integer;
{Dòng 4} Begin
{Dòng 5}
y:=0;
{Dòng 7}
Assign ( f1, ‘so.inp’);
8


{Dòng 8}
Reset(f1);
{Dòng 9}
While not eof(f1) do
{Dòng 10}
Begin
{Dòng 11}
read(f1,x);
{Dòng 12}
y:= y+x;
{Dòng 13}
End;
{Dòng 14}
writeln(‘tong cac so trong tep so.inp là: ’, y);
{Dòng 15} Close(f1);
{Dòng 16} Readln;
{Dòng 17} End.
 Học sinh dựa trên hệ thống kiến thức các thao tác với tệp đã học để tìm
các câu lệnh liên quan đến tệp và trình bày ý nghĩa của các câu lệnh đó.

- Giáo viên: nhận xét, bổ sung và hệ thống lại kiến thức
Các câu lệnh liên quan đến kiểu
Ý nghĩa của câu lệnh
dữ liệu tệp
{Dịng 2} Var f1:text;
khai báo biến f1 có kiểu tệp văn bản.
{Dòng 7} Assign ( f1, ‘so.inp’); Gắn tên tệp ‘so.inp’ cho biến tệp f1 để
biến f1 có thể tham chiếu đến tệp
‘so.inp’ trong bộ nhớ
{Dòng 8} Reset(f1);
Mở file ‘so.inp’ đọc nội dung
{Dòng 9} While not eof(f1) do
{Dòng 11} read(f1,x);
{Dòng 15}

Close(f1);

Lặp lại việc kiểm tra xem con trỏ đã
chỉ tới cuối tệp chưa.
Đọc 1 giá trị số nguyên trong file
‘so.inp’ cho biến x.
Đóng file ‘so.inp’ để an tồn dữ liệu.

Lưu ý: Làm rõ điểm khác biệt giữa bài 2 và bài 3 bằng cách thực hiện
chương trình để học sinh quan sát kết quả từ đó hiểu về ý nghĩa và tác dụng của
câu lệnh “While not eof(f1) do”
2.3.2.2. Dạng bài tập rèn luyện kỹ năng xác định vị trí của các câu lệnh
Giúp học sinh nhận biết mối quan hệ giữa các thao tác xử lý tệp và từ đó
xác định vị trí của các câu lệnh cho phù hợp.
Bài tập 1: Điền vào chỗ trống trong chương trình sao cho phù hợp

Var
f : text ;
x, y : integer ;
TB: real;
Begin
......(1)............... (f, ‘SO.TXT ’) ;
........(2)...............(f) ;
While not ...(3)....... do
begin
Read (f, x, y) ;
TB := (x+y)/2;
end;
9


Writeln (‘TB= ’, TB) ;
.....(4).................... (f) ;
end.
 Học sinh vận dụng trên hệ thống kiến thức đã học để làm bài tập: Căn
cứ vào lệnh “Var f:text;” và “Read (f, x,y);”là câu lệnh khai báo biến tệp văn
bản và Read(f,x,y) là câu lệnh đọc dữ liệu từ tệp văn bản thì các vị trí cịn thiếu
sẽ là:
(1): assign
(2): reset
(3) : eof(f)
(4): close
Bài tập 2: Điền vào chỗ trống trong chương trình sao cho phù hợp
Var
i: integer;
f: ......(1).................;

begin
Assign(f, ‘A.txt’);
.....(2)....................(f);
i := 123456;
write (f, i);
.........(3)............... (f, -789);
...........(4)..................... (f);
end.
 Học sinh vận dụng trên hệ thống kiến thức đã học để làm bài tập: Căn
cứ vào lệnh ‘Assign(f, ‘A.txt’);’ là câu lệnh gắn tên tệp cho biến tệp văn bản và
write (f, i); là câu lệnh ghi dữ liệu từ tệp văn bản thì các vị trí cịn thiếu sẽ là:
(1): text
(2): Rewrite
(3) : write
(4): close
2.3.2.3. Dạng bài tập rèn luyện kỹ năng phát hiện và sửa lỗi
Giúp học sinh nhận biết, hiểu và ghi nhớ sâu hơn về cách viết các câu
lệnh, mối quan hệ giữa các câu lệnh, rèn luyện kỹ năng phán đốn các tình
huống và giải quyết các tình huống khi làm bài tập với tệp
Bài tập 1: Phát hiện và sửa các lỗi trong chương trình
{Dịng 1}
Var f:text;
{Dịng 2}
x:integer;
{Dịng 3}
begin
{Dòng 4}
assign(‘so.txt’, f);
{Dòng 5}
rewrite(f);

{Dòng 6}
while not eofdo
{Dòng 7}
begin
{Dòng 8}
read(x, f);
{Dòng 9}
write(x);
{Dòng 10}
end;
10


{Dòng 11}
cloes(f);
{Dòng 12}
end.
 Học sinh vận dụng trên hệ thống kiến thức đã học để làm bài tập:
{Dòng 4} lỗi  sửa: assign(f, ’ so.txt’);
{Dòng 5} lỗi  sửa: reset(f);
{Dòng 6} lỗi  sửa: while not eof (f) do;
{Dòng 8} lỗi  sửa: read(f, x);
Bài tập 2: Phát hiện và sửa các lỗi trong chương trình
{Dịng 1} Var text: f;
{Dịng 2}
x, y:integer;
{Dòng 3} begin
{Dòng 4}
assign(‘so.txt’, f);
{Dòng 5}

reset(f);
{Dòng 6}
write (‘nhap vao gia tri cua x va y ’)
{Dòng 7}
readln(x; y);
{Dòng 8}
write(f, x, y);
{Dòng 9}
close;
{Dòng 10}
readln;
{Dòng 11} end.
 Học sinh vận dụng trên hệ thống kiến thức đã học để làm bài tập:
{Dòng 1} lỗi  sửa: Var
f :text;
{Dòng 4} lỗi  sửa: assign(f, ’ so.txt’);
{Dòng 5} lỗi  sửa: rewrite(f);
{Dòng 9} lỗi  sửa: close(f);
2.3.3. Một số dạng bài tập vận dụng kỹ năng lập trình với tệp
Sau khi học sinh đã hiểu rõ bản chất, ý nghĩa của các thao tác với tệp,
được rèn luyện kỹ năng lập trình; giáo viên có thể đưa ra hệ thống các bài tập
yêu cầu học sinh vận dụng các kỹ năng đó dựa hệ thống kiến thức đã học để lập
trình giải quyết các bài toán.
2.3.3.1. Dạng bài tập ghi tệp
- GV phân nhóm và phát phiếu học tập
- Các nhóm học sinh thảo luận đưa ra câu trả lời
Bài tập 1: Viết chương trình nhập vào một dãy n số nguyên (n<100).
Ghi dãy số nguyên đó vào tệp văn bản BTAP1.DOC lưu trong ổ đĩa D:\. Các số
được ghi trên một dòng và giữa các số cách nhau một dấu cách.
Hoạt động của giáo viên

Hoạt động của học sinh
- Câu hỏi 1: Để giải quyết bài toán - Trả lời: Để giải quyết bài tốn này
này thì cần phải thực hiện những thao thì cần phải thực hiện những thao tác:
tác nào?
+ Nhập vào một dãy n số nguyên
(n<100)
+ Ghi dãy số nguyên đó vào tệp văn
bản BTAP1.DOC lưu trong ổ đĩa D:\
- Câu hỏi 2: Để nhập vào 1 dãy n số - Trả lời: Để nhập vào 1 dãy n số
11


nguyên (n<100) ta cần thực hiện
những thao tác nào?

- Gọi học sinh lên bảng viết đoạn
lệnh nhập vào dãy n số nguyên

- Câu hỏi 3: Nêu câu lệnh dùng để in
dãy n số ngun ra ngồi màn hình?
- Hỏi: Để ghi dãy n số đó vào tệp, câu
lệnh thay đổi thế nào?

nguyên (n<100) ta cần thực hiện
những thao tác:
+ Khai báo mảng một chiều để lưu
trữ dãy n số nguyên
+ Nhập giá trị cho n
+ Nhập giá trị cho các phần tử của
dãy

- học sinh lên bảng thực hiện yêu cầu:
+ Var a : array[1..100] of integer
+ write(‘nhap n = ’); readln(n);
+ for i := 1 to n do
begin
write(‘nhap phan tu thu’, i , ‘: ’);
readln(a[i]);
end;
- Trả lời: In dãy số đó ra màn hình.
for i := 1 to n do writeln(a[i], ‘ ’);
- Trả lời: Để ghi dãy n số đó vào tệp,
câu lệnh thay đổi:
for i := 1 to n do writeln(f, a[i], ‘ ’);

- Hỏi: Để ghi dãy số đó vào tệp
BTAP1.DOC trên ổ D:\ thì cần thực
hiện những thao tác nào?

- Trả lời:
+ Khai báo biến tệp
+ Gắn tên tệp: assign()
+ Mở tệp để ghi: rewrite()
+ Ghi dữ liệu vào tệp: write hơặc
writeln()
+ Đóng tệp: close()

- Gọi học sinh lên viết đoạn lệnh ghi
tệp {Thời gian học sinh lên làm bài
trên bảng giáo viên khởi động Pascal
nhập nhanh chương trình đó vào máy

tính}
- Cho các nhóm học sinh nhận xét và
bổ sung bài làm của bạn

- Học sinh lên bảng thực hiện yêu cầu
của GV

- Trước khi thực hiện chương trình giáo viên mở lại cây thư mục ổ D:\ cho học
sinh kiểm chứng và nhận xét xem trong thư mục ổ D:\ đã có file
‘BTAP1.DOC’ hay chưa?
 Học sinh khẳng định là chưa có file ‘BTAP1.DOC’

12


- Giáo viên nhận xét, sửa sai cho bài làm của học sinh sau đó tiến hành thực
hiện chương trình trên máy tính để học sinh kiểm chứng và quan sát kết quả.
Thơng qua chương trình nhắc lại một số lỗi thường gặp khi thực hành.

- Giáo viên mở lại cây thư mục ổ D:\ cho học sinh kiểm chứng và quan sát kết
quả.
 Học sinh sẽ thấy trong ổ đĩa D có tập tin Word là BTAP1.DOC. Mở tập tin
BTAP1.DOC đó ra, các em sẽ thấy kết quả của chương trình là dãy số vừa
nhập khi thực hiện chương trình trên pascal đã được chuyển vào lưu vào trong
file ‘BTAP1.DOC’

13


- GV có thể chạy lại chương trình lần 2 và thay đổi nhập các số khác, khi xem

lại tập tin BTAP1.DOC học sinh sẽ thấy dữ liệu thay đổi theo, từ đó giúp học
sinh hiểu rõ hơn việc cập nhật thông tin (khi ta sửa thông tin, máy sẽ thay đổi
dữ liệu lưu trữ trong bộ nhớ).
Bài tập mở rộng:
Giáo viên có thể mở rộng thêm yêu cầu bài tập cho học sinh làm ví dụ
như:“Viết chương trình nhập vào một dãy n số nguyên (N<100). Ghi các số
chẵn trong dãy số nguyên đó vào tệp văn bản BTAP2.DOC lưu trong ổ đĩa
D:\.”
GV gợi ý:
- Với bài tập này, ta sử dụng thêm câu lệnh if . . . then... để kiểm tra và
lấy số chẵn ghi vào tệp.
- Sửa lại chương trình trên và thực hiện chương trình cho học sinh kiểm
tra kết quả.
2.3.3.2. Dạng bài tập đọc tệp
Bài tập 2: Viết chương trình mở tệp văn bản BTAP1.DOC lưu trong ổ đĩa
D:\ đọc các số trong tệp đó. In dãy số đó ra màn hình. Tính và in ra màn hình
tổng của dãy số đó.
Hoạt động của giáo viên
Hoạt động của học sinh
- Hỏi: Để giải quyết bài tốn này thì - Trả lời: Cần thực hiện các thao tác:
cần phải thực hiện những thao tác nào? + Đọc tệp
+ In dãy số đó ra màn hình
+ Tính và in ra màn hình tổng của
dãy số đó
- Hỏi: Để đọc tệp ta cần quy trình các - Trả lời:
thao tác nào?
+ Khai báo biến tệp
+ Gắn tên tệp: assign()
+ Mở tệp để đọc: reset()
+ Đọc dữ liệu từ tệp: sử dụng read()

hơặc readln()
+ Đóng tệp: Close()


14


- Hỏi: Hãy nêu thuật toán để giải bài
tập 2

- Thuật toán:
B1: Gán tổng bằng 0
B2: Gắn tên tệp
B3: Mở tệp ‘BTAP1.DOC’ để đọc
B4:
B4.1: Đọc các số từ tệp
BTAP1.DOC
B4.2: In các số đó ra màn hình.
B4.3: Tính tổng các số đó.
B5: In tổng các số đó ra màn hình.
B6: Đóng tệp, kết thúc
- Yêu cầu học sinh viết các câu lệnh - Hs thực hiện yêu cầu
tương ứng với bước B1, B2, B3.
- Hỏi: Sau khi mở tệp chúng ta có thể - Trả lời: Khơng thể trong một lần
đọc cả dãy số trong một lần đọc được đọc cả dãy số vì khơng xác định được
khơng? Vì sao?
dãy trong tệp có bao nhiêu số.
-Vì chúng ta chưa biết trong tệp văn
bản đó có bao nhiêu số nên chúng ta
khơng thể đọc cả dãy số trong một lần

mà mỗi lần chúng ta chỉ đọc một số.
Chưa biết trong tệp, dãy có bao nhiêu
số mà mỗi lần chỉ đọc một số nên để
đọc hết các số ta sử dụng câu lệnh
WHILE – DO (cấu trúc lặp với số lần
chưa biết trước). Vậy chúng ta thực
hiện lặp đọc số đến khi nào thì dừng?
- Hỏi: Làm sao biết được đã đọc hết
các số trong tệp?
- Hỏi: Làm thế nào để biết con trỏ đã
chỉ tới cuối tệp chưa?
- Hàm EOF(<biến tệp>) trả về giá trị
true nếu con trỏ đang chỉ tới cuối tệp
Có nghĩa là nó sẽ trả về giá trị False
(sai) nếu con trỏ chỉ ở nơi nào
đó giữa tệp.
Vậy phủ định của EOF(<biến tệp>) là
gì?
- Hỏi: vậy Hàm NOT EOF (tệp>) trả về giá trị False có ý nghĩa
như thế nào?

- Trả lời: Cho đến khi đã đọc hết các
số trong tệp.
- Trả lời: Khi vị trí con trỏ chỉ đến
cuối tệp.
- Sử dụng hàm EOF(<biến tệp>).
Hàm EOF(<biến tệp>) trả về giá trị
true nếu con trỏ đang chỉ tới cuối tệp


- Trả lời: NOT EOF(<biến tệp>)
- Vậy NOT EOF (<biến tệp>) trả về
giá trị False có ý nghĩa nếu con trỏ
chỉ tới cuối tệp
15


- Giảng: Hàm NOT EOF (<biến tệp>)
trả về giá trị False (sai) nếu con trỏ chỉ
tới cuối tệp. Có nghĩa là nhận giá trị
True (đúng) nếu con trỏ chỉ ở nơi nào
đó giữa tệp. Vậy B4 sẽ là:
B4:
while not NOT EOF (<biến tệp>) do
begin
B4.1: Đọc các số từ tệp BTAP1.DOC
B4.2: In các số đó ra màn hình.
B4.3: Tính tổng các số đó.
end;
- Vậy giả sử chúng ta sử dụng biến tệp
f; biến x lưu giá trị số trong tệp và s
lưu giá trị tổng thì bước 4, các câu
lệnh trong Pascal thể hiện thế nào?
 Giáo viên nhận xét, bổ sung bài làm - Các nhóm thảo luận và cử 1 thành
viên trình bày trên bảng
của học sinh.
- Gọi học sinh lên viết “Câu lệnh thể :
- Học sinh lên bảng viết:
hiện B5 và B6”?
B5: writeln(‘tong la : ’ , s);

- Hỏi: Hãy khai báo các biến sử dụng
trong chương trình?
- Dựa trên các bước đã phân tích, hãy
viết thành chương trình hồn chỉnh để
giải quyết bài tập 2. {Giáo viên soạn
nhanh chương trình trên máy tính}
 Sau khi nhận xét, sửa sai cho học
sinh giáo viên tiến hành chạy chương
trình đó cho học sinh kiểm chứng lại
chương trình và kết quả của chương
trình.

B6: close(f);
- Học sinh thực hiện yêu cầu
- Học sinh thực hiện yêu cầu

16


GV chạy lại chương trình bài tập 1 (ghi tệp) nhập vào dãy số bất kỳ
khác (dặn học sinh ghi nhớ các số mới nhập). Chạy lại chương trình bài tập 2
(đọc tệp) cho học sinh nhận xét kiểm chứng kết quả
2.3.3.3.Dạng bài tập vận dụng kết hợp đọc tệp và ghi tệp
Dựa trên kiến thức đã học và kỹ năng lập trình, Giáo viên vận dụng kết
hợp đọc tệp và ghi tệp trong cùng một dạng bài tập và có mở rộng thêm hoặc
thay đổi một số yêu cầu.
Bài tập 3: Cho tệp ‘BTAP3.INP’ lưu trữ dãy số nguyên dương, các số
cách nhau một dấu cách. Hãy viết chương trình mở tệp ‘BT03.INP’ để đọc dãy
số, tính giai thừa của các số và ghi các giá trị giai thừa đó vào tệp
BTAP3.OUT.” Mỗi giá trị giai thừa được in trên một dòng.

Hoạt động của giáo viên
Hoạt động của học sinh
- Để giải quyết bài tốn này thì cần - Để giải quyết bài tốn này thì cần
phải thực hiện những thao tác nào?
phải thực hiện các thao tác:
+ Mở tệp ‘BTAP3.INP’ để đọc dữ liệu.
+ Tính giai thừa của số và ghi giá trị
giai thừa đó vào tệp ‘BTAP 3. OUT’
- Thuật toán
B1: Gắn tên tệp
B2: - Mở tệp ‘BTAP3.INP’ để đọc
- Hãy nêu thuật toán để giải quyết bài
- Mở tệp ‘BTAP3.OUT’ để ghi
toán trên?
B3:
B3.1: Đọc các số từ tệp ‘BTAP3.INP’
B3.2. Tính giai thừa.
B3.3: Ghi các giá trị giai thừa đó vào
tệp ‘BT03.OUT’.
B4: Đóng tệp, kết thúc
- Học sinh tư duy, vận dụng kiến thức


17


đã học để viết chương trình
- Học sinh suy nghĩ và làm bài tập
- Giảng: Các thao tác của quá trình
đọc dữ liệu từ tệp và ghi dữ liệu vào

tệp ta làm tương tự như bài tập 1 và 2
ở trên. Vấn đề đặt ra bây giờ là tính
giai thừa của số. Hãy nêu cách tính
giai thừa?
- Giáo viên gợi ý để học sinh nhớ lại
cách tính giai thừa của một số đồng
thời hướng dẫn học sinh vận dụng
kiến thức về đọc dữ liệu từ tệp và ghi
dữ liệu vào tệp để viết chương trình.
Chương trình:
VAR
x, i:byte;
gt: longint;
f, g : text;
BEGIN
Assing (f, ‘BTAP3.INP’); Reset (f);
Assing (g, ‘BTAP3.OUT’); Rewrite (g);
While NOT EOF (f) do
Begin
Read(f, x);
gt:=1;
for i := 1 to n do gt:= gt*i;
writeln (g, gt);
end;
close (f);
close(g);
END.
- Giáo viên nhận xét, thực hiện chương trình trên máy tính
- Vì file 'BTAP3.INP' chưa tồn tại nên máy tính sẽ báo lỗi do đó giáo viên
chỉ ra lỗi và hướng dẫn học sinh cách tạo tệp 'BT02.INP'.

2.4. Hiệu quả của sáng kiến kinh nghiệm
Sau một thời gian áp dụng phương pháp trên ở nhóm 2 lớp học sinh có
học lực mơn tương đương nhau, gồm:
- Nhóm 1: Học sinh các lớp 11B7
- Nhóm 2: Học sinh các lớp 11B8
Kết quả thu được cụ thể như sau:
Thông qua việc kiểm tra bài cũ, kiểm tra 15’ kết quả thu được là
+ Nhóm 1: (Có áp dụng sáng kiến kinh nghiệm) có trên 80% hồn thành
được những yêu cầu giáo viên đưa ra và sôi nổi hơn trong các giờ học tiếp theo.
18


+ Nhóm 2: (khơng áp dụng sáng kiến kinh nghiệm – nhóm đối chứng),
chỉ có gần 60% học sinh hồn thành được yêu cầu kiểm tra kiến thức của giáo
viên.
Từ kết quả thu được rõ ràng như vậy, nên việc áp dụng sử dụng phương
pháp những kết quả rõ rệt. Thể hiện ở bảng kết quả học tập của học sinh như
sau:
Bảng kết quả kiểm tra tại các lớp sau khi thực nghiệm
Lớp Sĩ
Hs có
Hs có
Hs có
Hs có
số
điểm 9 - 10
điểm 7 - 8
điểm 5 - 6
điểm <5
SL Tỉ lê

SL Tỉ lê
SL Tỉ lê
SL Tỉ lê
11B7 39
12 30.8%
22 56.4% 5
12.8%
0
0%
11B8 42
4
9.5%
18 42.8% 16 38.1%
5
9.6%
Từ kết quả trên, tôi nhận thấy:
Đối với giáo viên: Công việc giảng dạy trở nên nhẹ nhàng, thoải mái hơn,
việc xử lý các tình huống trong dạy học trở nên linh hoạt giao tiếp trong tiết học
giữa thầy và trị cũng trở khơng căng thẳng.
Đối với học sinh: các em cũng thấy giờ học nhẹ nhàng hơn, có hứng thú,
hưng phấn hơn sơi nổi trong tiết học do vậy mà việc tiếp thu kiến thức có hiệu
quả hơn và đặc biệt giờ thực hành sau đó có hiệu quả rõ rệt.
Tuy nhiên, do chọn các dạng bài tập đơn giản nên chỉ truyền đạt đến học
sinh những vấn đề cơ bản trong lập trình như: nhập/ xuất dữ liệu, lưu dữ liệu,
thực hiện các phép toán tính tổng (hiệu) các số đơn giản thơi. Khơng thể nâng
cao kiến thức giúp các em viết các chương trình tính tốn các vấn đề khó như
u cầu trong sách giáo khoa đã đưa ra.
3. Kết luận và kiến nghị
3.1. 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 chun 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. Nhưng học lập trình lại
khơng dễ do tính phức tạp và địi hỏi tư duy logic, tính chuyên cần.
Dạy Tin học đã khó - Dạy thế nào để học sinh có thể mau chóng nắm bắt
kiến thức và vận dụng hành thạo kiến thức vào các bải tập thực hành lại càng đòi
hỏi người giáo viên phải có nhiều cố gắng, có phương pháp dạy học sáng tạo có
thể đáp ứng ngày càng cao yêu cầu của môn học.
Trên đây là một sáng kiến nhỏ với mong muốn được chia sẻ cùng với các
đồng nghiệp. Do là ý kiến của bản thân và kinh nghiệm chưa nhiều chắc rằng
khơng tránh khỏi thiếu sót, kính mong được sự đóng góp ý kiến của q thầy
cơ, và bạn bè đồng nghiệp để bản thân tơi nói riêng và giáo viên tin học nói

19


chung có thể có những cách dạy hay và phù hợp với đặc trưng bộ môn, với mỗi
bài học và đối tượng học sinh.
3.2. Kiến nghị
Trên cơ sở vật chất hiện có của Nhà trường đối với bộ mơn tin học, việc
việc dạy và học của thầy và trò còn gặp rất nhiều khó khăn, như: thiết bị khơng
đồng bộ, số lượng máy chưa đáp ứng được nhu cầu hiện nay, phòng thực hành
đang còn là dạng phòng học cải tạo nên không đảm bảo cả về tiêu chuẩn và chất
lượng.
Vì vậy, để có thể nâng cao chất lượng hơn nữa, rất mong Nhà trường cũng
như sở, ngành có kết hoạch đầu tư về cơ sở vật chất cũng như, tạo điều kiện
quan tâm đối với đội ngũ giáo viên tin học và đặc biệt xây dựng được một đội
ngũ quản trị các phòng máy tại các Nhà trường.
Xin chân thành cảm ơn!

XÁC NHẬN
CỦA THỦ TRƯỞNG ĐƠN VỊ

Thanh Hóa, ngày15 tháng 5 năm 2021
Tôi xin cam đoan đây là SKKN của mình viết,
khơng sao chép nội dung của người khác.

Người viết

Nguyễn Thị Trang

20


Tài liệu tham khảo
[1]. Sách giáo khoa tin học 11 - Hồ Sĩ Đàm Chủ biên
[2]. Sách giáo viên tin học 11 - Hồ Sĩ Đàm Chủ biên
[3]. Sách bài tập tin học 11 - Hồ Sĩ Đàm Chủ biên
[4]. Chuẩn kiến thức, kỹ năng môn tin học THPT - Quách Tất Kiên - Chủ biên
[5]. Bài tập lập trình cơ sở ngôn ngữ Pascal – Nguyễn Hữu Ngự - NXB Đại
học Quốc gia Hà Nôi
[6]. Bài giảng ngôn ngữ Lập trình pascal – Nguyễn Thanh Tiên – Nguyễn Hải
Lộc
[7]. Bài tập nggon ngữ lập trình Pascal với Turbo Pascal – Quách Tuấn Ngọc

21




×