Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11Sáng kiến kinh nghiệm, SKKN - Rèn luyện kĩ năng lập trình với tệp từ các bài toán cơ bản trong môn Tin học lớp 11
SỞ GIÁO DỤC VÀ ĐÀO TẠO NAM ĐỊNH TRƯỜNG THPT TRẦN HƯNG ĐẠO - SÁNG KIẾN KINH NGHIỆM RÈN LUYỆN KĨ NĂNG LẬP TRÌNH VỚI TỆP TỪ CÁC BÀI TỐN CƠ BẢN TRONG MƠN TIN HỌC LỚP 11 Tác giả : Phạm Thị Khánh Trình độ chun mơn: Cử nhân Chức vụ: Giáo viên Tin học Nơi công tác: Trường THPT Trần Hưng Đạo Nam Định, tháng năm 2017 Rèn luyện kĩ lập trình với tệp từ tốn môn Tin học lớp 11 BÁO CÁO SÁNG KIẾN I Điều kiện hoàn cảnh tạo sáng kiến Phân phối chương trình Tin học THPT có thay đổi giảm tải việc học môn Tin học Để đảm bảo đủ số tiết học nên có tiết bổ sung tiết tập tập thực hành, nhằm đảm bảo cho học sinh nắm rõ hơn, vững phần lý thuyết học Các tiết tập tập thực hành sách giáo khoa, hướng dẫn cụ thể để đạt chuẩn chung lý thuyết Do giáo viên linh hoạt dựa vào điều kiện sở vật chất nhà trường, đặc biệt tuỳ vào đối tượng học sinh để cung cấp cho học sinh tập nhằm củng cố cho học sinh kiến thức phần lý thuyết học Theo phân phối chương trình, chương 5: Tệp thao tác với tệp Tin học 11 có tiết lý thuyết tiết tập thực hành Phần lý thuyết, sách giáo khoa cung cấp đầy đủ dễ hiểu học sinh Tuy nhiên, phần tập chưa có; phần ví dụ chưa đủ để học sinh nắm vững áp dụng hết thao tác với tệp II Mô tả giải pháp Thực trạng (trước có sáng kiến) Một số khó khăn dạy học nội dung Tệp thao tác với tệp: - Học sinh không nhớ khái niệm tác dụng việc sử dụng tệp (đã học lớp 10) - Học sinh khơng nắm vững trình tự bước để viết chương trình với tệp - Học sinh khơng có kĩ đọc liệu với dạng liệu cách lưu trữ liệu tệp văn - Trong tiết thực hành học sinh lúng túng lập trình với việc nhập liệu từ bàn phím chuyển sang đọc liệu từ tệp văn - Giáo viên thường thời gian việc hướng dẫn học sinh viết chương trình có sử dụng tệp Giải pháp PHẦN 1: Hướng dẫn phần lí thuyết vai trị kiểu tệp lập trình thao tác làm việc với tệp Giáo viên: Phạm Thị Khánh Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Giáo viên định hướng cho học sinh nên sử dụng tệp lập trình giải tốn; điểm khác biệt việc lập trình từ bàn phím lập trình sử dụng tệp văn Do đặc điểm nhớ nên ta phải sử dụng tệp để lưu trữ liệu lâu dài với dung lượng lớn Khi lập trình giải tốn máy tính với liệu Input nhập vào từ bàn phím in kết hình khơng lưu trữ kết máy tính Việc lập trình với tệp khơng lưu trữ kết toán lâu dài mà với Input dùng để giải nhiều tốn Hơn kết tốn dùng làm liệu vào cho toán khác Với toán học thực hành: + Input: liệu toán cho (dữ liệu vào) nhập từ bàn phím + Output: kết toán (dữ liệu ra) in hình Khi lập trình với tệp: + Input: liệu toán cho (dữ liệu vào) lấy (đọc) từ file liệu (thường có phần mở rộng INP) + Output: kết toán (dữ liệu ra) đưa (ghi) vào file liệu khác (thường có phần mở rộng OUT) Khi để giải tốn, người lập trình phải tương tác với tệp: Tệp liệu vào Input (.INP) Tệp chương trình (.PAS) Tệp liệu Output (.OUT) Để thực tương tác ta cần sử dụng thao tác làm việc với tệp sau: Khai báo tệp Var : Text; Mở tệp để đọc liệu ASSIGN(biến tệp, tên tệp); Mở tệp để ghi liệu ASSIGN(biến tệp, tên tệp); Đọc liệu từ tệp RESET(biến tệp); REWRITE(biến tệp); READ(biến tệp, danh sách biến); READLN(biến tệp, danh sách biến); Ghi liệu vào tệp WRITE(biến tệp, danh sách kết quả); WRITELN(biến tệp, danh sách kết quả); Giáo viên: Phạm Thị Khánh Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Đóng tệp thủ tục CLOSE(biến tệp); Chú ý: Giáo viên nên giải thích rõ thành phần thủ tục lấy ví dụ minh họa Trình tự viết chương trình: Khai báo biến tệp văn biến cần thực tính tốn Mở tệp Inp để đọc giá trị với Assign Reset Mở tệp Out để ghi kết với Assign Rewrite Đọc liệu từ tệp Inp với Read Readln Xử lý liệu đọc Ghi kết vào tệp Out với Write Writeln Đóng tệp mở lệnh CLose PHẦN 2: Rèn luyện viết chương trình với tốn đọc ghi dữ liệu giá trị số đơn giản VD1: Cho số nguyên a b Yêu cầu: Tính tổng số a, b Input: Đọc từ tệp Tong2so.Inp chứa số nguyên a b Output: Ghi vào tệp Tong2so.Out kết tìm Ví dụ: Tong2so.Inp Tong2so.Out Giáo viên: Phạm Thị Khánh Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Chương trình: Program Tong2so; Uses crt; Var f1, f2: Text; a, b, S: Integer; Begin Assign(f1, ‘Tong2so.Inp’); Reset(f1); Assign(f2, ‘Tong2so.Out’); Rewrite(f2); Read(f1, a, b); S := a + b; Write(f2, S); Close(f1); Close(f2); End VD2: Cho số x, y, a, b, R Yêu cầu: Tính giá trị biểu thức Z với x y Z x y điểm (x, y) thuộc hình trịn bán kính r, tâm (a, b) trường hợp lại Input: Đọc từ tệp Tinh.Inp chứa số x, y, a, b, R Output: Ghi vào tệp Tinh.Out kết tìm Ví dụ: Tinh.Inp -8 2.3 Tinh.Out Tinh.Inp -3.000 -8 14.3 Tinh.Out 13.000 Chương trình: Program tinh; Var f1, f2 : text; x, y, a, b, r, z : real; Begin Assign(f1, 'tinh.inp'); Reset(f1); Assign(f2, 'tinh.out'); Rewrite(f2); Readln(f1, x, y, a, b, r); If sqrt(sqr(x-a)+sqr(y-b)) 0) Yêu cầu: Tính chu vi diện tích hình trịn với bán kính R Input: Đọc từ tệp htron.Inp chứa số R Output: Ghi vào tệp htron.Out kết tìm Giáo viên: Phạm Thị Khánh Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Ví dụ: htron.Inp htron.Out Chu vi hinh tron la 43.96 Dien tich hinh tron la 153.86 BT5: Yêu cầu: Tính vận tốc v chạm đất vật rơi từ độ cao h, biết v gh , g gia tốc rơi tự g 9,8m / s Input: Đọc từ tệp VT.Inp chứa số nguyên h Output: Ghi vào tệp VT.Out kết tìm (làm tròn đến chữ số thập phân) VT.Inp VT.Out 13 15.962 BT6: Cho số nguyên a, b, c (với a, b, c > 0) Yêu cầu: Kiểm tra xem số a, b, c có tạo thành tam giác hay khơng? Nếu có tính chu vi, diện tích tam giác Ngược lại đưa thơng báo “ so khong tao tam giac” Input: Đọc từ tệp tamgiac.Inp chứa số nguyên a, b, c Output: Ghi vào tệp tamgiac.Out kết tìm Ví dụ: tamgiac.Inp tamgiac.Out tamgiac.Inp khong tao tam giac tamgiac.Out Chu vi tam giac la 12 Dien tich tam giac la 6.0 BT7: Cho số a, b Yêu cầu: Giải phương trình bậc ax + b = Input: Đọc từ tệp ptb1.Inp chứa số a, b Output: Ghi vào tệp ptb1.Out kết tìm Ví dụ: ptb1.Inp 0 ptb1.Out Pt co VSN ptb1.Inp ptb1.Out PTVN ptb1.Inp ptb1.Out x = 1.800 BT8: Cho số a, b, c (a, b, c ≠ 0) Yêu cầu: Giải phương trình bậc hai ax2 + bx + c = Input: Đọc từ tệp ptb2.Inp chứa số a, b, c Giáo viên: Phạm Thị Khánh Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn môn Tin học lớp 11 Output: Ghi vào tệp ptb2.Out kết tìm Ví dụ: ptb2.Inp 2 ptb2.Out ptb2.Inp PTVN ptb2.Out X1 = -0.5 X2 = -2.0 BT9: Cho số x, y Yêu cầu: Tính giá trị biểu thức Z với x2 y Z x y 0,5 x2 + y2 ≤ x2 + y2 ≥ y ≥ x x2 + y2 ≥ y < x Input: Đọc từ tệp Tinh.Inp chứa số x, y Output: Ghi vào tệp Tinh.Out kết tìm Ví dụ: Tinh.Inp 0.5 0.1 Tinh.Out Tinh.Inp Tinh.Out 0.26 2.5 4.5 Tinh.Inp Tinh.Out 0.5 PHẦN 3: Hướng dẫn học sinh thực hành tập máy tính Giáo viên yêu cầu học sinh ghi nhớ trình tự thực hành toán qua bước sau: B1: Soạn thảo chương trình giải tốn: Program End B2: Lưu với tên trùng với tên tệp Inp, Out (VD: Tong2so.Pas; Tong2so.Inp; Tong2so.Out) B3: Đưa trỏ đến phần tên tệp Inp, bấm Ctrl + Enter, bấm Enter lần, gõ giá trị theo đề cho tệp Inp, giá trị cách dấu cách B4: Chọn tệp chương trình Pas, đưa trỏ đến phần tên tệp Out, bấm Ctrl + Enter, bấm Enter lần B5: Hiển thị tệp lúc hình: Vào menu Window / Tile B6: Đưa trỏ vào tệp Pas, bấm Ctrl + F9, chạy chương trình, kiểm tra kết tệp Out Nếu chương trình có lỗi sửa lỗi thực lại B6 Giáo viên thực hành trực tiếp tốn ví dụ Giáo viên: Phạm Thị Khánh Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn môn Tin học lớp 11 PHẦN 4: Rèn luyện kĩ đọc/ghi dữ liệu việc đưa dạng dữ liệu có tệp Input Dạng 1: Dữ liệu số tệp INPUT xác định trước Với dạng liệu giáo viên gợi cho học sinh ghi nhớ sâu cách sử dụng cấu trúc lặp với số lần lặp biết trước FOR – DO VD1: Cho dãy gồm 10 số nguyên Yêu cầu: Tính tổng số dãy Input: Đọc từ tệp Tongday.Inp 10 số nguyên, số cách dấu cách Output: Ghi vào tệp Tongday.Out kết tìm Ví dụ: Tongday.Inp Tongday.Out 5 53 Cách 1: Đọc 10 giá trị biến đơn Program Tinh; Giáo viên: Phạm Thị Khánh Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Uses crt; Var f1, f2: Text; a, i, S: Integer; Begin Assign(f1, ‘DS1.Inp’); Reset(f1); Assign(f2, ‘DS1.Out’); Rewrite(f2); S:=0; For i:=1 to 10 Begin Read(f1, a); S:=S+a; end; Write(f2, S); Close(f1); Close(f2); End Cách 2: Dùng mảng để đọc dãy 10 số Với cách học sinh áp dụng cho tốn có nhiều u cầu cần xử lí liệu Program Tinh; Uses crt; Var f1, f2: Text; a: array[1 10] of Integer; i, S: Integer; Begin Assign(f1, ‘DS1.Inp’); Reset(f1); Assign(f2, ‘DS1.Out’); Rewrite(f2); S:=0; For i:=1 to 10 begin Read(f1, a[i]); S := S + a[i]; end; Write(f2, S); Close(f1); Close(f2); End; Từ toán giáo viên gợi ý cho học sinh thực hành với số lượng giá trị dãy lớn VD2: Cho dãy gồm N số nguyên Yêu cầu: Tính tổng N số nguyên Input: Đọc từ tệp Tongday.Inp chứa - Dòng 1:1 số nguyên N (1 < N < 10000) - Dòng 2: gồm N số nguyên số cách dấu cách Output: Ghi vào tệp Tongday.Out kết tìm Ví dụ: Giáo viên: Phạm Thị Khánh 10 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Tongday.Inp Tongday.Out 42 Ở toán giáo viên hướng dẫn học sinh xác định dãy số gồm N số cách giải tương tự VD1, thêm phần đọc giá trị N Program Tinh; Uses crt; Var f1, f2: Text; N, a, i, S: Integer; Begin Assign(f1, ‘DS1.Inp’); Reset(f1); Assign(f2, ‘DS1.Out’); Rewrite(f2); Read(f1, N); S:=0; For i:=1 to N Begin Read(f1, a); S:=S+a; end; Write(f2, S); Close(f1); Close(f2); End VD3: Input: Đọc từ tệp UCLN.Inp chứa: - Dòng 1:1 số nguyên N (1 < N < 50) - N dòng tiếp theo: dòng gồm số nguyên a b; số cách dấu cách Yêu cầu: Tìm ước chung lớn cặp số (a, b) Output: Ghi vào tệp UCLN.Out gồm N dòng, dịng kết tìm ứng với cặp số (a, b) Ví dụ: UCLN.Inp UCLN.Out 5 25 11 18 27 Giáo viên: Phạm Thị Khánh 11 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn môn Tin học lớp 11 Đối với tốn học sinh nhận biết việc tìm UCLN cặp (a, b) N lần ta cần đọc liệu theo dịng, tìm UCLN ghi kết vào tệp Hai tốn có kết nên dùng thủ tục Write Writeln để ghi vào tệp OUT Bài tốn có nhiều kết UCLN, kết dịng sử dụng cấu trúc nào? Chương trình: Program UCLN; Uses crt; Var f1, f2: Text; N, a, b, i: Integer; Begin Assign(f1, ‘UCLN.Inp’); Reset(f1); Assign(f2, ‘UCLN.Out’); Rewrite(f2); Read(f1, N); For i:=1 to N begin Read(f1, a, b); While a b If a > b then a := a – b else b := b – a; Writeln(f2, a); end; Close(f1); Close(f2); End Bài tập áp dụng BT1: Cho dãy gồm 10 số nguyên Yêu cầu: Đếm số lượng số chẵn, số lượng số lẻ dãy Input: Đọc từ tệp ChanLe.Inp chứa dãy gồm 10 số nguyên, số cách dấu cách Output: Ghi vào tệp ChanLe.Out kết tìm Ví dụ: ChanLe.Inp 5 ChanLe.Out So luong so chan la: So luong so le la: BT2: Cho dãy gồm N số nguyên dương Yêu cầu: Kiểm tra xem dãy có số nguyên tố Input: Đọc từ tệp NguyenTo.Inp chứa Giáo viên: Phạm Thị Khánh 12 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 - Dòng 1:1 số nguyên N (1 < N < 10000) - Dòng 2: gồm N số nguyên dương, số cách dấu cách Ouput: Ghi vào tệp NguyenTo.Out số nguyên tố tìm được, số cách dấu cách Ví dụ: NguyenTo.Inp NguyenTo.Out 15 11 13 10 11 12 13 14 15 16 Kết ghi vào tệp OUT số nguyên tố, số cách dấu cách nên giáo viên hướng dẫn học sinh thêm kí tự dấu cách vào sau kết cần ghi Ví dụ: Write(f2, a, ‘ ‘); BT3: Số hoàn hảo định nghĩa số có tổng ước số (trừ nó) Ví dụ: Số 6, 28 số hồn hảo Vì có ước số 1, 2, 3, mà + + = 28 có ước số 1, 2, 4, 7, 14, 28 mà + + + + 14 = 28 Cho dãy gồm N số nguyên dương Yêu cầu: Tính tổng số lẻ kiểm tra xem có số hồn hảo dãy Input: Đọc từ tệp Hoanhao.Inp chứa - Dòng 1:1 số nguyên N (1 < N < 10000) - Dòng 2: gồm N số nguyên dương, số cách dấu cách Output: Ghi vào tệp Hoanhao.Out gồm dòng: - Dòng 1: Tổng số lẻ dãy - Dịng 2: Các số hồn hảo tìm được, số cách dấu cách Ví dụ: HoanHao.Inp Hoanhao.Out 10 53 35 12 28 496 11 120 28 496 Học sinh áp dụng cách đọc dãy số vào mảng, giáo viên hướng dẫn học sinh dựa vào giới hạn N để khai báo số lượng phần tử mảng chứa dãy Giáo viên: Phạm Thị Khánh 13 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 BT4: Cho dãy gồm N số nguyên Yêu cầu: Tìm GTLN dãy xếp dãy theo thứ tự tăng dần Input: Đọc từ tệp Sapxep.Inp chứa - Dòng 1: số nguyên N (1 < N < 10000) - Dòng 2: gồm N số nguyên, số cách dấu cách Output: Ghi vào tệp Sapxep.Out gồm dòng: - Dòng 1: GTLN dãy - Dòng 2: Dãy xếp, số cách dấu cách Ví dụ: Sapxep.Inp Sapxep.Out 10 745 35 12 28 745 11 120 11 12 28 35 120 745 BT5: (Dành cho học sinh Khá – Giỏi) Cho dãy gồm N số nguyên dương a1, a2, , aN Yêu cầu: Tính tổng chữ số số Input: Đọc vào từ tệp Tongchuso.Inp gồm: - Dòng 1: số nguyên dương N (N ≥ 1) - N dòng tiếp theo: dòng số nguyên dương (0 < ≤ 106) Output: Ghi vào tệp Tongchuso.Out gồm N dòng, dịng kết tính Ví dụ: Tongchuso.Inp Tongchuso.Out 25 711 15 12345 BT6: (Dành cho học sinh Khá – Giỏi) Máy tính điện tử xử lí thơng tin cách chuyển đổi tất liệu sang dạng nhị phân (hệ đếm số 2) Hệ nhị phân hệ đếm sử dụng kí tự để biểu diễn giá trị số, tổng số lũy thừa Hai ký tự thường Giáo viên: Phạm Thị Khánh 14 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Ví dụ: Số A = A = 22 + 20 Do = 1012 B = 10 B = 23 + 21 Do 10 = 10102 Cho dãy gồm N số nguyên dương a1, a2, , aN Yêu cầu: Hãy biễu diễn số dãy sang hệ nhị phân Input: Đọc vào từ tệp Nhiphan.Inp gồm: - Dòng 1: số nguyên dương N (N ≥ 1) - N dòng tiếp theo: dòng số nguyên dương (0 < ≤ 100) Output: Ghi vào tệp Nhiphan.Out gồm N dòng, dòng kết biểu diễn Ví dụ: Nhiphan.Inp Nhiphan.Out Dạng 2: Dữ liệu dạng số tệp INPUT không xác định trước Với dạng liệu này, giáo viên hướng dẫn học sinh sử dụng hàm kiểm tra kết thúc tệp: * Hàm EoLn() : Trả giá trị True trỏ tệp tới cuối dòng * Hàm Eof() : Trả giá trị True trỏ tệp tới cuối tệp Ví dụ mơ tả cấu trúc tệp văn (chữ in đậm file hiện) VD.INP VD.INP Eoln 9 Eoln 74 Eoln Eof 45 69 Eoln Eof VD1: Cho tệp Tongday.Inp chứa dãy gồm nhiều số nguyên, số cách dấu cách Đọc tính tổng dãy số ngun Kết ghi vào tệp Tongday.Out Ví dụ: Giáo viên: Phạm Thị Khánh 15 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Tongday.Inp Tongday.Out 5 53 Ta sử dụng cách đọc giá trị VD1 dạng Program Tinh; Uses crt; Var f1, f2: Text; a, S: Integer; Begin Assign(f1, ‘DS1.Inp’); Reset(f1); Assign(f2, ‘DS1.Out’); Rewrite(f2); S:=0; While not Eof(f1) { Trong chưa kết thúc tệp đọc giá trị vào biến a} begin Read(f1, a); S:=S+a; end; Write(f2, S); Close(f1); Close(f2); End Như vậy, với dạng sử dụng vòng FOR để đọc N giá trị xác định N lần đọc giá trị từ tệp INP Với dạng sử dụng vòng WHILE để đọc giá trị theo yêu cầu cuối tệp VD2: Một trường THPT tổ chức cho giáo viên học sinh cắm trại, sinh hoạt trời vườn quốc gia Cúc Phương Để lê lịch đến thăm khu trại lớp, thầy hiệu trưởng cần biết khoảng cách từ trại mình, vị trí có tọa độ (0, 0) đến trại giáo viên chủ nhiệm Mỗi lớp có khu trại, vị trí trại giáo viên chủ nhiệm có tọa độ nguyên (x, y) Yêu cầu: Tính khoảng cách trại giáo viên chủ nhiệm trại thầy hiệu trưởng (lấy chữ số phần thập phân) Input: Đọc từ tệp TRAI.Inp gồm nhiều dòng, dòng cặp số nguyên (x, y) cách dấu cách Giáo viên: Phạm Thị Khánh 16 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn môn Tin học lớp 11 Output: Ghi vào tệp TRAI.Out gồm nhiều dòng, dòng khoảng cách tìm tương ứng với cặp số (x, y) Ví dụ: TRAI.Inp TRAI.Out 10.30 12 16 20.00 56 68 88.09 23 29 37.01 Bài tập áp dụng BT1: Số phương (hay cịn gọi số hình vng) số tự nhiên có bậc số tự nhiên, hay nói cách khác, số phương bình phương (lũy thừa bậc 2) số tự nhiên Cho dãy số nguyên Yêu cầu: Kiểm tra số dãy có phải số phương hay không? Input: Đọc từ tệp Cphuong.Inp gồm nhiều dòng, dòng số nguyên dương Output: Ghi vào tệp Cphuong.Out gồm nhiều dòng, dòng chữ CO KHONG Ví dụ: Cphuong.Inp Cphuong.Out CO 24 KHONG 20 KHONG 169 CO 25 CO BT2: Cho dãy số nguyên dương Yêu cầu: Tính tổng chữ số số dãy Input: Đọc từ tệp Tongchuso.Inp chứa dãy số nguyên dương, số cách dấu cách Output: Ghi vào tệp Tongchuso.Out gồm nhiều dịng, dịng kết tính Giáo viên: Phạm Thị Khánh 17 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Ví dụ: Tongchuso.Inp Tongchuso.Out 67 567 1956 13 18 21 BT4: Cho dãy số nguyên dương Yêu cầu: Với số cho xác định số lượng ước số Ví dụ với n = 2, a1 = 4, a2 = 12, số lượng ước số (1, 2, 4), số lượng ước số 12 (1, 2, 3, 4, 6, 12) Input: Đọc từ tệp DEMUOC.INP gồm nhiều dòng, dòng số nguyên dương Output: Ghi vào tệp DEMUOC.OUT gồm nhiều dòng, dòng số lượng ước số số Ví dụ: DEMUOC.INP DEMUOC.OUT 17 12 Dạng 3: Dữ liệu tệp INPUT có chứa xâu kí tự (chữ cái) Với dạng liệu giúp học sinh gợi nhớ lại thao tác xử lý kiểu liệu xâu STRING VD1: Cho xâu họ tên học sinh Yêu cầu: Hãy đưa họ tên dài hơn, đưa họ tên học sinh thứ Input: Đọc vào từ tệp HT.Inp gồm dòng, dòng họ tên người Output: Ghi vào tệp HT.Out dòng kết tìm Ví dụ: HT.INP HT.OUT Pham Thanh Lan Pham Thanh Lan Giáo viên: Phạm Thị Khánh HT.INP Nguyen Thi Mai 18 HT.OUT Mai Minh Hoang Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn mơn Tin học lớp 11 Tran Ngoc Bao Mai Minh Hoang Với toán giáo viên cần hướng dẫn học sinh sử dụng cấu trúc Readln để đọc dòng liệu (họ tên người) Chương trình: Program VD; Var f1, f2 : text; ht1, ht2 : string; Begin Assign(f1, 'ht.inp'); Reset(f1); Assign(f2, 'ht.out'); Rewrite(f2); Readln(f1, ht1); Readln(f1, ht2); If length(ht1) > length(ht2) then write(f2,ht1) else write(f2,ht2); Close(f1); Close(f2); End VD2: Cho xâu kí tự s1 chứa chữ chữ số Yêu cầu: Tạo xâu s2 gồm chữ số có s1 (giữ nguyên thứ tự xuất chúng) Input: Đọc từ tệp Tachso.Inp chứa xâu s1 (khơng q 255 kí tự) Output: Ghi vào tệp Tachso.Out xâu s2 Ví dụ: Tachso.Inp hfht85an8dj9w02 Tachso.Out 858902 Với tốn giáo viên hướng dẫn học sinh đọc liệu theo hai cách Cách 1: Đọc liệu vào xâu s1 sau kiểm tra kí tự s1 có phải chữ số hay không? (dùng thủ tục Readln) Chương trình: Program Tachso; Giáo viên: Phạm Thị Khánh 19 Trường THPT Trần Hưng Đạo Rèn luyện kĩ lập trình với tệp từ tốn môn Tin học lớp 11 Var f1, f2 : text; S: string; Begin Assign(f1,'tachso.inp'); reset(f1); Assign(f2,'tachso.out'); rewrite(f2); Read(f1,s); For i:=1 to length(s) if (s[i]>='0') and (s[i]='0') and (ch