hƯỚng dẪn thỰc hÀnh kiỂu tỆp trÊn pascal dÀnh cho...

44
SỞ GIÁO DỤC – ĐÀO TẠO SÓC TRĂNG TRƯỜNG THPT NGÃ NĂM SÁNG KIẾN KINH NGHIỆM HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO HỌC SINH LỚP 11 HUỲNH THỊ HẢO ` Tháng 3 năm 2017

Upload: others

Post on 29-Aug-2019

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

SỞ GIÁO DỤC – ĐÀO TẠO SÓC TRĂNG

TRƯỜNG THPT NGÃ NĂM

SÁNG KIẾN KINH NGHIỆM

HƯỚNG DẪN THỰC HÀNH KIỂU TỆP

TRÊN PASCAL DÀNH CHO HỌC SINH

LỚP 11

HUỲNH THỊ HẢO `

Tháng 3 năm 2017

Page 2: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

2

MỤC LỤC

Phần 1. MỞ ĐẦU..........................................................................................................3

1.1. Lí do chọn đề tài ..................................................................................................3

1.2. Mục đích và nhiệm vụ nghiên cứu .....................................................................4

1.3. Đối tượng và phạm vi nghiên cứu ......................................................................4

1.4. Phương pháp nghiên cứu.....................................................................................4

1.5. Tính mới của đề tài ..............................................................................................5

Phần 2: NỘI DUNG .....................................................................................................7

2.1. Cơ sở lí luận .........................................................................................................7

2.1.1. Pascal và kiểu tệp văn bản............................................................................7

2.1.2. Thao tác với tệp.............................................................................................7

2.2. Thực trạng vấn đề nghiên cứu ..........................................................................12

2.3. Biện pháp tiến hành ...........................................................................................13

2.3.1. Ghi dữ liệu vào tệp......................................................................................13

2.3.2. Đọc dữ liệu từ tệp........................................................................................18

2.3.3. Bài tập vận dụng: ........................................................................................24

2.4. Thực nghiệm và kết quả thực hiện ...................................................................27

Phần 3: KẾT LUẬN ...................................................................................................31

3.1. Kết luận chung ...................................................................................................31

3.2. Đề xuất, kiến nghị..............................................................................................31

TÀI LIỆU THAM KHẢO .........................................................................................33

PHỤ LỤC 1. BÀI TẬP THỰC HÀNH ....................................................................34

PHỤ LỤC 2. BÀI KIỂM TRA ĐÁNH GIÁ ...........................................................42

Page 3: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

3

Phần 1. MỞ ĐẦU

1.1. Lí do chọn đề tài

Pascal là một môn học không hề dễ đối với tất cả mọi người, không nhiều

học sinh yêu thích môn học này. Tuy nhiên với học sinh, việc học ngôn ngữ lập

trình Turbo Pascal là khởi đầu cho việc tiếp cận ngôn ngữ lập trình bậc cao, qua đó

giúp các em hình dung được sự ra đời, cấu tạo, hoạt đông cũng như ích lợi của các

chương trình hoạt động trong máy tính, các máy tự động… Qua đó các em có thêm

một định hướng, một niềm đam mê về tin học, về nghề nghiệp mà các em chọn sau

này.

Trong quá trình giảng dạy môn tin học 11 tôi đã rút ra nhiều bài học kinh

nghiệm cho bản thân qua từng tiết dạy và luôn mong muốn học sinh có thể vận

dụng hiệu quả máy tính để phục vụ cho việc tiếp thu kiến thức cho bản thân. Vì vậy

với điều kiện phòng máy nhà trường hiện có tôi đã luôn tạo điều kiện cho các em

học tập trực quan trên máy tính không chỉ các tiết thực hành mà còn cả đa số các

tiết lí thuyết. Tuy nhiên ở chương V. Tệp và thao tác với tệp, sẽ rất khó cho học

sinh trong việc tự mình thực hành được một bài tập về kiểu tệp nếu không có sự

hướng dẫn của giáo viên bởi sách giáo khoa chưa làm rõ nhiều vấn đề và cũng

không hướng dẫn học sinh thực hành. Bởi việc chạy được một chương trình có sử

dụng kiểu tệp phải đảm bảo nhiều yếu tố đi kèm. Không như các chương trình

không sử dụng kiểu tệp mà học sinh đã học trước đó thì chỉ cần gõ đầy đủ nội dung

một chương trình sách giáo khoa viết thì nó sẽ chạy được và thế là có thể xem kết

quả còn với kiểu tệp thì không. Để cho học sinh có thể hiểu được sâu sắc một số

vấn đề cơ bản khi làm việc với kiểu tệp và tạo hứng thú cho các em ở nội dung này

tôi đã tìm hiểu, xây dựng và áp dụng sáng kiến kinh nghiệm “Hướng dẫn thực hành

kiểu tệp trên Pascal dành cho học sinh lớp 11”.

Page 4: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

4

1.2. Mục đích và nhiệm vụ nghiên cứu

Mục đích của đề tài tôi muốn hướng đến là giúp học sinh có thể thực thực

hành một cách hiệu quả các bài tập cơ bản về kiểu tệp văn bản mà cụ thể là có thể

viết chương trình trên máy tính để ghi dữ liệu vào tệp, đọc dữ liệu từ tệp .

Nhiệm vụ của đề tài là hướng dẫn người học giải quyết được các vấn đề

xung quanh việc dùng Pascal để: Khởi tạo một tệp, ghi dữ liệu của các lần thực

hiện chương trình vào tệp, ghi thêm dữ liệu vào tệp đã có nội dung, đọc dữ liệu

kiểu xâu trên một dòng, đọc dữ liệu kiểu xâu của cả tệp, đọc dữ liệu kiểu số, đọc dữ

liệu từ tệp có nội dung là kiểu xâu và kiểu số,…

1.3. Đối tượng và phạm vi nghiên cứu

Đề tài nghiên cứu về các thao tác đọc/ghi kiểu tệp văn bản trong Pascal của

chương trình tin học 11. Bên cạnh tệp có cấu trúc thì việc giới thiệu cho các em

kiến thức về kiểu tệp văn bản đã làm cho việc dạy và học trở nên nhẹ nhàng hơn.

Cần nhấn mạnh là sách giáo khoa không hướng dẫn thực hành bài tập về

kiểu tệp nên gây rất nhiều khó khăn cho việc dạy và học về kiểu dữ liệu này. Vì thế

nhiệm vụ trọng tâm của đề tài là hướng dẫn các em đọc dữ liệu từ tệp đã có nội

dung và ghi dữ liệu vào tệp đồng thời hướng dẫn các em khởi tạo một tệp văn bản

bàng cách ghi trực tiếp trên phần mềm soạn thảo văn bản hay ghi bằng pascal.

1.4. Phương pháp nghiên cứu

- Phương pháp quan sát: là phương pháp thu thập thông tin về quá trình giáo

dục trên cơ sở tri giác trực tiếp các hoạt động sư phạm cho ta những tài liệu sống về

thực tiễn giáo dục để có thể khái quát nên những qui luật nhằm chỉ đạo tổ chức quá

trình giáo dục được tốt hơn. Phương tiện để quan sát chủ yếu là tri giác trực tiếp.

- Phương pháp điều tra: thể hiện qua việc tác động trực tiếp của người

nghiên cứu vào đối tượng nghiên cứu thông qua câu hỏi để có những thông tin cần

thiết cho công việc của mình.

- Phương pháp thực nghiệm sư phạm: là phương pháp thu nhận thông tin về

sự thay đổi số lượng, chất lượng trong nhận thức và hành vi của các đối tượng giáo

Page 5: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

5

dục do giáo viên tác động đến bằng một số câu hỏi và bài tập kiểm tra. Thực

nghiệm sư phạm là so sánh kết quả tác động của giáo viên lên một nhóm lớp - gọi

là nhóm thực nghiệm - với một nhóm lớp tương đương không được tác động

(dạy, giáo dục theo cách bình thường vẫn được giáo viên phổ thông sử dụng) - gọi

là nhóm đối chứng. Tuy nhiên vì trong năm học này tôi chỉ dạy Tin học 11 ở lớp

11T nên đây là nhóm đối chứng (khi chưa tác động) và vừa là nhóm thực nghiệm

(sau khi đã tác động).

- Phương pháp thống kê: sau khi thực nghiệm kết quả cần được xử lí bằng

toán học thống kê. Qua bảng thống kê sẽ phản ánh được một cách chi tiết kết quả

đạt được qua quá trình thực nghiệm. Từ đó người nghiên cứu có thể đánh được vấn

đề mình đang nghiên cứu và đưa ra phương pháp dạy học tốt hơn.

- Phương pháp so sánh: dùng để đối chiếu giữa các vấn đề nghiên cứu nhằm

làm bật lên tác dụng của cách thực hiện đối với từng vấn đề. Qua đó giúp người

học hiểu rõ hơn nội dung được lĩnh hội. Khi nghiên cứu đề tài này tôi đã trình bày

theo hình thức: chương trình trên Pascal, kết quả trên màn hình, nội dung trên tệp

được ghi hoặc đọc (tất cả đều được chụp từ màn hình nhằm mục đích giúp người

đọc dễ phân biệt và so sánh).

- Phương pháp phân tích: ở mỗi vấn đề được nghiên cứu tôi đã sử dụng

phương pháp phân tích để làm rõ nội dung. Phương pháp phân tích là đặc biệt quan

trọng và đó chính là chìa khóa để mở ra những kiến thức mới nhưng dễ tiếp thu

hơn.

1.5. Tính mới của đề tài

Đề tài nhằm hướng dẫn học sinh lớp thực hành các bài tập đơn giản về kiểu

tệp văn bản trên Pascal, giúp các em giải quyết được 2 thao tác cơ bản đối với tệp

là đọc và ghi tệp. Những điều này sách giáo khoa chỉ nói chung chung, chưa cụ thể

rõ ràng và cũng không hướng dẫn học sinh thực hành bài tập về kiểu tệp (cách khởi

tạo một tệp để đọc, ghi thêm dữ liệu vào tệp, ghi tất cả input và output của các lần

Page 6: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

6

thực hiện chương trình vào tệp, cách để kiểm tra kết quả đọc được từ tệp hay kiểm

tra kết quả ghi tệp,…). Những vấn đề trên sẽ được trình bày trong đề tài này.

Page 7: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

7

Phần 2: NỘI DUNG

2.1. Cơ sở lí luận

2.1.1. Pascal và kiểu tệp văn bản

Pascal do Niklaus Wirth phát triển dựa trên Algol năm 1970. Pascal là tên

nhà toán học và triết học người Pháp Blaise Pascal. Cho đến nay Pascal vẫn được

dùng để giảng dạy về lập trình trong nhiều trường trung học và đại học trên thế

giới. Đó là ngôn ngữ cho phép mô tả thuật toán thuận tiện.

Trong chương trình tin học 11 học sinh được làm quen với Pascal. Trong đó

kiểu tệp văn bản là một trong những nội dung được đề cập đế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. Trong tệp văn bản, dãy kí

tự được kết thúc bởi kí tự xuống dòng hay kí tự kết thúc tệp tạo thành một dòng.

Tất cả các dữ liệu thuộc các kiểu dữ liệu mà học sinh đã được học đều được lưu trữ

trên bộ nhớ trong (RAM) và do đó dữ liệu sẽ bị mất khi tắt máy. Với một số bài

toá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, cần có kiểu dữ

liệu tệp (file). Với lợi ích của kiểu tệp được đề cập ở trên thì việc sử dụng được

kiểu tệp một cách thành thạo trong quá trình lập trình là một điểu thật sự quan trọng

và cần thiết.

2.1.2. Thao tác với tệp

Qua quá trình tìm hiểu từ sách giáo khoa tin học 11, sách giáo viên tin học

11, quyển “Phương pháp giải các bài toán trong tin học” của thạc sĩ Trần Đức

Huyên tôi xin trình bày những kiến thức cơ bản về kiểu tệp văn bản để hỗ trợ cho

học sinh trong quá trình giải (thực hành) các bài toán đơn giản về kiểu dữ liệu này.

2.1.2.1. Khai báo kiểu tệp văn bản

Khai báo biến tệp để sau đó có thể thực hiện các thao tác với tệp thông qua

biến tệp.

Cú pháp khai báo: var <biến tệp>: text;

Ví dụ: var f: text;

Page 8: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

8

2.1.2.2. Gắn tên tệp

Trong lập trình ta không thao tác trực tiếp với tệp dữ liệu trên đĩa mà thông

qua biến tệp. Gắn tên tệp với biến tệp thực chất là tạo một tham chiếu giữa tệp trên

đĩa và biến tệp trong chương trình, làm cho biến tệp trở thành đại diện cho tệp.

Cú pháp: assign(<biến tệp>, <tên tệp>);

VD: assign(f, „E:\kieutep.doc‟);

Giáo viên cần phân tích cho học sinh thấy rõ sự cần thiết phải gắn tên tệp.

Trong cú pháp, tên tệp là hằng xâu kí tự hoặc giá trị của một biểu thức kiểu xâu kí

tự (để hệ điều hành có thể xác định được tệp). Tất cả các phép toán trên biến tệp sẽ

tác động tới tệp. Sau khi gọi thủ tục asign, sự liên kết giữa biến tệp và tệp chỉ kết

thúc khi có lời gọi asign khác thực hiện cũng trên biến tệp này (nghĩa là lúc đó biến

tệp được chuyển sang gắn cho một tên tệp khác). Tên tệp có thể là đường dẫn chứa

ổ đĩa, danh sách 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:

<ổ đĩa>:\<tên thư mục>\<tên thư mục>\...\<tên thư mục>\<tên tệp>

Độ dài lớn nhất của tên tệp là 79 kí tự. Đặc biệt khi tên tệp là xâu rỗng (độ

dài xâu bằng 0) thì biến tệp được gắn cho tên tệp vào/ra chuẩn. Các tệp vào ra

chuẩn được quy định tương ứng với thiết bị nào là tùy thuộc vào sự mở rộng của

mỗi chương trình dịch Pascal, nhưng thường quy định tệp input chuẩn là bàn phím,

tệp output chuẩn là màn hình.

2.1.2.3. Mở tệp để ghi

Trước khi ghi dữ liệu vào tệp ta phải dùng thủ tục mở tệp để ghi. Thủ tục này

được gọi sau khi đã gắn tên tệp. Cú pháp như sau:

rewrite(<biến tệp>);

Khi thực hiện thủ tục rewrite(<biến tệp>), nếu trên thư mục gốc của ổ đĩa

chưa có tệp cần ghi dữ liệu thì tệp sẽ được tạo với nội dung rỗng (tên tệp đã được

xác định trong thủ tục gắn tên tệp. Nếu đã có, thì nội dung cũ sẽ bị xóa để chuẩn bị

ghi dữ liệu mới vào.

Page 9: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

9

Ví dụ: assign(f,‟e:\tong2so.doc‟);

rewrite(f);

2.1.2.4. Ghi dữ liệu vào tệp

Việc ghi dữ liệu vào tệp giống như ghi dữ liệu ra màn hình. Câu lệnh dùng

thủ tục ghi có dạng:

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 đó, danh sách kết quả gồm một hoặc nhiều phần tử. Phần tử là biến

đơn hoặc biểu thức (số học, quan hệ hoặc lôgic) hoặc hằng xâu. Trường hợp có

nhiều phần tử thì các phần tử được ngăn cách bởi dấu phẩy. Khi hai kết quả liền

nhau cùng là kiểu số thì thì cần xen vào giữa hai kết quả này một kết quả trung gian

là hằng kí tự dấu cách. Ví dụ, write(f, x,„ „,y). Trong đó f là biến tệp, x và y là hai

biểu thức số. Trước khi gọi thủ tục này, tệp tương ứng với biến tệp phải là đang

mở. Thủ tục write sẽ ghi lần lượt các kết quả theo danh sách kết quả vào tệp kể từ

vị trí hiện thời của con trỏ tệp.

2.1.2.5. Ghi thêm dữ liệu vào tệp đã có nội dung

Đây là một nội dung mới không được đề cập trong chương trình sách giáo

khoa nhưng tôi nghĩ nó thật sự cần thiết trong nhiều tình huống cụ thể.

Để ghi thêm dữ liệu vào tệp đã có nội dung ta dùng thủ tục append có cú

pháp:

append(<biến tệp>);

Ví dụ: append(f);

Sau khi gọi thủ tục append thì tệp sẽ sẵn sàng để ghi dữ liệu mới vào.

Lưu ý: Trong cùng một chương trình nếu muốn ghi thêm dữ liệu thì không

thể đồng thời sử dụng thủ tục rewrite và append vì khi dùng rewite nội dung tệp sẽ

bị xóa (nếu tệp đã có nội dung). Vì vậy mục đích ghi thêm dữ liệu mới vào sẽ

không được thực hiện như ý muốn.

Page 10: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

10

2.1.2.6. Mở tệp để đọc

Câu lệnh sử dụng thủ tục reset mở tệp văn bản đã tồn tại để đọc dữ liệu.

Cú pháp: reset(<biến tệp>);

Ví dụ: reset(f);

Trong cú pháp, biến tệp phải đã được gắn với một tên tệp (dùng asign). Nếu

tệp này không tồn tại thì thực hiện reset sẽ gặp lỗi. Nếu tệp đã mở thì nó sẽ đóng lại

rồi sau đó mở lại. Vị trí con trỏ tệp sau lời gọi reset là đầu tệp.

2.1.2.7. Đọc dữ liệu từ tệp

Cú pháp đọc tệp văn bản:

Read(<biến tệp>, <danh sách biến>);

Hoặc

Readln(<biến tệp>, <danh sách biến>);

Ví dụ: read(f, x, y); hoặc readln(f, x, y);

Thủ tục read ghi xong con trỏ tệp không xuống dòng tiếp theo, thủ tục readln

ghi xong con trỏ tệp xuống đầu dòng tiếp theo.

Danh sách biến là một hoặc nhiều tên biến đơn. Trong trường hợp nhiều biến

thì các biến cách nhau bằng dấu phẩy.Các dữ liệu cần đọc trong tệp gán vào danh

sách biến phải lần lượt có kiểu tương ứng với kiểu của biến trong danh sách biến.

Nếu sai kiểu thì chương trình mắc lỗi. Lỗi này thường gặp khi biến có kiểu số, dữ

liệu đọc được lại là kiểu xâu.

Ví dụ: tệp docdulieu.txt chỉ có một dòng là tin hoc 11

Xét chương trình

Var f: text;

s: string[6];

x: longint;

begin

assign(f, ‘doc.txt’);

reset(f);

Page 11: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

11

read(f, s, x);

writeln(s);

writeln(x);

readln

end.

Chương trình mắc lỗi “Invalid numberic format” vì sau khi đọc được s = „tin

ho‟ , tiếp theo đọc dữ liệu cho x thì mắc lỗi thì mắc lỗi vì „c‟ không là dạng số. Nếu

thay lại khai báo s:string[7] hoặc string[8] thì chương trình không mắc lỗi khi thực

hiện đọc tệp, kết quả trên màn hình là

Với biến kiểu xâu, thủ tục read sẽ đọc các kí tự trên một dòng vào biến (loại

trừ các kí tự đánh dấu hết dòng hoặc hết tệp). Số kí tự đọc vào biến xâu bằng độ dài

đã khai báo của xâu.

Với biến kiểu nguyên hoặc thực, thủ tục read sẽ không đọc dấu cách, dấu tab

hoặc dấu xuống dòng đứng trước xâu chữ số. Nếu xâu chữ số không phù hợp với

kiểu của biến tương ứng thì xuất hiện lỗi vào/ra (I/O). Trong trường hợp ngược lại,

giá trị kiểu số tương ứng của xâu chữ số sẽ được gán cho biến. Lệnh read tiếp theo

sẽ sẽ được bắt đầu bằng dấu cách, dấu tab, hoặc kí tự hết dòng và chúng cũng lại

được bỏ qua. Những dấu này vạch định cho các xâu chữ số.

2.1.2.8. Đóng tệp

Cú pháp: close(<biến tệp>);

Trong cú pháp, biến tệp đã được gắn với một tệp đang mở bằng reset, rewrite

hoặc append ở thời điểm trước đó để mở tệp. Sau lệnh close, tệp gắn với biến tệp

được hoàn thành cập nhật và sau đó được đóng lại. Chương trình trả lại quyền quản

lí tệp cho hệ điều hành. Nếu thực hiện ghi dữ liệu vào tệp mà không đóng tệp thì

không có dữ liệu nào được ghi hoặc chỉ ghi được một phần vào tệp, nguyên nhân

Page 12: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

12

do các dữ liệu chứa trong bộ nhớ đệm chưa chuyển kịp vào đĩa thì chương trình đã

bị ngắt.

2.1.2.9. Một số hàm và thủ tục chuẩn thường dùng trong thao tác tệp

Hàm EOF: trả lại giá trị true nếu con trỏ tệp ở vị trí cuối tệp, ngược lại trả giá

trị false.

Hàm EOL: nếu con trỏ tệp ở vị trí cuối dòng thì trả về giá trị true, ngược lại

trả giá trị false.

Vì vậy nếu muốn đọc dữ liệu của cả một dòng hay của cả tệp ta sẽ cần dùng

đến một trong hai hàm này. Việc áp dụng sẽ được trình bày trong phần đọc dữ liệu

từ tệp trong đề tài này.

2.2. Thực trạng vấn đề nghiên cứu

Trường THPT Ngã Năm là một ngôi trường thuộc vùng nông thôn của tỉnh

Sóc Trăng, đa phần học sinh không có máy tính cá nhân để hỗ trợ cho việc học nên

học sinh chủ yếu thực hành tin học tại phòng máy của nhà trường. Điều này ít

nhiều ảnh hưởng đến khả năng tự rèn luyện cũng như kiến thức về tin học của các

em. Bên cạnh đó đối với học sinh 11 việc học Pascal là một nỗi “nhọc nhằn” với đa

số học sinh của trường. Trong quá trình giảng dạy tại trường qua các năm tôi nhận

thấy chỉ có rất ít học sinh thích và học được Pascal.

Qua khảo sát các lớp tôi đã từng dạy qua nội dung mà đề tài đang nghiên cứu

thì có đa số học sinh không biết viết một chương trình đơn giản để ghi dữ liệu vào

một tệp và đọc dữ liệu từ tệp đó rồi ghi kết quả đọc được ra màn hình. Các em chỉ

biết cú pháp khai báo, gắn tên tệp, các thao tác với tệp cùng các ví dụ riêng lẻ mà

không hệ thống lại được thành một chương trình hoàn chỉnh được.

Nguyên nhân là do:

- Thời lượng phân phối chương trình không đủ để vừa cho học sinh học lý

thuyết và thực hành ngay sau đó;

Page 13: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

13

- Nội dung sách giáo khoa không có bài tập thực hành cho nội dung này

đồng thời cũng không nêu ra các yếu tố để một chương trình có sử dụng kiểu tệp

chạy được trên máy;

- Phần mở rộng của các tệp ghi trong sách giáo khoa xa lạ với học sinh. Do

đó, nếu chạy được chương trình thì không biết cách để kiểm tra kết quả;

- Thiếu kiến thức căn bản để viết một chương trình đơn giản;

- Không có niềm đam mê dành cho môn học.

2.3. Biện pháp tiến hành

Giáo viên giới thiệu các kiến thức cơ bản về kiểu tệp văn bản trong Pascal

(đã được trình bày ở phần cơ sở lí luận). Vì đây là bài học có nhiều nội dung mới

nên khó tránh khỏi việc học sinh không theo kịp bài do đó giáo viên phô tô cho mỗi

học sinh một bản.

Sau khi trình bày xong phần lý thuyết, giáo viên phát cho mỗi học sinh một

phiếu bài tập thực hành kiểu tệp văn bản (phụ lục 1). Vì học sinh chưa từng thực

hành một bài tập nào về kiểu dữ liệu này nên với từng ví dụ giáo viên nhắc lại kiến

thức và yêu cầu học sinh xem lại lý thuyết đồng thời đặt các câu hỏi gợi mở, các

câu hỏi yêu cầu học sinh so sánh các vấn đề mà dễ gây nhầm lẫn cho các em. Trong

quá trình thực hành giáo viên yêu cầu học sinh ghi vào phiếu bài tập mỗi khi hoàn

thành xong một bài. Cụ thể biện pháp tiến hành hướng dẫn thực hành các bài tập

như sau:

2.3.1. Ghi dữ liệu vào tệp

2.3.1.1. So sánh thủ tục ghi dữ liệu ra màn hình và thủ tục ghi tệp

Học sinh có thể dễ dàng trả lời thông qua việc so sánh cú pháp giữa 2 thủ

tục này. Giống nhau: đều dùng tên thủ tục là write hoặc writeln, các phần tử của

danh sách kết quả; khác nhau: thủ tục ghi tệp có thêm biến tệp.

Tuy nhiên giáo viên cần nhấn mạnh cho học sinh nội dung sau: nếu muốn

ghi dữ liệu vào tệp trên nhiều hàng thì cần dùng thủ tục writeln (ghi xong xuống

Page 14: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

14

dòng để chuẩn bị ghi tiếp dòng sau). Điều này tương tự như ghi dữ liệu ra màn

hình.

Để làm rõ những nội dung về gắn tên tệp, so sánh việc ghi dữ liệu ra màn

hình và ghi tệp tôi đã đưa ra vài tập ví dụ 1 như sau:

Ví dụ 1. Hãy viết chương trình trên Pascal tính tổng của 2 số (ghi kết quả

ra màn hình đồng thời ghi 2 số nhập từ bàn phím và tổng của chúng vào tệp

“e:\tong2so.doc”).

Giáo viên yêu cầu học sinh viết một chương trình nhập 2 số từ bàn phím,

tính tổng của chúng và xuất kết quả ra màn hình. Sau đó mới bổ sung vào các câu

lệnh để ghi giá trị của 2 biến đã nhập, kết quả tổng của chúng.

Sau đó, giáo viên cần mở tệp đã ghi xem nội dung cần ghi vào tệp có thực

sự được ghi vào tệp chưa (tệp ở đây là tong2so.doc) đồng thời yêu cầu các em so

sánh nội dung đã được ghi trên tệp này và nội dung được ghi ra màn hình.

Chương trình trên Pascal:

program tong2so;

uses crt;

var f:text;

x, a, b:integer;

begin

clrscr;

write('nhap 2 so: ');

readln(a, b);

x:=a+b;

writeln('tong cua 2 so da nhap: ',x);

assign(f,'e:\tong2so.doc');

rewrite(f);

writeln(f,'a= ',a,' b= ',b);

writeln(f,'tong cua 2 so da nhap: ',x);

Page 15: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

15

close(f);

readln

end.

Kết quả sau khi thực hiện chương trình

Nội dung được ghi vào tệp „e:\tong2so.doc‟

Như vậy, nếu muốn ghi nhiều dòng dữ liệu vào tệp thì cứ thêm thủ tục

Writeln(<biến tệp>,<danh sách kết quả>);

2.3.1.2. Ghi vào tệp tất cả dữ liệu của các lần thực hiện chương trình

GV đặt ra cho các em các vấn đề sau:

- Nội dung cần ghi của các lần thực hiện chương trình có lần lượt được ghi

vào tệp không? Tại sao?

- Làm thế nào để có thể ghi được tất cả các dữ liệu (kết quả thực hiện

chương trình) của các lần thực hiện chương trình?

Điều này trong sách giáo khoa hoàn toàn không đề cập tới nhưng nếu không

tìm ra lời giải đáp cho HS thì không thể làm cho học sinh hiểu rõ về ghi tệp được.

Do đó tôi nhận thấy giải quyết vấn đề này là thực sự cần thiết.

Câu hỏi thứ nhất học sinh có thể trả lời được như sau: tệp chỉ ghi kết quả

của lần thực hiện chương trình sau cùng. Vì sau mỗi lần thực hiện chương trình thủ

tục rewrite(f) lại được gọi, điều đó có nghĩa là nội dung đã ghi trên tệp sẽ được xóa

để sẵn sàng cho việc ghi dữ liệu mới.

Page 16: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

16

Câu hỏi thứ hai mới là một vấn đề quan trọng cần được làm rõ bởi ta dùng

kiểu tệp để lưu lại nội dung của các lần thực hiện chương trình để có thể sử dụng về

sau nhưng với kiến thức mà sác giáo khoa cung cấp không đủ để giải quyết vấn đề

này nên sẽ cần sự trợ giúp của giáo viên. Để có thể ghi thêm nội dung vào tệp ta sử

dụng thủ tục append(<biến tệp>). Thủ tục này sẽ thay thế cho thủ tục rewrite(<biến

tệp>) trong chương trình. Chú ý rằng thủ tục append(<biến tệp>) chỉ thay thế thủ

tục rewrite(<biến tệp>) khi ta đã thực hiện chương trình có rewrite(<biến tệp>) ít

nhất một lần để máy tính khởi tạo tệp cần ghi.

Ví dụ 2. Ghi tất cả dữ liệu của các lần thực hiện chương trình ở ví dụ 1 vào

tệp.

program tong2sonhapthem;

uses crt;

var f:text;

x, a, b:integer;

begin

clrscr;

write('nhap 2 so: ');

readln(a, b);

x:=a+b;

writeln('tong cua 2 so da nhap: ',x);

assign(f,'e:\tong2so.doc');

append(f);

writeln(f,'a= ',a,' b= ',b);

writeln;

writeln(f,'tong cua 2 so da nhap: ',x);

close(f);

readln

end.

Page 17: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

17

Kết quả thực hiện chương trình ở lần muốn ghi thêm dữ liệu:

Kết quả ghi tệp (sau 2 lần thực hiện chương trình):

Kể từ đây nếu muốn ghi thêm thì chỉ cần thực hiện chương trình thêm

một lần nữa. Với kiến thức vừa nêu chúng ta có thể ghi được input, outut của các

bài tập trước đây vào tập. Ví dụ như bài toán giải phương trình bậc nhất, bậc hai,…

2.3.1.3. Ghi thêm dữ liệu vào tệp đã được khởi tạo trước đó

Nếu ta đã khởi tạo một tệp trên đĩa và nhập nội dung trực tiếp từ chương

trình ứng dụng tạo tệp hoặc khởi tạo một tệp rỗng thì việc ghi thêm dữ liệu vào nó

sẽ được thực hiện như thế nào?

Câu trả lời là chỉ cần dùng thủ tục append sau thủ tục assign rồi dùng thủ

tục write(<biến tệp>, <danh sách kết quả>) để ghi dữ liệu vào tệp.

Ví dụ 3. Ghi thêm dữ liệu vào tệp, dữ liệu này độc lập với dữ liệu đã khởi

tạo trước đó.

Nội dung tệp đã được khởi tạo trước đó bằng cách nhập trực tiếp trên

Notepad (hoặc khởi tạo một tệp rỗng):

Page 18: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

18

Chương trình sử dụng thủ tục ghi thêm append(<biến tệp>):

Program nhap_them;

Uses crt;

Begin

Clrscr;

Assign(f,’e:\gv.txt’);

append(f);

writeln(f);

writeln(f,’to Toan - Tin’);

close(f);

readln

end.

Nội dung tệp đã được ghi thêm:

2.3.2. Đọc dữ liệu từ tệp

2.3.2.1. Đọc dữ liệu kiểu xâu trên một dòng vào một biến

Với biến xâu thủ tục read sẽ đọc các kí tự trên một dòng vào biến (loại trừ

các kí tự đánh dấu hết dòng hoặc hết tệp). Số kí tự đọc vào biến xâu tối đa bằng độ

dài đã khai báo của biến xâu.

Page 19: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

19

Ví dụ 4: Đọc dữ liệu từ tệp “e:\gv.txt” ở ví dụ 3.

Chương trình trên Pascal:

Program vd4;

Uses crt;

Var f:text;

str:string;

Begin

clrscr;

assign(f, ‘e:\gv.txt’);

reset(f);

readln(f,str);

writeln(str);

close(f);

readln

end.

Kết quả đọc được ghi ra màn hình:

Từ kết quả đọc được này ta nhận thấy chỉ đọc được dòng đầu tiên của tệp.

2.3.2.2. Đọc dữ liệu kiểu xâu của cả tệp

Ví dụ 5. Đọc toàn bộ dữ liệu của tệp “e:\gv.txt” ở ví dụ 3.

Chương trình trên Pascal:

program vd5;

uses crt;

var f:text; {khai bao bien tep f}

str:string; {khai bao bien xau str co do dai toi da 255 ki tu}

begin

Page 20: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

20

clrscr;

assign(f,'e:\gv.txt'); {gan ten tep}

reset(f); {mo tep de doc}

while not eof(f) do

begin

readln(f,str); {doc du lieu vao bien str}

writeln(str); {ghi ket qua doc duoc ra man hinh}

end;

close(f); {dong tep}

readln

end.

Kết quả đọc được và được xuất ra màn hình:

Ta so sánh kết quả này và nội dung đã ghi vào tệp ở ví dụ 3 là hoàn toàn phù

hợp. Về tác dụng của câu lệnh while – do được sử dụng ở chương trình trên: trong

khi con trỏ tệp chưa đến cuối tệp thì lần lượt từng hàng dữ liệu sẽ được đọc vào

biến str bằng câu lệnh readln(f, str) và kết quả đọc được lần lượt được ghi ra màn

hình từng hàng bằng câu lệnh write(str).

Nếu chương trình sau thay đổi theo 2 trường hợp này thì điều gì xảy ra?

Trường hợp 1.

Read(f, str); {doc du lieu vao bien str}

Writeln(str); {ghi ket qua ra man hinh}

Trường hợp 2.

Read(f,str); {doc du lieu vao bien str}

Page 21: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

21

Write(str); {ghi ket qua doc duoc ra man hinh}

GV cần yêu cầu học sinh lưu lại chương trình và sau đó thử sửa chương trình

theo 2 trường hợp trên, quan sát kết thực hiện và cho nhận xét.

Ở trường hợp 1. Máy đọc được dữ liệu nhưng không ghi được kết quả ra màn

hình. Ở trường hợp 2. Máy đọc được dữ liệu và ghi kết quả đọc được trên cùng một

hàng. Vì vậy để kết quả đọc được xuất hiện trên màn hình giống như hình thức

được ghi trong tệp thì cần viết câu lệnh như chương trình đã viết ban đầu (tức có

thêm kí tự ln).

2.3.2.3. Đọc dữ liệu kiểu số

Với biến kiểu nguyên hoặc thực, thủ tục read sẽ không đọc dấu cách, dấu tab

hoặc dấu xuống dòng đứng trước xâu chữ số. Nếu xâu chữ số không phù hợp với

kiểu của biến thì sẽ xuất hiện lỗi vào/ra (I/O). Trong trường hợp ngược lại, giá trị

kiểu số tương ứng của xâu chữ số sẽ được gán cho biến. Lệnh read tiếp theo sẽ

được bắt đầu bằng dấu cách, dấu tab hoặc kí tự hết dòng và chúng cũng lại được bỏ

qua. Những dấu này vạch định cho các xâu chữ số. Ví dụ sau sẽ làm rõ vấn đề này.

Ví dụ 6. Đọc xâu chữ số từ tệp vd6.txt có nội dung sau và ghi kết quả đọc

được ra màn hình:

Những cách có thể thực hiện:

Cách 1.

program vd6_1;

uses crt;

var f:text; {khai bao bien tep f}

x,y,z,t,v:integer;

Page 22: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

22

begin

clrscr;

assign(f,'e:\vd6.txt'); {gan ten tep}

reset(f); {mo tep de doc}

read(f, x,y,z,t,v); {lan luot doc du lieu vao cac bien}

write(x,y,z,t,v); {xuat ket qua doc duoc ra man hinh}

close(f); {dong tep}

readln

end.

Cách 2.

program vd6_2;

uses crt;

var f:text; {khai bao bien tep f}

x:integer; {khai bao bien x co kieu nguyen}

begin

clrscr;

assign(f,'e:\vd6.txt'); {gan ten tep}

reset(f); {mo tep de doc}

while not eof(f) do {trong khi con tro tep chua tro toi

cuoi tep thi lam cong viec sau}

begin

read(f,x); {doc du lieu vao bien x}

write(x); {ghi ket qua doc duoc ra man hinh}

end;

close(f); {dong tep}

readln

end.

Cách 3.

Page 23: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

23

program vd6_3;

uses crt;

var f:text; {khai bao bien tep f}

A:array[1..10] of integer;{khai bao bien A co kieu mang}

begin

clrscr;

assign(f,'e:\vd6.txt'); {gan ten tep}

reset(f); {mo tep de doc}

while not eof(f) do {trong khi con tro tep chua tro toi

cuoi tep thi lam cong viec sau}

begin

read(f,A[i]); {doc du lieu vao phan tu A[i]}

write(A[i]); {ghi ket qua doc duoc ra man hinh}

end;

close(f); {dong tep}

readln

end.

Cả 3 cách đều cho kết quả sau:

- So sánh tính khả thi của từng cách?

- Làm thế nào để xuất ra màn hình các chữ số cách nhau khoảng 1 kí tự?

Giải quyết vấn đề:

- So sánh:

+ Cách 1: Đơn giản, dễ hiểu nhưng nếu muốn đọc nhiều giá trị thì phải khai

báo nhiều biến.

Page 24: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

24

+ Cách 2: phức tạp hơn nếu chưa hiểu về hoạt động của câu lệnh while –

do. Tuy nhiên cách viết này giúp ta tránh được việc dùng và khai báo nhiều biến.

Ngoài ra còn có thể tránh được việc xác định số lượng biến cần đọc dữ liệu vào.

+ Cách 3: tương tự cách 2 chỉ khác là sử dụng giá trị đọc được ghi vào

mảng một chiều A.

- Muốn các chữ số khi xuất ra màn hình cách nhau một khoảng (một kí tự

dấu cách) ta thực hiện như sau:

+ Ở cách 1: write(x, „ „, y, „ „,z, „ „, t, „ „,v);

+ Ở cách 2: write(x, ‟ ‟); hoặc write(x,#32);

* Chú ý:

- Có thể dùng for – do thay cho while – do nếu biết số lượng các số cần

đọc. Tức thay vì ta dùng như ở cách 1 và 2 thì ta có thể dùng câu lệnh for – do và

kiểu mảng một chiều như sau:

for i:=1 to 5 do

begin

Read(f, A[i]);

Write(A[i],’ ‘);

end;

- Nếu muốn đọc dữ liệu từ một tệp và ghi dữ liệu vào tệp thứ hai thì ta

phải khai báo 2 biến tệp, dùng 2 thủ tục gắn tên tệp, một thủ tục mở tệp để ghi, một

thủ tục mở tệp để đọc, đóng 2 tệp sau khi đã làm việc xong.

- Thủ thục ghi dữ liệu ra màn hình chỉ khác thủ tục ghi tệp là thủ tục ghi

tệp có thêm biến tệp.

2.3.3. Bài tập vận dụng:

Sau đây là một số bài tập vận dụng các kiến thức về đọc và ghi dữ liệu để

giải quyết các bài toán đơn giản mà các em đã từng gặp qua chỉ khác là ở đây sử

dụng kiểu tệp văn bản. Các bài tập này sẽ giúp các em hiểu rõ hơn tác dụng của

Page 25: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

25

kiểu tệp trong Pascal và giúp các em rèn luyện kỹ năng để viết chương trình có sử

dụng cả việc đọc và ghi tệp.

Bài 1. Cho tệp mang.txt có nội dung là 4 số nguyên như sau:

1 3 2 1

Hãy viết chương trình đọc dữ liệu từ tệp này.

Tính tổng các giá trị đọc được.

Ghi giá trị đọc được từ tệp mang.txt và tổng này vào tệp tong.txt.

Chương trình giải bài toán trên Pascal như sau:

program vd6_3;

uses crt;

var f1,f2:text;

A:array[1..10] of integer;

Tong:integer; i:byte;

begin

clrscr;

assign(f1,'e:\mang.txt');

assign(f2,'e:\tong.txt');

reset(f1);

rewrite(f2);

tong:=0;

for i:=1 to 4 do

begin

read(f1,A[i]);

write(f2,A[i]);

tong:=tong+A[i];

end;

writeln(f2);

write(f2,tong);

Page 26: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

26

close(f1);

close(f2);

readln

end.

Bài 2. Viết chương trình thực hiện các công việc sau:

- Đọc 3 số a, b, c từ tệp ptb2.txt

- Giải phương trình bậc hai với hệ số a, b, c vừa đọc được

- Ghi kết quả giải phương trình bậc hai vào tệp ketqua.txt.

Chương trình giải bài toán trên Pascal:

program giaiptb2;

uses crt;

var f1,f2:text;

a, b, c:real;

d, x1, x2:real;

begin

assign(f1,'e:\ptb2.txt');

assign(f2,'e:\ketqua.txt');

reset(f1);

rewrite(f2);

read(f1, a, b, c);

d:=b*b-4*a*c;

if d<0 then writeln(f2,'ptvn')

else if d=0 then writeln(f2,'pt co nghiem kep

x1 = x2 = ',-b/(2*a))

else

begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a);

Page 27: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

27

write(f2,'nghiem cua pt la: ', 'x1= ',

x1:10:2,'x2= ', x2:10:2);

end;

close(f1);

close(f2);

end.

2.4. Thực nghiệm và kết quả thực hiện

Tôi đã áp dụng SKKN này ở lớp 11T, khối 11. Đây là lớp đa số là học sinh

khá giỏi. Sau khi áp dụng tôi nhận thấy qua các bài tập kiến thức của các em về

kiểu tệp văn bản càng được hoàn thiện hơn, từ chổ chưa hiểu gì ở bài tập đầu các

em đã dần làm được các bài tập kế tiếp. Vì năm học này tôi chỉ giảng dạy kiểu dữ

liệu tệp ở lớp 11T nên kết quả đối chứng và thực nghiệm tôi đều thực hiện trên lớp

này.

Khi chưa áp dụng phương pháp giảng dạy theo đề tài tôi tiến hành giảng dạy

theo cấu trúc bài học như sách giáo khoa bao gồm cả bài 14, 15 và 16. Ở bài 14 và

15 chỉ yêu cầu các em nắm được cú pháp khai báo biến tệp, gắn tệp, các thao tác

với tệp. Bài 16 mục đích là muốn cho học sinh hiểu được chương trình đọc dữ liệu

số từ tệp, ghi output (output có kiểu mảng) của chương trình vào một tệp khác.

Không giống như các kiểu dữ liệu trước, nhiều học sinh không biết làm thế nào để

chạy được chương trình và kiểm tra kết quả. Vì phần đuôi của tệp RESIT.DAT và

RESIT.EQU học sinh không biết phải mở bằng phần mềm nào để đọc hay khởi tạo

tệp trực tiếp. Giáo viên cũng đã giải thích và chạy thử chương trình cho học sinh

xem. Học sinh cũng nắm được các bài 14, 15 và 16 nhưng khi giáo viên phát phiếu

bài tập kiểm tra đánh giá thì học sinh không làm được vì dữ liệu ghi vào là Output

của một chương trình (dữ liệu này là xâu kí tự) và thao tác ghi là ghi thêm. Ngoài

ra các em vẫn còn thắc mắc: Có thể đọc được hết dữ liệu của một tệp và ghi ra màn

Page 28: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

28

hình hay không? Máy tính đọc dữ liệu kiểu xâu như thế nào? Có thể ghi Output của

tất cả các lần thực hiện chương trình vào tệp hay không?...

Để giả quyết những thắc mắc đó tôi đã dành ra thêm 3 tiết để áp dụng đề tài

này. Phương pháp tiến hành thực nghiệm như sau:

- Giáo viên giới thiệu các kiến thức cơ bản về kiểu tệp văn bản trong Pascal

(đã được trình bày ở phần cơ sở lí luận). Vì đây là bài học có nhiều nội dung mới

nên khó tránh khỏi việc học sinh không theo kịp bài do đó giáo viên phô tô cho mỗi

học sinh một bản.

- Sau khi trình bày xong phần lý thuyết, giáo viên phát cho mỗi học sinh một

phiếu bài tập thực hành kiểu tệp văn bản (phụ lục 1). Ở ví dụ 3, 6 và 7 giáo viên

cần lưu ý các em khởi tạo các tệp trực tiếp trên phần mềm Notepad (các tệp được

tạo ra từ phần mềm này có đuôi là “.txt”). Vì học sinh chưa từng thực hành một bài

tập nào về kiểu dữ liệu này nên với từng ví dụ giáo viên nhắc lại kiến thức và yêu

cầu học sinh xem lại lý thuyết đồng thời đặt các câu hỏi gợi mở, các câu hỏi yêu

cầu học sinh so sánh các vấn đề dễ gây nhầm lẫn (đã được trình bày ở phần “2.3.

Biện pháp tiến hành”). Trong quá trình thực hành giáo viên yêu cầu học sinh ghi

vào phiếu bài tập mỗi khi hoàn thành xong một bài.

- Kết thúc quá trình thực hành, giáo viên đưa ra bài tập kiểm tra đánh giá

(Phụ lục 2). Học thao tác trên máy và ghi vào giấy khi đã hoàn thành.

- Sau khi học sinh hoàn thành phiếu kiểm tra đánh giá theo thời gian đã quy

định giáo viên thu bài đồng thời thu cả phiếu bai tập để thống kê, đánh giá kết quả

đạt được.

Page 29: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

29

Bảng thống kê kết quả đạt được

PHIẾU BÀI TẬP THỰC HÀNH KIỂU TỆP VĂN BẢN

(Thực hiện trên cùng lớp 11T, năm học 2016-2017)

Trước khi áp dụng Sau khi áp dụng

Số bài KT

Đạt yêu

cầu

Không đạt

y.c Số bài KT

Đạt yêu

cầu

Không

đạt y.c

S.L % S.L % S.L % S.L %

35

0 0 35 %

35

35 100%

Page 30: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

30

KẾT QUẢ PHIẾU KIỂM TRA ĐÁNH GIÁ

Thực nghiệm

Số bài KT Đạt yêu cầu Không đạt y.c

S.L % S.L %

35

35 100% 0 0%

Qua kết quả trên tôi nhận thấy học sinh đạt yêu cầu 100%. Vì học sinh làm

bài trực tiếp trên máy nên nếu có sai sót các em sẽ kịp thời phát hiện và sửa ngay.

Bên cạnh đó các em còn học được tính đoàn kết, hợp tác, học hỏi lẫn nhau trong

quá trình thực hành. Ben cạnh đó tôi nhận thấy học sinh đã tiếp thu được kiến thức

cơ bản và vận dụng được kiểu tệp văn bản để có thể lưu lại output của các lần thực

hiện chương trình của các bài tập Pascal đã từng thực hiện trước đây. Tuy còn lúng

túng và chưa quen với kiểu dữ liệu mới nhưng các em rất hứng thú với kết quả thực

hành của mình vì các em biết thêm được kiến thức mới là: có thể ghi dữ liệu vào

tệp bằng Pascal và có thể dùng Pascal để đọc dữ liệu từ tệp.

Page 31: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

31

Phần 3: KẾT LUẬN

3.1. Kết luận chung

Sáng kiến kinh nghiệm này là cả một quá trình tìm tòi học hỏi kiến thức từ sách,

thông tin trên internet, từ thực nghiệm của bản thân, từ những vấn đề bản thân tự

đặt ra và mong muốn giải quyết nó để đem đến cho học sinh những kiến thức cơ

bản nhưng đầy đủ và cần thiết nhất về kiểu tệp văn bản trong Pascal.

Tôi tin rằng đây sẽ là tài liệu hữu ích cho giáo viên tin học và cho cả học sinh

lớp 11. Những kiến thức được đề cập trong tài liệu này sẽ góp phần không nhỏ cho

những ai chưa hề biết kiểu tệp văn bản là gì.

Qua quá trình thực nghiệm, tôi nhận thấy phần lý thuyết như đã trình bày

trong cơ sở lí luận cần được photo cho học sinh tìm hiểu trước ở nhà. Trong suốt

quá trình thực hành cần đặt ra các câu hỏi theo hướng đặt vấn đề và trợ giúp học

sinh giải vấn đề. Cần lưu ý cho học sinh những điểm sau trong quá trình thực hành:

nếu bài tập chỉ yêu cầu đọc dữ liệu từ tệp thì phải khởi tạo tệp đó với nội dung và

tên tệp theo yêu cầu đề bài bằng phần mềm Microsoft Word, Notepad, Pascal,...;

Nếu đề bài yêu cầu ghi dữ liệu vào tệp thì việc lựa chọn phần đuôi của tên tệp tùy

theo yêu cầu đề bài, nếu đề bài không yêu cầu rõ tệp có phần đuôi là gì thì nên chọn

đuôi là .txt; Quá trình ghi dữ liệu vào tệp cần được cần được kiểm tra bằng việc mở

tệp đó ra xem, những tệp có đuôi .txt, .EQU, .DAT, .pas đều mở được bằng phần

mềm Notepad.

3.2. Đề xuất, kiến nghị

Qua quá trình thực tiễn giảng dạy tôi xin kiến nghị cần bổ sung thêm nhiều

bài tập thực hành về kiểu tệp văn bản trong sách giáo khoa, cần trình bày rõ ràng,

cụ thể hơn về thao tác đọc, ghi dữ liệu vào tệp. Thời lượng phân phối chương trình

nên tăng thêm cho “chương V. Tệp và thao tác với tệp” để tạo điều kiện cho các em

tiếp thu kiến thức tốt hơn. Sáng kiến kinh nghiệm này bám theo chuẩn kiến thức mà

chương trình đã quy định nên chưa giải quyết được những bài tập nâng cao. Tuy

Page 32: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

32

nhiên, với những gì đã đề cập trên đây tôi hi vọng nó sẽ là tài liệu hữu ích cho các

em học sinh và đồng nghiệp.

Page 33: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

33

TÀI LIỆU THAM KHẢO

1. Sách giáo khoa tin học 11 – NXB giáo dục

2. Sách giáo viên tin học 11 – NXB giáo dục

3. Học nhanh Pascal bằng ví dụ trong 15 giờ - Cao Bá Thành

4. Phương pháp giải các bài toán trong Tin học – Thạc sĩ Trần Đức Huyên

Page 34: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

34

PHỤ LỤC 1. BÀI TẬP THỰC HÀNH

Page 35: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

35

Page 36: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

36

Page 37: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

37

Page 38: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

38

Page 39: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

39

Page 40: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

40

Page 41: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

41

Page 42: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

42

PHỤ LỤC 2. BÀI KIỂM TRA ĐÁNH GIÁ

Viết chương trình đọc dữ liệu từ tệp có tên kiemtra.txt có nội dung như sau:

So sánh 2 số đọc được từ tệp và ghi kết quả so sánh vào tệp.

Page 43: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

43

Page 44: HƯỚNG DẪN THỰC HÀNH KIỂU TỆP TRÊN PASCAL DÀNH CHO …thptnganam.edu.vn/upload/34807/20181002/SKKN2017_hao.pdf · Đề tài nhằm hướng dẫn học sinh lớp thực

44