SKKN Phương pháp dạy học sinh cách viết chương trình sử dụng kiểu dữ liệu tệp văn bản
Nhận thấy đối 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ữ lại để xử lý nhiều lần thì cần phải có kiểu dữ liệu tệp (File) do kiểu dữ liệu tệp có 2 đặc điểm lớn:
Thứ nhất: được lưu trữ lâu dài ở bộ nhớ ngoài (đĩa từ, đĩa CD ) nên dữ liệu không bị mất khi tắt nguồn điện.
Thứ hai: Lượng dữ liệu trên tệp có thể rất lớn chỉ phụ thuộc vào dung lượng đĩa.
Nhưng điều làm tôi băn khoăn nhất là khi học sinh mới bắt đầu tiếp cận (học) với kiểu dữ liệu tệp thì học sinh không hiểu gì về bản chất, cách sử dụng tệp trong khi viết chương trình nên tôi không khỏi băn khoăn suy nghĩ là làm thế nào để học sinh có thể hiểu, nắm bắt được bản chất kiểu dữ liệu tệp (cụ thể trong chương trình tin học 11 dạy tệp văn bản) và viết được chương trình tốt hơn khi sử dụng kiểu dữ liệu tệp văn bản. Sau một thời gian giảng dạy, ôn thi học sinh giỏi, miệt mài nghiên cứu cũng như tham khảo ý kiến đồng nghiệp tôi xin mạnh dạn trình bày vấn đề này trong đề tài: “PHƯƠNG PHÁP DẠY HỌC SINH CÁCH VIẾT CHƯƠNG TRÌNH SỬ DỤNG KIỂU DỮ LIỆU TỆP VĂN BẢN”.
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT HÀ TRUNG SÁNG KIẾN KINH NGHIỆM PHƯƠNG PHÁP DẠY HỌC SINH CÁCH VIẾT CHƯƠNG TRÌNH SỬ DỤNG KIỂU DỮ LIỆU TỆP VĂN BẢN Người thực hiện: Lê Thùy Giang Chức vụ: Giáo viên SKKN thuộc lĩnh mực (môn): Tin học THANH HOÁ NĂM 2016 A. MỞ ĐẦU 1. Lý do chọn đề tài. Nhận thấy đối 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ữ lại để xử lý nhiều lần thì cần phải có kiểu dữ liệu tệp (File) do kiểu dữ liệu tệp có 2 đặc điểm lớn: Thứ nhất: được lưu trữ lâu dài ở bộ nhớ ngoài (đĩa từ, đĩa CD) nên dữ liệu không bị mất khi tắt nguồn điện. Thứ hai: Lượng dữ liệu trên tệp có thể rất lớn chỉ phụ thuộc vào dung lượng đĩa. Nhưng điều làm tôi băn khoăn nhất là khi học sinh mới bắt đầu tiếp cận (học) với kiểu dữ liệu tệp thì học sinh không hiểu gì về bản chất, cách sử dụng tệp trong khi viết chương trình nên tôi không khỏi băn khoăn suy nghĩ là làm thế nào để học sinh có thể hiểu, nắm bắt được bản chất kiểu dữ liệu tệp (cụ thể trong chương trình tin học 11 dạy tệp văn bản) và viết được chương trình tốt hơn khi sử dụng kiểu dữ liệu tệp văn bản. Sau một thời gian giảng dạy, ôn thi học sinh giỏi, miệt mài nghiên cứu cũng như tham khảo ý kiến đồng nghiệp tôi xin mạnh dạn trình bày vấn đề này trong đề tài: “PHƯƠNG PHÁP DẠY HỌC SINH CÁCH VIẾT CHƯƠNG TRÌNH SỬ DỤNG KIỂU DỮ LIỆU TỆP VĂN BẢN”. 2. Mục đích nghiên cứu. Nhận thấy việc viết chương trình giải các bài toán có sử dụng kiểu dữ liệu tệp văn bản bằng ngôn ngữ lập trình nào đó (hiện nay học sinh phổ thông đang sử dụng ngôn ngữ lập trình Pascal nên các ví dụ và bài tập tôi sử dụng ngôn ngữ Pascal để minh họa) là rất cần thiết đặc biệt là đối tượng học sinh mới bước đầu làm quen với cách viết chương trình có sử dụng kiểu dữ liệu tệp văn bản hoặc đối tượng là học sinh yếu kém trong trường. Hệ thống lại các kiến thức về tệp và các thao tác với tệp. Vì thế, mục đích cuối cùng là muốn phần lớn đa số các học sinh viết được chương trình sử dụng kiểu dữ liệu tệp văn bản nên tôi đã từng bước dạy học sinh cách viết chương trình giải quyết bài toán chuyển đổi dần dần từ chương trình không sử dụng kiểu dữ liệu tệp văn bản sang chương trình sử dụng một phần kiểu dữ liệu tệp văn bản đến chương trình hoàn toàn sử dụng kiểu dữ liệu tệp văn bản bằng các ví dụ cụ thể minh họa. 3. Đối tượng nghiên cứu. - Học sinh khối 11 trường THPT Hà Trung. - Cách viết chương trình để giải quyết các bài toán trên kiểu dữ liệu tệp văn bản. 4. Phương pháp nghiên cứu. Để hoàn thành SKKN này tôi đã sử dụng phối kết hợp nhiều phương pháp trong đó phương pháp chủ yếu là nghiên cứu xây dựng cơ sở lý thuyết, phương pháp điều tra thực tế học sinh, thu thập thông tin, phương pháp dạy học đổi mới. Xây dựng một số ví dụ từ đơn giản đến nâng cao dần. B. NỘI DUNG 1. Cơ sở lý luận của sáng kiến kinh nghiệm. Thứ nhất: Khi học sinh bước sang học kỳ II môn tin học lớp 11 thì phần lớn các em chưa hiểu cách viết chương trình sử dụng kiểu dữ liệu tệp. Thứ hai: Hiện nay trong các cuộc thi học sinh giỏi môn tin THPT thì tất cả các bài toán đều giải quyết trên kiểu dữ liệu tệp. Vì thế phần này là một phần vô cùng quan trọng đối với học sinh kể cả học sinh yếu kém và khá giỏi 2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm. Thực tế sau nhiều năm giảng dạy bộ môn tin học 11, đặc biệt là trong năm học 2015 - 2016 này tôi được nhà trường phân công giảng dạy toàn bộ khối 11(gồm 9 lớp) nên tôi đã có cái nhìn toàn diện hơn, bao quát hơn, khách quan hơn về khả năng học và tiếp thu của học sinh đối với môn tin học 11, cách đánh giá học sinh cụ thể hơn là đa số các em học sinh không hiểu gì về kiểu dữ liệu tệp hoặc hiểu rất mơ hồ, thậm chí không biết viết chương trình có sử dụng kiểu dữ liệu tệp, viết chương trình thì viết máy móc, dập khuôn theo SGK, sách tham khảo hoặc theo bài mẫu của giáo viên mà không hề hiểu bản chất và cách xử lý trong kiểu dữ liệu tệp. Trường THPT Hà Trung nằm trên địa bàn xã Hà Bình huyện Hà Trung là một xã nông thôn của huyện, có khoảng hơn 80% học sinh trong trường là con em nhà làm nông nghiệp nên chưa có đủ điều kiện kinh tế cho phép mỗi gia đình có một chiếc máy vi tính phục vụ việc học tập của các em. Mặc dù về điều kiện cơ sở vật chất của trường tôi tương đối tốt, trong năm học 2015 – 2016 nhà trường được cấp thêm một phòng máy nên trường đã có 03 phòng máy hoạt động tốt và liên tục đáp ứng, phục vụ cho việc học tập và thực hành của học sinh, bên cạnh đó nhà trường có đội ngũ giáo viên trẻ nhiệt tình và tâm huyết với nghề, Nhưng chủ yếu là do ý thức và trình độ năng lực của các em chưa cao nên dẫn đến trình trạng như trên. 3. Các giải pháp đã sử dụng để giải quyết vẫn đề đặt ra. 3.1. Phần lý thuyết. Muốn học sinh viết được chương trình có sử dụng kiểu dữ tệp văn bản thì việc đầu tiên là học sinh phải hiểu rõ và nắm vững bản chất của kiểu dữ liệu tệp văn bản và các thao tác với tệp. 3.1.1 Khai báo tệp Tệp văn bản là một kiểu tệp được Turbo Pascal định nghĩa sẵn với từ khóa TEXT. Cách khai báo biến tệp văn bản có dạng: Var : text; Trong đó: - Tên biến tệp: do người lập trình tự đặt và tuân theo quy tắc đặt tên của Pascal. - text: kiểu dữ liệu tệp văn bản. Chú ý: để cho gọn tên biến tệp còn được gọi là biến tệp. 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ần phân biệt tên biến tệp khác với tên tệp. Ví dụ: Var f1, f2: text; 3.1.2. Thao tác với tệp. a, Gắn tên tệp với 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 (do tên tệp và đường dẫn tương ứng được HĐH xác định) 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. Biến tệp trở thành đối tượng trực tiếp trong chương trình để nhận các thao tác đối với tệp trên đĩa. Gắn tên tệp bằng thủ tục: Assign(, ); Trong đó: - Tên tệp là hằng xâu hoặc biến xâu. - 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: : \\\\ Ví dụ 1: Gắn biến tệp f1với tên tệp Bai1.inp bằng thủ tục: Assign(f1, ‘Bai1.inp’); Ví dụ 2: Để có thể đọc dữ liệu từ tệp Nguyento.inp trên thư mục gốc ổ đĩa D với biến tệp f2 bằng thủ tục: Assign(f2, ‘D:\TP\Nguyento.inp’); b, Mở tệp. Tệp có thể dùng để chứa dữ liệu vào hoặc kết quả ra 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. + Mở tệp văn bản dùng để đọc dữ liệu ra bằng thủ tục: Reset (); Ví dụ: assign(tep1, ‘vidu.inp’); Reset(tep1); + Mở tệp văn bản dùng để ghi dữ dữ liệu bằng thủ tục: Rewrite(); Ví dụ: assign(tep2, ‘vidu.out’); Rewrite(tep2); c, Đọc/ ghi tệp văn bản. + Đọc dữ liệu trong tệp văn bản bằng thủ tục: Read(, ); Hoặc Readln(, ); 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. Chú ý: 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 dánh sách biến. Ví dụ: Read(tep1, x, y, z); Readln(f1, N); + Ghi dữ liệu vào tệp văn bản bằng thủ tục: Write(, ); Hoặc Writeln(, ); Trong đó: danh sách kết quả gốm một hoặc nhiều phần tử. phần tử có thể là biến đơn hoặc biểu thức (số học, quan hệ, logic) hoặc hằng xâu. Trường hợp có nhiều phần tử thì các phần tử được phân cách bởi dấu phẩy. Ví dụ: write(tep2, min); Hoặc write(f2,X1, ‘ ‘,X2); d, Đóng tệp Đóng tệp bằng thủ tục: Close(); Chú ý: Thủ tục Close(): 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 tỏa 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ên biến tệp. Ví dụ: Close(f1); Close(tep1); Close(f2); Close(tep2); * Các hàm chuẩn thường dùng trong tệp. - Hàm EOF: Trả về giá trị TRUE khi con trỏ tệp ở vị trí 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 (mã số 26). Việc đọc một phần tử của tệp còn cần có một điều kiện: phải thử xem tệp có còn phần tử không, tức là con trỏ chưa trỏ đến EOF. Hàm chuẩn EOF sẽ báo cho biết: nếu con trỏ trỏ vào cuối tệp thì EOF () = True, còn nếu con trỏ trỏ vào phần tử của tệp thì EOF () = False. Do vậy trước khi làm một thao tác gì để đọc tệp gán cho biến X, cần phải thử xem tệp đó đã kết thúc chưa bằng câu lệnh: IF NOT EOF () THEN READ (Biến tệp, X); Hoặc nếu muốn đọc tất cả các phần tử của tệp: WHILE NOT EOF () DO Begin READ (Biến tệp, X); (* Đọc một phần tử của tệp *) ...................... (* Xử lí biến X, nếu cần *) End; Nếu con trỏ đã trỏ đến phần EOF mà chương trình vẫn cố tình đọc thì sẽ gặp sai và máy sẽ báo lỗi, sau đó chương trình dừng lại. - Hàm EOLN(): trả về giá trị TRUE nếu con trỏ tệp đ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 - Tệp là một cấu trúc dữ liệu được dùng rất phổ biến. Vì vậy nắm vững bản chất tệp và cách xử lí tệp là điều rất cần thiết. 3.2. Phần bài tập. Hướng dẫn học sinh viết chương trình sử dụng kiểu dữ liệu tệp văn bản thông qua một số ví dụ đơn giản Ở phần bài tập này tôi muốn hướng học sinh tư duy theo từng bước của một bài toán nhưng được chia thành ba bài toán con để hình thành cách viết chương trình kiểu dữ liệu tệp văn bản trong Pascal. Khi học sinh đã hiểu bản chất và định hình được bài toán thì việc viết chương trình với kiểu dữ liệu tệp văn bản sẽ không còn khó nữa. Và bài toán nào ta cũng có thể viết chương trình với kiểu dữ liệu tệp. Ví dụ một bài toán được chia thành ba bài toán con Bài toán con 1: Viết chương trình không sử dụng tệp Yêu cầu: - Nhập dữ liệu từ bàn phím - Xử lí bài toán, nếu có - In kết quả ra màn hình Bài toán con 2: Viết chương trình có sử dụng tệp Yêu cầu: - Mở tệp để đọc dữ liệu từ tệp - Xử lí bài toán, nếu có - In kết quả ra màn hình Bài toán con 3: Viết chương trình có sử dụng tệp Yêu cầu: - Mở tệp để đọc dữ liệu từ tệp - Xử lí bài toán, nếu có - Ghi kết quả vào tệp Sau đây là một số ví dụ, hãy lập trình giải các bài toán sau: Bài toán 1: Một trường THPT tổ chức cho giáo viên và học sinh của trường đi cắm trại, sinh hoạt ngoài trời ở vườn quốc gia Cúc Phương. Để lên lịch đến thăm khu trại các lớp, thầy Hiệu trưởng cần biết khoảng cách từ trại của mình (ở vị trí có toạ độ (0, 0) đến trại của các giáo viên chủ nhiệm. Mỗi lớp có một khu trại của mình, vị trí trại của mỗi giáo viên chủ nhiệm có toạ độ nguyên (x, y). (Ví dụ 1 - SGK Tin học 11 Trang 87) Tôi chia bài toán 1 thành ba bài toán con với các mức yêu cầu như sau: Bài toán 1a: Yêu cầu: - Toạ độ của mỗi giáo viên chủ nhiệm được nhập từ bàn phím; - Tính khoảng cách giữa trại của mỗi giáo viên chủ nhiệm và trại của thầy Hiệu trưởng; - In kết quả ra màn hình. Phân tích bài toán và hướng dẫn học sinh viết chương trình Đây là bài toán yêu cầu ở mức thông thường (bài toán con 1): Nhập dữ liệu từ bàn phím; Xử lí bài toán: Tính khoảng cách giữa trại của mỗi giáo viên chủ nhiệm và trại của thầy Hiệu trưởng; In kết quả tính khoảng cách ra màn hình. Học sinh đã quen thuộc với bài toán viết chương trình kiểu này, tôi chỉ nêu các câu hỏi để học sinh định hướng viết chương trình: Nhập từ bàn phím toạ độ của mỗi giáo viên chủ nhiệm bằng câu lệnh nào? Tính khoảng cách d? Giả sử có 2 điểm A (XA; YA) và điểm B (XB; YB). Công thức tính khoảng cách giữa 2 điểm A và B: d (AB) = Ö(XA - XB )2 + (YA - YB )2 3) In kết quả tính khoảng cách ra màn hình sử dụng câu lệnh nào? Từ các câu hỏi gợi ý của Giáo viên, Học sinh viết chương trình và chạy trên máy để thấy được kết quả. Chương trình Program Baitoan1a; Var x, y : integer ; d : real ; Begin Writeln (‘Nhap toa do cua GVCN :’); {Nhập toạ độ của mỗi GVCN từ bàn phím} Writeln (‘Nhap x:’) ; Readln (x); Writeln (‘Nhap y:’) ; Readln (y); d := sqrt (x*x + y*y) ; {Tính khoảng cách} {In kết quả tính khoảng cách ra màn hình} Write (‘Khoang cach la :’, d : 6 : 2); Readln End. Kết quả chạy chương trình Nhap toa do cua moi GVCN : Nhap x: 5 Nhap y: 3 Khoang cach la : 6.00 Nhận xét: Với mức độ yêu cầu ở bài toán 1a (bài toán con 1), thì đa phần học sinh hiểu bài và viết chương trình chạy tốt, đúng kết quả, từ bài toán 1a (bài toán con 1) tôi nâng yêu cầu lên bài toán 1b (bài toán con 2). Sử dụng tệp để đọc cặp số nguyên, nhưng kết quả vẫn ghi ra màn hình. Bài toán 1b: Yêu cầu: - Các cặp toạ độ của mỗi giáo viên chủ nhiệm đọc từ tệp TRAI.TXT (tệp TRAI.TXT gồm các cặp số nguyên liên tiếp, các số cách nhau bởi một dấu cách và không kết thúc bởi dấu xuống dòng). - Tính khoảng cách giữa trại của mỗi giáo viên chủ nhiệm và trại của thầy Hiệu trưởng; - In ra màn hình khoảng cách vừa tính được. Phân tích bài toán và hướng dẫn HS viết chương trình Đây là bài toán yêu cầu ở mức bài toán con 2, tương tự với bài toán 1a, chỉ khác một điểm đó là thay vì nhập dữ liệu từ bàn phím, thì đề yêu cầu đọc từ tệp TRAI.TXT các cặp toạ độ của mỗi giáo viên chủ nhiệm; còn các yêu cầu còn lại giống với bài toán 1a. Bài toán 1b tương tự bài toán 1a, nên tôi nêu câu hỏi để HS định hướng viết chương trình: 1) Hãy viết các câu lệnh mở tệp TRAI.TXT để đọc dữ liệu? 2) Hãy viết các câu lệnh trong câu lệnh ghép sau vòng lặp while-do làm các nhiệm vụ: Đọc 2 số nguyên tiếp theo trong tệp ra hai biến nguyên x và y? Tính khoảng cách d từ trại thầy hiệu trưởng đến trại của mỗi GVCN có toạ độ (x,y) vừa đọc Ghi ra màn hình một dòng mới gồm thông báo “Khoang cach” và giá trị của d. 3) Hãy viết các câu lệnh đóng tệp và kết thúc chương trình. Chương trình Program Baitoan1b; Var f : Text ; d: real ; x, y : integer ; Begin Assign(f, ‘TRAI,TXT’); Reset(f); {Mở tệp TRAI.TXT để đọc cặp toạ độ} While not eof (f) do Begin Read ( f , x, y ) ; {Đọc cặp x, y từ tệp} d:= sqrt ( x*x + y*y) ; {Tính khoảng cách} {In kết quả tính khoảng cách ra màn hình} Writeln(‘ khoang cach la :’ , d : 5 : 2); End ; Close ( f ) ; {Đóng tệp} Readln End. Nhận xét: Một vấn đề đặt ra khi chạy chương trình trên máy ở Bài toán 1b, rất nhiều học sinh thắc mắc đặt câu hỏi, tại sao khi bấm tổ hợp phím Ctrl + F9 để chạy chương trình thì chương trình dịch báo lỗi “Error 2: File not found” (Không tìm thấy tệp). Vậy để chương trình dịch tìm thấy tệp TRAI.TXT thì ta phải làm thế nào? Khi dạy kiểu dữ liệu Tệp thì Giáo viên cần nói cho học sinh biết một số vấn đề liên quan đến việc xử lí tệp mà SGK không đề cập đến. Như lỗi “Error 2: File not found” chẳng hạn. Để sửa lỗi “Error 2: File not found” ta làm như sau: Bước 1: Soạn thảo chương trình trong môi trường Turbo Pascal, Nhấn F2 và lưu tên chương trình (Ví dụ, ở đây ta lưu tên chương trình: Baitoan1b) Bước 2: Từ môi trường soạn thảo, thực hiện thao tác: Chọn File + New... cửa sổ soạn thảo mới trong Pascal hiện ra, tại đây ta gõ dữ liệu cần đọc trong tệp mà đề bài yêu cầu. Baitoan 1b: Gõ 5 3 (5 và 3 tương ứng với 2 biến nguyên x và y) Sau đó nhấn F2 lưu với tên TRAI.TXT TRAI.TXT 5 3 Bước 3: Trở lại với chương trình chính (Baitoan1b.Pas), ta chạy chương trình bình thường giống như các chương trình vẫn làm, bấm tổ hợp phím Ctrl + F9 sẽ thấy kết quả hiển thị trên màn hình, lỗi “Error 2: File not found” không còn nữa. Kết quả chạy chương trình Khoang cach la : 6.00 TRAI.TXT 5 3 Lưu ý: - Để thay đổi dữ liệu ở tệp TRAI.TXT ta trở lại với chương trình chính (baitoan1b. Pas), sau đó nhấn F3 (mở tệp đã có), cửa sổ F3 mở ra bạn gõ tên tệp TRAI.TXT, tệp hiện ra và tại đây các bạn thay đổi dữ liệu theo yêu cầu. Sau đó nhấn F2 để lưu sự thay đổi. Trở lại với chương trình chính (baitoan1b.Pas), nhấn F2 để lưu sự thay đổi, bấm tổ hợp phím Ctrl + F9 sẽ thấy kết quả hiển thị trên màn hình. - Để tiện và nhanh chóng, Turbo Pascal cho phép mở nhiều cửa sổ soạn thảo đồng thời. Để chuyển tới cửa sổ tiếp theo nhấn phím F6. Để quay về cửa sổ trước đó, nhấn tổ hợp phím Shift + F6. - Thao tác tạo tệp TRAI.TXT tương tự với các thao tác tạo tệp khác. (Tệp TRAI.TXT còn được gọi là File dữ liệu vào). Bài toán 1c: Yêu cầu: - Các cặp toạ độ của mỗi giáo viên chủ nhiệm đọc từ tệp TRAI.TXT (tệp TRAI.TXT gồm các cặp số nguyên liên tiếp, các số cách nhau bởi một dấu cách và không kết thúc bởi dấu xuống dòng). Tính khoảng cách giữa trại của mỗi giáo viên chủ nhiệm và trại của thầy Hiệu trưởng; Ghi kết quả tính khoảng cách vào tệp TRAI.OUT Phân tích bài toán và hướng dẫn HS viết chương trình Đây là bài toán yêu cầu ở mức bài toán con 3 Đọc từ tệp TRAI.TXT các cặp toạ độ của mỗi giáo viên chủ nhiệm; Xử lí bài toán: Tính khoảng cách giữa trại của mỗi giáo viên chủ nhiệm và trại của thầy Hiệu trưởng; Ghi kết quả vào tệp TRAI.OUT HS đã viết được chương trình Bài toán 1b, thì với bài toán này cũng không còn khó nữa. Với bài toán này tôi lưu ý HS cần phải có hai biến tệp, một biến tương ứng với tệp TRAI.TXT để đọc dữ liệu, một biến tương ứng với tệp TRAI.OUT để ghi kết quả. Tôi nêu câu hỏi để HS định hướng viết chương trình: 1) - Hãy viết các câu lệnh mở tệp TRAI.TXT để đọc dữ liệu? - Hãy viết các câu lệnh mở tệp TRAI.OUT để ghi dữ liệu? 2) Hãy viết các câu lệnh trong câu lệnh ghép sau vòng lặp while-do làm các nhiệm vụ: Đọc 2 số nguyên tiếp theo trong tệp ra hai biến nguyên x và y? Tính khoảng cách d từ trại thầy hiệu trưởng đến trại của mỗi GVCN có toạ độ (x,y) vừa đọc c . Ghi kết quả vào tệp TRAI.OUT 3) Hãy viết các câu lệnh đóng tệp và kết thúc chương trình. Chương trình Program Baitoan1c; Var f , g : Text ; d: real ; x, y : integer ; Begin Assign(f, ‘TRAI,TXT’); Reset(f); {Mở tệp TRAI.TXT để đọc cặp toạ độ} Assign (g, ‘TRAI. OUT’); Rewrite(g);{Mở tệp TRAI.OUT để ghi kết quả} While not eof (f) do Begin Read ( f , x, y ) ; {Đọc cặp tọa độ x, y từ tệp} d := sqrt ( x*x + y*y) ; {Tính khoảng cách} Writeln(g , d); {ghi kết quả vào tệp} End ; Close ( f ) ; Close ( g ) ; {Đóng tệp} Readln End. Nhận xét: 1) Đến bài toán 1c lại thêm một vấn đề nảy sinh: Tạo tệp TRAI.OUT có giống với cách tạo tệp TRAI.TXT không? Trong tệp TRAI.OUT ta có cần phải ghi dữ liệu giống tệp TRAI.TXT không? Câu trả lời như sau: Cách tạo tệp TRAI.OUT hoàn toàn giống với cách tạo tệp TRAI.TXT. Nhưng điểm khác nhau cơ bản nhất giữa tệp TRAI.OUT (hay còn được gọi là File kết quả) và TRAI.TXT (hay còn được gọi là File dữ liệu vào) là: đối với File kết quả thì ta không ghi gì ở File này cả, ta chỉ cần tạo tên tệp TRAI.OUT. Khi chạy File chương trình cộng với File dữ liệu vào thì kết quả sẽ được hiển thị ở File kết quả. Kết quả chạy chương trình TRAI.TXT TRAI.OUT 5 3 6 2) Với bài toán được chia thành các mức độ khác nhau theo độ khó dần thì học sinh dễ nắm bắt hơn. Khi dạy lập trình với kiểu dữ liệu tệp tôi luôn trình bày Bài toán 1 (bài toán 1a, bài toán 1b, bài toán 1c) song song với nhau trên cùng một mặt bảng (bảng được chia thành 3 phần để trình bày 3 bài toán trên) để học sinh thấy được những điểm giống nhau và khác nhau của Bài toán 1. Từ đó chính các em sẽ nhìn thấy được bản chất của mỗi bài toán con, và cách tiếp cận với kiểu dữ liệu tệp từng bước như thế sẽ làm học sinh dễ nắm bắt ý tưởng bài toán hơn từ những ví dụ tương đối đơn giản. Bài toán 1a Bài toán 1b Bài toán 1c Nhập dữ liệu từ bàn phím→ sử dụng cặp câu lệnh Write (; Readln(); - Tính khoảng cách d? - In ra màn hình → sử dụng cặp câu lệnh Write(); - Mở tệp để đọc dữ liệu → sử dụng cặp câu lệnh Assign .... Reset ... While not Eof () do Begin Read(,); ....... End; - Tính khoảng cách d? - In ra màn hình → sử dụng cặp câu lệnh Write (); - Mở tệp để đọc dữ liệu → sử dụng cặp câu lệnh Assign .... Reset ... While not Eof () do Begin Read(,); ....... End; - Tính khoảng cách d? - Mở tệp để ghi kết quả → sử dụng cặp câu lệnh Assign .... Rewrite ... - Ghi kết quả vào tệp Write (,;) Tương tự với Bài toán 1, ta cùng tìm hiểu Bài toán 2: Bài toán 2: Cho ba số nguyên a, b, c. Tôi chia ví dụ 2 thành ba bài toán con với các mức yêu cầu như sau: Bài toán 2a: Yêu cầu: Tìm số lớn nhất trong bốn số trên Dữ liệu vào: Nhập từ bàn phím ba số nguyên a, b, c; Kết quả: Ghi ra màn hình số lớn nhất. Phân tích bài toán và hướng dẫn học sinh viế
Tài liệu đính kèm:
- skkn_phuong_phap_day_hoc_sinh_cach_viet_chuong_trinh_su_dung.doc