Tải bản đầy đủ (.pdf) (24 trang)

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 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 (578.31 KB, 24 trang )

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 độ chuyên 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 5 năm 2017


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

BÁO CÁO SÁNG KIẾN
I. Điều kiện hoàn cảnh tạo ra sáng kiến
1. Phân phối chương trình Tin học THPT có sự thay đổi giảm tải đối với việc học
môn Tin học. Để đảm bảo đủ số tiết học nên có những tiết được bổ sung như tiết bài
tập hoặc bài tập thực hành, nhằm đảm bảo cho học sinh nắm rõ hơn, vững hơn những
phần lý thuyết đã được học.
2. Các tiết bài tập hoặc bài tập thực hành trong sách giáo khoa, hướng dẫn cụ thể
để đạt được một cái chuẩn chung như những bài lý thuyết. Do đó giáo viên sẽ linh
hoạt dựa vào điều kiện cơ sở vật chất của nhà trường, đặc biệt là tuỳ vào đối tượng
học sinh của mình để cung cấp cho học sinh những bài tập nhằm củng cố cho học
sinh những kiến thức ở phần lý thuyết đã học.
3. Theo phân phối chương trình, ở chương 5: Tệp và thao tác với tệp của Tin học
11 có 2 tiết lý thuyết và 2 tiết bài tập thực hành. Phần lý thuyết, sách giáo khoa cung


cấp đã khá đầy đủ và dễ hiểu đối với học sinh. Tuy nhiên, phần bài tập thì chưa có;
phần ví dụ chưa đủ để học sinh nắm vững và áp dụng được hết các thao tác với tệp.
II. Mơ tả giải pháp
1. Thực trạng (trước khi có sáng kiến)
Một số khó khăn trong dạy học nội dung Tệp và thao tác với tệp:
- Học sinh không nhớ về khái niệm và tác dụng của việc sử dụng tệp (đã học ở
lớp 10).
- Học sinh không nắm vững trình tự các bước để viết chương trình với tệp.
- Học sinh khơng có kĩ năng đọc dữ liệu với các dạng dữ liệu và cách lưu trữ dữ
liệu trong tệp văn bản.
- Trong các tiết thực hành học sinh rất lúng túng khi đang lập trình với việc nhập
dữ liệu từ bàn phím chuyển sang đọc dữ liệu từ tệp văn bản.
- Giáo viên thường rất mất thời gian trong việc hướng dẫn học sinh viết chương
trình có sử dụng tệp.
2. Giải pháp
PHẦN 1: Hướng dẫn phần lí thuyết về vai trị của kiểu tệp trong lập trình và các
thao tác làm việc với tệp
Giáo viên: Phạm Thị Khánh

2

Trường THPT Trần Hưng Đạo


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

Giáo viên định hướng cho học sinh tại sao nên sử dụng tệp khi lập trình giải
tốn; điểm khác biệt giữa việc lập trình từ bàn phím và lập trình sử dụng tệp văn bản.
Do đặc điểm của bộ nhớ trong nên ta phải sử dụng tệp để lưu trữ dữ liệu lâu dài
với dung lượng lớn. Khi lập trình giải một bài tốn trên máy tính với dữ liệu Input

nhập vào từ bàn phím và in kết quả ra màn hình thì khơng lưu trữ được kết quả trên
máy tính. Việc lập trình với tệp khơng những lưu trữ được kết quả bài toán lâu dài mà
với một bộ Input có thể dùng để giải nhiều hơn một bài tốn. Hơn nữa kết quả của
một bài tốn có thể được dùng làm dữ liệu vào cho bài toán khác.
Với các bài toán đã học và thực hành:
+ Input: dữ liệu bài toán cho (dữ liệu vào)  được nhập từ bàn phím
+ Output: kết quả của bài tốn (dữ liệu ra)  được in ra màn hình
Khi lập trình với tệp:
+ Input: dữ liệu bài toán cho (dữ liệu vào)  được lấy (đọc) từ file dữ liệu
(thường có phần mở rộng là INP)
+ Output: kết quả của bài toán (dữ liệu ra)  được đưa (ghi) vào file dữ liệu
khác (thường có phần mở rộng là OUT)
Khi đó để giải một bài tốn, người lập trình phải tương tác với 3 tệp:
Tệp dữ liệu
vào Input
(.INP)

Tệp chương trình
(.PAS)

Tệp dữ liệu
ra Output
(.OUT)

Để thực hiện được sự tương tác trên ta cần sử dụng các thao tác làm việc với tệp
như sau:
1. Khai báo tệp

Var <danh sách biến tệp> : Text;


2. Mở tệp để đọc dữ liệu

ASSIGN(biến tệp, tên tệp);

3. Mở tệp để ghi dữ liệu ASSIGN(biến tệp, tên tệp);
4. Đọc dữ 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);

5. Ghi dữ 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

3

Trường THPT Trần Hưng Đạo


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

6. Đóng tệp bằng thủ tục

CLOSE(biến tệp);


Chú ý: Giáo viên nên giải thích rõ các thành phần trong các thủ tục và 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 bản và các biến cần thực hiện tính
tốn
Mở tệp .Inp để đọc giá trị với Assign và Reset
Mở tệp .Out để ghi kết quả với Assign và Rewrite

Đọc dữ liệu từ tệp .Inp với Read hoặc Readln

Xử lý các dữ liệu đã đọc

Ghi các kết quả vào tệp .Out với Write hoặc Writeln

Đóng các tệp đã mở bằng lệnh CLose
PHẦN 2: Rèn luyện viết chương trình với các bài toán đọc ghi dữ liệu là giá trị số
đơn giản
VD1: Cho 2 số nguyên a và b.
Yêu cầu: Tính tổng 2 số a, b.
Input: Đọc từ tệp Tong2so.Inp chứa 2 số nguyên a và b.
Output: Ghi vào tệp Tong2so.Out kết quả tìm được.
Ví dụ:
Tong2so.Inp

Tong2so.Out

5 4
Giáo viên: Phạm Thị Khánh


9
4

Trường THPT Trần Hưng Đạo


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

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 5 số x, y, a, b, R.
Yêu cầu: Tính giá trị của biểu thức Z với
x  y
Z 
x  y

nếu điểm (x, y) thuộc hình trịn bán kính r, tâm (a, b).
trong trường hợp còn lại.

Input: Đọc từ tệp Tinh.Inp chứa các số lần lượt x, y, a, b, R
Output: Ghi vào tệp Tinh.Out kết quả tìm được.
Ví dụ:
Tinh.Inp
5 -8 3 6 2.3

Tinh.Out

Tinh.Inp

-3.000

5 -8 3 6 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)) <= r then z := abs(x) + abs(y)
else z := x + y;
Write(f2, z:10:3);

Close(f1);Close(f2);

End.
Giáo viên: Phạm Thị Khánh

5

Trường THPT Trần Hưng Đạo


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

Bài tập áp dụng
BT1: Cho 2 số nguyên a và b. Yêu cầu: Tính tổng, hiệu, tích, thương của 2 số a, b.
Input: Đọc từ tệp Tinh.Inp chứa 2 số nguyên a và b.
Output: Ghi vào tệp Tinh.Out kết quả tìm được.
Ví dụ:
Tinh.Inp


Tinh.Out

5 4

Tong 2 so la 9
Hieu 2 so la 1
Tich 2 so la 20
Thuong 2 so la 1.25

BT2: Cho 1 số nguyên a (với a ≠ 0).
Yêu cầu: Tính chu vi và diện tích của hình vng với cạnh là a.
Input: Đọc từ tệp hvuong.Inp chứa 1 số nguyên a.
Output: Ghi vào tệp hvuong.Out kết quả tìm được.
Ví dụ:
hvuong.Inp
5

hvuong.Out
Chu vi hinh vuong la 20
Dien tich hinh vuong la 25

BT3: Cho 2 số a, b (với a, b ≠ 0).
Yêu cầu: Tính chu vi và diện tích của hình chữ nhật với 2 cạnh là a, b.
Input: Đọc từ tệp hcn.Inp chứa 2 số nguyên a, b.
Output: Ghi vào tệp hcn.Out kết quả tìm được.
Ví dụ:
hcn.Inp

hcn.Out


5 9

CV = 28
DT = 45

BT4: Cho 1 số R (với R > 0).
Yêu cầu: Tính chu vi và diện tích của hình trịn với bán kính R.
Input: Đọc từ tệp htron.Inp chứa 1 số R.
Output: Ghi vào tệp htron.Out kết quả tìm được.
Giáo viên: Phạm Thị Khánh

6

Trường THPT Trần Hưng Đạo


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

Ví dụ:
htron.Inp

htron.Out

7

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 khi chạm đất của một vật rơi từ độ cao h, biết rằng

v  2 gh , trong đó g là gia tốc rơi tự do và g  9,8m / s 2 .

Input: Đọc từ tệp VT.Inp chứa 1 số nguyên h.
Output: Ghi vào tệp VT.Out kết quả tìm được (làm trịn đến 3 chữ số thập
phân).
VT.Inp

VT.Out

13

15.962

BT6: Cho 3 số nguyên a, b, c (với a, b, c > 0).
Yêu cầu: Kiểm tra xem 3 số a, b, c đó có tạo thành tam giác hay khơng? Nếu
có thì tính chu vi, diện tích của tam giác. Ngược lại đưa ra thơng báo
“ 3 so khong tao thanh tam giac”.
Input: Đọc từ tệp tamgiac.Inp chứa 1 số nguyên a, b, c.
Output: Ghi vào tệp tamgiac.Out kết quả tìm được.
Ví dụ:
tamgiac.Inp
9 3 5

tamgiac.Out

tamgiac.Inp

khong tao thanh tam giac

3 4 5


tamgiac.Out
Chu vi tam giac la 12
Dien tich tam giac la 6.0

BT7: Cho 2 số a, b. Yêu cầu: Giải phương trình bậc nhất ax + b = 0.
Input: Đọc từ tệp ptb1.Inp chứa 2 số a, b.
Output: Ghi vào tệp ptb1.Out kết quả tìm được.
Ví dụ:
ptb1.Inp
0 0

ptb1.Out
Pt co VSN

ptb1.Inp

ptb1.Out

0 7

PTVN

ptb1.Inp
5 9

ptb1.Out
x = 1.800

BT8: Cho 2 số a, b, c (a, b, c ≠ 0).

Yêu cầu: Giải phương trình bậc hai ax2 + bx + c = 0.
Input: Đọc từ tệp ptb2.Inp chứa 3 số a, b, c.
Giáo viên: Phạm Thị Khánh

7

Trường THPT Trần Hưng Đạo


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

Output: Ghi vào tệp ptb2.Out kết quả tìm được.
Ví dụ:
ptb2.Inp
2 2 3

ptb2.Out

ptb2.Inp

PTVN

2 5 2

ptb2.Out
X1 = -0.5
X2 = -2.0

BT9: Cho 2 số x, y. Yêu cầu: Tính giá trị của biểu thức Z với
 x2  y 2


Z  x  y
0,5


nếu x2 + y2 ≤ 1
nếu x2 + y2 ≥ 1 và y ≥ x
nếu x2 + y2 ≥ 1 và y < x

Input: Đọc từ tệp Tinh.Inp chứa 2 số x, y.
Output: Ghi vào tệp Tinh.Out kết quả tìm được.
Ví dụ:
Tinh.Inp
0.5 0.1

Tinh.Out

Tinh.Inp

Tinh.Out

0.26

2 2.5

4.5

Tinh.Inp
2 1


Tinh.Out
0.5

PHẦN 3: Hướng dẫn học sinh thực hành các bài tập trên máy tính
Giáo viên yêu cầu học sinh ghi nhớ trình tự thực hành một bài tốn qua 6 bước
sau:
B1: Soạn thảo chương trình giải bài toán: Program .... End.
B2: Lưu bài với tên trùng với tên tệp Inp, Out (VD: Tong2so.Pas;
Tong2so.Inp; Tong2so.Out).
B3: Đưa con trỏ đến phần tên của tệp Inp, bấm Ctrl + Enter, bấm Enter 2
lần, gõ các giá trị bất kì theo đề bài cho trong tệp Inp, mỗi giá trị cách
nhau 1 dấu cách
B4: Chọn tệp chương trình Pas, đưa con trỏ đến phần tên của tệp Out, bấm
Ctrl + Enter, bấm Enter 2 lần
B5: Hiển thị 3 tệp cùng một lúc trên màn hình: Vào menu Window / Tile
B6: Đưa con trỏ vào tệp Pas, bấm Ctrl + F9, chạy chương trình, kiểm tra kết
quả ở tệp Out. Nếu chương trình có lỗi thì sửa lỗi và thực hiện lại B6
Giáo viên thực hành trực tiếp trên bài toán ở ví dụ 1

Giáo viên: Phạm Thị Khánh

8

Trường THPT Trần Hưng Đạo


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

PHẦN 4: Rèn luyện kĩ năng đọc/ghi dữ liệu bằng việc đưa ra các dạng dữ liệu có
trong tệp Input

Dạng 1: Dữ liệu là số trong tệp INPUT được xác định trước
Với dạng dữ liệu này giáo viên sẽ gợi cho học sinh ghi nhớ sâu hơn về 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 các số trong dãy trên.
Input: Đọc từ tệp Tongday.Inp 10 số nguyên, mỗi số cách nhau 1 dấu cách.
Output: Ghi vào tệp Tongday.Out kết quả tìm được
Ví dụ:
Tongday.Inp

Tongday.Out

4 6 7 8 9 2 6 5 1 5

53

Cách 1: Đọc 10 giá trị bằng 1 biến đơn
Program Tinh;
Giáo viên: Phạm Thị Khánh

9

Trường THPT Trần Hưng Đạo


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

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 do
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 này học sinh có thể áp dụng cho bài
tốn có nhiều u cầu cần xử lí dữ 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 do

begin Read(f1, a[i]); S := S + a[i]; end;

Write(f2, S); Close(f1); Close(f2);
End;
Từ bài toán này giáo viên gợi ý cho học sinh thực hành với số lượng giá trị trong
dãy lớn hơn.
VD2: Cho dãy gồm N số nguyên.
Yêu cầu: Tính tổng của N số ngun đó.
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 mỗi số cách nhau 1 dấu cách.
Output: Ghi vào tệp Tongday.Out kết quả tìm được
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ĩ 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

Tongday.Inp

Tongday.Out

7

42


4 6 7 8 9 2 6
Ở bài toán này giáo viên hướng dẫn học sinh xác định được dãy số này gồm N
số và 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 do
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: mỗi dòng gồm 2 số nguyên a và b; mỗi số cách
nhau 1 dấu cách.
Yêu cầu: Tìm ước chung lớn nhất của mỗi cặp số (a, b).
Output: Ghi vào tệp UCLN.Out gồm N dịng, mỗi dịng là kết quả tìm được
ứng với từng cặp số (a, b).
Ví dụ:
UCLN.Inp


UCLN.Out

3

5

5 25

1

7 11

9

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ĩ 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

Đối với bài tốn này học sinh có thể nhận biết được việc tìm UCLN của các cặp
(a, b) là N lần do đó ta cần đọc dữ liệu theo từng dịng, tìm UCLN và ghi kết quả vào
tệp. Hai bài tốn trên chỉ có một kết quả nên có thể dùng thủ tục Write hoặc Writeln
để ghi vào tệp OUT. Bài tốn có nhiều kết quả UCLN, mỗi kết quả trên 1 dịng thì 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 do
begin Read(f1, a, b); While a <> b do
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 một dãy gồm 10 số nguyên.
Yêu cầu: Đếm số lượng số chẵn, số lượng số lẻ trong dãy đó.
Input: Đọc từ tệp ChanLe.Inp chứa 1 dãy gồm 10 số nguyên, mỗi số cách nhau
1 dấu cách.
Output: Ghi vào tệp ChanLe.Out kết quả tìm được.
Ví dụ:
ChanLe.Inp
3 6 7 8 9 2 6 5 1 5

ChanLe.Out
So luong so chan la: 4

So luong so le la: 6

BT2: Cho một dãy gồm N số nguyên dương.
Yêu cầu: Kiểm tra xem trong dãy có bao nhiêu 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ĩ 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

- Dòng 1:1 số nguyên N (1 < N < 10000)
- Dòng 2: gồm N số nguyên dương, mỗi số cách nhau 1 dấu cách.
Ouput: Ghi vào tệp NguyenTo.Out các số ngun tố tìm được, mỗi số cách
nhau 1 dấu cách
Ví dụ:
NguyenTo.Inp

NguyenTo.Out

15

2 3 5 7 11 13

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Kết quả ghi vào tệp OUT là các số nguyên tố, mỗi số cách nhau 1 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 quả cần ghi.

Ví dụ: Write(f2, a, ‘ ‘);
BT3: Số hồn hảo được định nghĩa là số có tổng các ước số của nó (trừ nó) bằng
chính nó. Ví dụ: Số 6, 28 là các số hồn hảo
Vì 6 có các ước số là 1, 2, 3, 6 mà 1 + 2 + 3 = 6
28 có các ước số là 1, 2, 4, 7, 14, 28 mà 1 + 2 + 4 + 7 + 14 = 28
Cho dãy gồm N số nguyên dương.
Yêu cầu: Tính tổng các số lẻ và kiểm tra xem có bao nhiêu số hồn hảo trong
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, mỗi số cách nhau 1 dấu cách.
Output: Ghi vào tệp Hoanhao.Out gồm 2 dòng:
- Dòng 1: Tổng các số lẻ của dãy.
- Dòng 2: Các số hồn hảo tìm được, mỗi số cách nhau 1 dấu cách
Ví dụ:
HoanHao.Inp

Hoanhao.Out

10

53

6 35 4 12 28 7 496 9 11 120

6 28 496

Học sinh có thể á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 của N để khai báo số lượng phần tử của 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ĩ 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

BT4: Cho dãy gồm N số nguyên.
Yêu cầu: Tìm GTLN trong dãy và sắp 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, mỗi số cách nhau 1 dấu cách.
Output: Ghi vào tệp Sapxep.Out gồm 2 dòng:
- Dòng 1: GTLN của dãy
- Dòng 2: Dãy đã sắp xếp, mỗi số cách nhau 1 dấu cách
Ví dụ:
Sapxep.Inp

Sapxep.Out

10

745

6 35 4 12 28 745 8 9 11 120

4 6 8 9 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 các chữ số của từng số.
Input: Đọc vào từ tệp Tongchuso.Inp gồm:
- Dòng 1: 1 số nguyên dương N (N ≥ 1).
- N dòng tiếp theo: mỗi dòng 1 số nguyên dương (0 < ai ≤ 106).
Output: Ghi vào tệp Tongchuso.Out gồm N dòng, mỗi dòng là một kết quả
tính được.
Ví dụ:
Tongchuso.Inp

Tongchuso.Out

3

7

25

9

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 bằng cách chuyển đổi tất cả dữ liệu sang dạng
nhị phân (hệ đếm cơ số 2). Hệ nhị phân là một hệ đếm sử dụng 2 kí tự để biểu diễn
một giá trị số, bằng tổng số các lũy thừa của 2. Hai ký tự đó thường là 0 và 1.
Giáo viên: Phạm Thị Khánh


14

Trường THPT Trần Hưng Đạo


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

Ví dụ: Số A = 5  A = 22 + 20. Do đó 5 = 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 từng số trong dãy sang hệ nhị phân.
Input: Đọc vào từ tệp Nhiphan.Inp gồm:
- Dòng 1: 1 số nguyên dương N (N ≥ 1).
- N dòng tiếp theo: mỗi dòng 1 số nguyên dương (0 < ai ≤ 100).
Output: Ghi vào tệp Nhiphan.Out gồm N dòng, mỗi dịng là một kết quả biểu
diễn được.
Ví dụ:
Nhiphan.Inp

Nhiphan.Out

Dạng 2: Dữ liệu dạng số trong tệp INPUT không được xác định trước
Với dạng dữ 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(<biến tệp>) : Trả về giá trị True nếu con trỏ tệp đang chỉ tới cuối
dòng.
* Hàm Eof(<biến tệp>)

: Trả về giá trị True nếu con trỏ tệp đang chỉ tới cuối


tệp.
Ví dụ mơ tả cấu trúc 1 tệp văn bản (chữ in đậm trong file sẽ không được thể
hiện)

VD.INP
VD.INP

3 6 Eoln

5 7 3 8 6 9 4 5 6 7 9 Eoln

74 3 Eoln

Eof

45 69 Eoln
Eof
VD1: Cho tệp Tongday.Inp chứa 1 dãy gồm nhiều số nguyên, mỗi số cách nhau 1
dấu cách. Đọc và tính tổng của dãy số nguyên đó. Kết quả 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ĩ 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


Tongday.Inp

Tongday.Out

4 6 7 8 9 2 6 5 1 5

53

Ta có thể sử dụng 2 cách đọc giá trị của VD1 trong dạng 1.
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) do

{ Trong khi chưa kết thúc tệp thì đọc lần lượt từng
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 1 sử dụng vòng FOR để đọc N giá trị hoặc xác định N lần
đọc giá trị từ tệp INP. Với dạng 2 sử dụng vòng WHILE để đọc lần lượt các giá trị
theo yêu cầu cho đến cuối tệp.
VD2: Một trường THPT tổ chức cho giáo viên và học sinh đi cắm trại, sinh hoạt
ngoài trời ở vườn quốc gia Cúc Phương. Để lê lịch đến thăm khu trại của 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ó tọa độ
(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, vị trí trại
của giáo viên chủ nhiệm đều có tọa độ ngun (x, y).
u cầu: 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 (lấy 2 chữ số phần thập phân).
Input: Đọc từ tệp TRAI.Inp gồm nhiều dòng, mỗi dòng là cặp số nguyên (x,
y) cách nhau 1 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ĩ 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

Output: Ghi vào tệp TRAI.Out gồm nhiều dòng, mỗi dòng là một khoảng cách
tìm được tương ứng với từng cặp số (x, y)
Ví dụ:
TRAI.Inp

TRAI.Out

5 9


10.30

12 16

20.00

56 68

88.09

23 29

37.01
Bài tập áp dụng

BT1: Số chính phương (hay cịn gọi là số hình vng) là số tự nhiên có căn bậc 2 là
một số tự nhiên, hay nói cách khác, số chính phương là bình phương (lũy
thừa bậc 2) của một số tự nhiên. Cho dãy số nguyên.
Yêu cầu: Kiểm tra các số trong dãy có phải là số chính phương hay khơng?
Input: Đọc từ tệp Cphuong.Inp gồm nhiều dòng, mỗi dòng là một số nguyên
dương
Output: Ghi vào tệp Cphuong.Out gồm nhiều dòng, mỗi dịng là chữ CO
hoặc KHONG
Ví dụ:
Cphuong.Inp

Cphuong.Out

9


CO

24

KHONG

20

KHONG

169

CO

25

CO

BT2: Cho dãy số ngun dương.
Yêu cầu: Tính tổng các chữ số của từng số trong dãy.
Input: Đọc từ tệp Tongchuso.Inp chứa 1 dãy số nguyên dương, mỗi số cách
nhau 1 dấu cách.
Output: Ghi vào tệp Tongchuso.Out gồm nhiều dòng, mỗi dòng là 1 kết quả
tính được
Giáo viên: Phạm Thị Khánh

17

Trường THPT Trần Hưng Đạo



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

Ví dụ:
Tongchuso.Inp

Tongchuso.Out

5 67 567 1956

5
13
18
21

BT4: Cho dãy số nguyên dương.
Yêu cầu: Với mỗi số đã cho hãy xác định số lượng ước số của nó.
Ví dụ với n = 2, a1 = 4, a2 = 12, số lượng ước số của 4 là 3 (1, 2, 4), số
lượng ước số của 12 là 6 (1, 2, 3, 4, 6, 12).
Input: Đọc từ tệp DEMUOC.INP gồm nhiều dòng, mỗi dòng 1 số nguyên
dương.
Output: Ghi vào tệp DEMUOC.OUT gồm nhiều dòng, mỗi dòng là số lượng
ước số của từng số.
Ví dụ:
DEMUOC.INP

DEMUOC.OUT

17


2

4

3

12

6

Dạng 3: Dữ liệu trong tệp INPUT có chứa xâu kí tự (chữ cái)
Với dạng dữ liệu này sẽ giúp học sinh gợi nhớ lại các thao tác xử lý đối với
kiểu dữ liệu xâu STRING.
VD1: Cho 2 xâu là họ tên của 2 học sinh.
Yêu cầu: Hãy đưa ra họ tên dài hơn, nếu bằng nhau đưa ra họ tên của học sinh
thứ 2.
Input: Đọc vào từ tệp HT.Inp gồm 2 dòng, mỗi dòng là họ tên của một người.
Output: Ghi vào tệp HT.Out chỉ 1 dòng duy nhất là kết quả tìm được.
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ĩ 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
Tran Ngoc Bao

Mai Minh Hoang

Với bài toán này giáo viên cần hướng dẫn học sinh sử dụng cấu trúc Readln để
đọc từng dịng dữ liệu (họ tên của từng 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 cả chữ cái và chữ số.
Yêu cầu: Tạo xâu s2 chỉ gồm các chữ số có trong s1 (giữ nguyên thứ tự xuất
hiện của chúng).
Input: Đọc từ tệp Tachso.Inp chứa xâu s1 (không quá 255 kí tự).
Output: Ghi vào tệp Tachso.Out xâu s2.
Ví dụ:
Tachso.Inp
hfht85an8dj9w02

Tachso.Out
858902

Với bài tốn này giáo viên có thể hướng dẫn học sinh đọc dữ liệu theo một trong
hai cách
Cách 1: Đọc dữ liệu vào xâu s1 sau đó kiểm tra từng kí tự trong s1 có phải là 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ĩ 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

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) do if (s[i]>='0') and (s[i]<='9') then write(f2,s[i]);
Close(f1);close(f2);
End.
Cách 2: Đọc lần lượt từng kí tự trong tệp Tachso.Inp và kiểm tra ln (dùng thủ tục
Read). Vì độ dài của xâu s1 là khơng xác định trước nên phải sử dụng cấu
trúc kiểm tra kết thúc tệp hoặc kết thúc dịng.
Chương trình:
Program Tachso;
Var f1, f2 : text;
ch : char;
Begin
Assign(f1,'tachso.inp');

reset(f1);


Assign(f2,'tachso.out');

rewrite(f2);

While not eof(f1) do

{có thể thay eof thành eoln)

begin
read(f1,ch);
if (ch>='0') and (ch<='9') then write(f2,ch);
end;
Close(f1);close(f2);
End.
VD3: Để xây dựng một chương trình đơn giản để quản lý lương nhân viên của xí
nghiệp may người ta tạo một bảng thông tin. Dữ liệu nhập bao gồm: Họ tên (tối
đa 20 kí tự), Hệ số lương (là số thập phân).

Giáo viên: Phạm Thị Khánh

20

Trường THPT Trần Hưng Đạo


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

u cầu: Tạo bảng lương gồm họ tên, hệ số lương và lương. Trong đó lương
được tính theo cơng thức: hệ số lương * 1210000.
Input: Đọc từ tệp Luong.Inp gồm (theo cấu trúc ví dụ)

- Dịng 1: 1 số ngun dương N (1 < N ≥ 100 – số lượng nhân viên)
- N dịng tiếp theo, mỗi dịng gồm 2 thơng tin: họ tên và hệ số lương, cách
nhau 3 dấu cách
Output: Ghi vào tệp Luong.Out gồm N dòng, mỗi dòng gồm 3 thông tin: họ
tên, hệ số lương, lương. Mỗi thơng tin cách nhau 3 dấu cách.
Ví dụ:
Luong.Inp

Luong.Out

3

Tran Manh Ha

3.33 4029300

Tran Manh Ha

3.33

Nguyen Thu Hien

2.34 2831400

Nguyen Thu Hien

2.34

Pham Van Nam


4.32 5227200

Pham Van Nam

4.32

Vì mỗi dịng dữ liệu cần xử lí gồm cả chữ và số nên giáo viên hướng dẫn học
sinh đọc thơng tin họ tên vào biến xâu có độ dài 30, hệ số lương vào biến số thực.
Chương trình:
Program qlluong;
Var f1, f2 : text;
ht : string[20];
hs, luong : real;
n, i : byte;
Begin
Assign(f1, 'luong.inp'); Reset(f1);
Assign(f2, 'luong.out'); Rewrite(f2);
Readln(f1,n);
For i := 1 to N do
begin
Readln(f1, ht, hs);
luong := 1210000 * hs;
Giáo viên: Phạm Thị Khánh

21

Trường THPT Trần Hưng Đạo


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


Writeln(f2, ht, ' ', hs:4:2, ' ', luong:0:0);
{ lương là số thực nhưng khi in ra phải là số nguyên nên phần
thập phân để là 0 }
end;
Close(f1);Close(f2);
End.
Bài tập áp dụng
BT1: Cho tệp DNXau.Inp gồm nhiều dòng, mỗi dòng là một xâu kí tự (khơng q
255 kí tự). Hãy viết các xâu theo thứ tự ngược lại, kết quả ghi vào tệp
DNXau.Out mỗi xâu trên một dịng.
Ví dụ:
DNXau.Inp

DNXau.Out

Abcd

dcbA

abcba

abcba

Tin hoc

coh niT

BT2: Cho tệp Xoadaucach.Inp gồm
- Dòng 1: l số nguyên dương N (1 ≤ N ≤ 100)

- N dòng tiếp theo: mỗi dòng là một xâu kí tự (khơng q 255 kí tự).
u cầu: Hãy xóa các dấu cách trong từng xâu và ghi kết quả vào tệp
Xoadaucach.Out, mỗi xâu trên một dịng.
Ví dụ:
Xoadaucach.Inp

Xoadaucach.Out

2

abcd

ab cd

Tinhoc

Tin hoc
BT3: Xâu đối xứng có tính chất: đọc nó từ phải sang trái cũng thu được kết quả
giống như đọc từ trái sang phải (còn được gọi là xâu Palindrome).
Yêu cầu: Kiểm tra xem một xâu có phải là xâu đối xứng hay không?
Input: Đọc từ tệp Dxung.Inp chứa nhiều dịng, mỗi dịng là 1 xâu (khơng q
255 kí tự).
Giáo viên: Phạm Thị Khánh

22

Trường THPT Trần Hưng Đạo


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


Output: Ghi vào tệp Dxung.Out gồm nhiều dòng mỗi dòng là câu trả lời “DX”
hoặc “K”.
Ví dụ:
Dxung.Inp

Dxung.Out

Abba

DX

abbA

K

abcacba

DX

BT4: Cho tệp Thaytu.Inp chứa một xâu kí tự (khơng q 255 kí tự). Hãy thay thế tất
cả các cụm kí tự ‘anh’ bằng cụm kí tự ‘em’, kết quả ghi vào tệp Thaytu.Out là
xâu đã thay thế.
Ví dụ:
Thaytu.Inp

Thaytu.Out

Toi co anh trai, anh ay ten la Nam


Toi co em trai, em ay ten la Nam

BT5: Cho tệp Demso.Inp chứa nhiều dịng một xâu kí tự (khơng q 100 kí tự). Hãy
cho biết có bao nhiêu chữ số xuất hiện trong xâu, kết quả ghi vào tệp
Demso.Out.
Ví dụ:
Demso.Inp

Demso.Out

Hf ht85a n8dj 9w02

6

bvhf mslakds kfjs

0

BT6: (Dành cho học sinh Khá – Giỏi)
Từ trong xâu được hiểu là dãy các kí tự liên tiếp. Cho một xâu S có độ dài
khơng q 200 kí tự.
u cầu: Đếm số lượng từ có trong xâu S.
Input: Đọc từ tệp Demtu.Inp gồm nhiều dòng, mỗi dòng là một xâu S.
Output: Ghi vào tệp Demtu.Out gồm nhiều dòng, mỗi dòng là số lượng từ của
từng xâu.
Ví dụ:
Demtu.Inp

Demtu.Out


Cong hoa xa hoi chu nghia Viet Nam
Giáo viên: Phạm Thị Khánh

8
23

Trường THPT Trần Hưng Đạo


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

shd

jcdcjd dvjv

jffkbl

4

dhfj

1

BT7: (Dành cho học sinh Khá – Giỏi)
Chuẩn hóa xâu là việc loại bỏ các dấu cách thừa ở đầu, giữa, cuối xâu và giữa
các từ để lại một dấu cách. Cho một xâu S có độ dài khơng q 200 kí tự.
u cầu: Thực hiện chuẩn hóa xâu S.
Input: Đọc từ tệp Chuanhoa.Inp gồm nhiều dòng, mỗi dòng là một xâu S.
Output: Ghi vào tệp Chuanhoa.Out gồm nhiều dòng, mỗi dịng là kết quả
chuẩn hóa của từng xâu.

Ví dụ:
Chuanhoa.Inp
Tran Ngoc

Chuanhoa.Out

Minh

Le Phuong

Tran Ngoc Minh
Linh

Le Phuong Linh

III. Hiệu quả do sáng kiến đem lại
Mỗi giáo viên Tin học đều có các phương pháp rèn luyện kĩ năng lập trình khác
nhau cho học sinh để gây hứng thú học tập. Nhiều học sinh đã biết vận dụng các thuật
toán của các bài toán cơ bản đã biết để giải quyết các bài tốn mở rộng, một số em có
thể tự tìm được lời giải được một số bài tốn khác khó hơn. Với cách làm đơn giản
này các em học sinh sẽ có hứng thú để tiếp tục tìm hiểu và giải quyết các bài tốn
khác, các thầy, cơ có thể áp dụng cách làm này với nhiều dạng bài tập khác nhau để
thấy được hiệu quả.
Nam Định, ngày 25 tháng 5 năm 2017
Xác nhận của BGH

Xác nhận của Tổ CM

Người viết


Phạm Thị Khánh

Giáo viên: Phạm Thị Khánh

24

Trường THPT Trần Hưng Đạo



×