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

(Sáng kiến kinh nghiệm) bồi dưỡng học sinh giỏi lớp 8 thông qua việc học câu lệnh lặp for to do trong turbo pascan

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 (226.43 KB, 22 trang )

PHẦN I. MỞ ĐẦU
1.1. Lý do chọn đề tài:
           Hiện nay, Bộ giáo dục và đào tạo yêu cầu đẩy mạnh ứng
dụng Công nghệ thông tin trong ở tất cả các cấp học, bậc học,
ngành học. Xem Công nghệ thông tin như là một công cụ hỗ trợ
đắc lực nhất cho việc đổi mới phương pháp dạy học. Với mỗi cấp
học các em không chỉ được làm quen với các cách học thông thường, các cuộc
thi quen thuộc như: Thi học kì, thi vượt cấp, thi chọn học sinh giỏi…mà các em
có thể: Học trực tuyến, tham gia các cuộc thi trên mạng Internet… Từ đó giúp
học sinh tự học tích cực, sáng tạo, có cơ hội tiếp xúc nội dung học tập theo nhiều
cách khác nhau.
Trên tinh thần đó hàng năm BCH tỉnh Đồn đã phối hợp với Sở GD&ĐT
tổ chức hội thi Tin học trẻ cho học sinh ba khối (THPT, THCS và Tiểu học).
Với THCS thơng thường hình thức các em dự thi là dự thi cá nhân (Bảng B).
Nội dung hội thi Bảng B như chúng ta đã biết học sinh phải thi hai vòng: Vòng
thứ nhất: Thi trắc nghiệm (thời gian 30 phút) - Kiến thức chung về máy tính,
phần mềm và lập trình. Với những kiến thức này thì các em đã được tiếp thu
trên lớp qua các bài học. Đồng thời các em cũng có thể thu thập thêm những
kiến thức đó qua sách báo, qua các phương tiện thơng tin, qua truy cập Internet,
… Vì đó chỉ là những kiến thức thông qua: Đọc, nghe và quan sát….là các em
có thể hiểu và ghi nhớ được. Do vậy, ở vòng thi này đa số các em làm được và
đạt điểm khá cao. Còn vòng thi thứ hai: Thi lập trình (thời gian 120 phút) – Viết
chương trình bằng ngôn ngữ Pascal (Free Pascal). Với phần thi này các em phải
lập trình để giải các bài tốn bằng ngơn ngữ lập trình Turbo Pascal. Trong khi
đó, những kiến thức để các em có thể dự thi phần này lại không được học trên
lớp do hầu hết ở trường THCS trong Tỉnh các em học theo chương trình: Học tự
chọn cho học sinh khối lớp 6-7, học nghề cho học sinh khối lớp 8. Vậy để học
sinh có thể tự tin khi thi phần thi thực hành là một giáo viên Tin học tôi phải suy
nghĩ và trăn trở rất nhiều là làm thế nào cho các em phải nắm chắc cú pháp các
câu lệnh, phát huy được tính tích cực, chủ động, tự lực, sáng tạo của học sinh;
rèn được kỹ năng thực hành thành thạo, biết vận dụng kiến thức, kỹ năng vào


giải quyết các bài toán thực tiễn và nhất là nâng cao được chất lượng học sinh
giỏi cấp Tỉnh.
Với nhiều năm liên tục bồi dưỡng học sinh giỏi của trường từ năm 2005 đến
nay tôi nhận thấy rằng trong vòng thi thực hành của hội thi Tin học trẻ khối
THCS (Bảng B) dạng bài thi có sử dụng dụng lệnh lặp có số lần biết trước For…
to…do là không thể thiếu. Đây là một dạng bài khó. Gặp dạng tốn này, phần
lớn học sinh rất lúng túng và mất nhiều thời gian để cố nhớ xem bài này đã được
thầy, cô giáo làm như thế nào, học sinh rất khó hình dung ra cách giải (thuật
tốn) cũng như cách trình bày (chương trình). Một bài giải đúng yêu cầu máy
phải chạy được và cho ra kết quả đúng. Với phần lập trình ngay trên máy có khi
chỉ là sơ xuất nhỏ như: Thiếu dấu phẩy, dấu chấm, dấu mở ngoặc hoặc dấu
cách….chứ chưa cần nói đến thuật tốn có đúng hay khơng trong khi trình bày
thì cũng sinh ra lỗi và máy không chạy được. Như vậy, với vòng thi lý thuyết
1


các em đạt điểm cao nhưng vòng thi thực hành điểm dưới trung bình thì danh
hiệu học sinh giỏi cấp Tỉnh môn Tin học cũng tuột khỏi tầm tay.
Với những lý do trên khiến tôi quyết định chọn đề tài: “Bồi dưỡng học sinh
giỏi lớp 8 thông qua việc học câu lệnh For…to…do trong Turbo Pascal”.
1.2. Mục đích nghiên cứu:
Nhằm giúp học sinh nắm chắc được cú pháp lệnh lặp For..to..do cũng như
cách thực hiện để từ đó nâng cao thêm về mặt kiến thức, kỹ năng thực hành,
phát huy hết năng lực để tìm ra thuật tốn tối ưu khi làm các bài tập và đặc biệt
đạt kết quả cao nhất trong các kỳ thi Tin học trẻ cấp Tỉnh, cấp Quốc gia.
1.3. Đối tượng nghiên cứu :
Học sinh (khối lớp 8) trong đội tuyển dự thi Tin học trẻ của trường THCS
Lý Thường Kiệt - Hà Trung – Thanh Hóa.
1.4. Phương pháp nghiên cứu:
- Đề tài của tơi được hồn thành thơng qua phương pháp nghiên cứu xây

dựng cơ sở lý thuyết (nghiên cứu qua tài liệu: Tin học dành cho học sinh THCS
quyển 3; Turbo pascal 7.0 của PGS-PTS Bùi Thế Tâm; Lập trình Turbo pascal
7.0 của Hồng Hồng; Em tập lập trình của Đỗ Trần Hùng ) để xác định những
nội dung kiến thức cần thiết phục vụ cho đề tài.
- Ngoài ra, đề tài cũng sử dụng phương pháp thực nghiệm sư phạm tổng
kết kinh nghiệm của các khóa học trước áp dụng cho khóa học sau.

2


PHẦN II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM
2.1. Cơ sở lý luận của sáng kiến kinh nghiệm
Để đáp ứng nhu cầu của sự phát triển đất nước, nền giáo dục Việt Nam
phải  thực hiện một sự đổi mới sâu sắc và toàn diện về nội dung lẫn phương
pháp dạy học như tinh thần của Nghị quyết TW2 - khóa VIII của Đảng Cộng
Sản Việt Nam đã nêu: “Đổi mới mạnh mẽ phương pháp giáo dục - đào tạo,
khắc phục lối truyền thụ một chiều, rèn luyện thành nếp tư duy sáng tạo của
người học, từng bước áp dụng các phương pháp tiên tiến và phương tiện hiện
đại vào quá trình dạy học, đảm bảo điều kiện thời gian tự học, tự nghiên cứu
cho học sinh”. Vì vậy, tơi chọn đề tài: “Bồi dưỡng học sinh giỏi lớp 8 thông
qua việc học câu lệnh For…to…do trong Turbo Pascal” với mong muốn
đóng góp một phần nhỏ vào việc nâng cao hiệu quả bồi dưỡng đội tuyển dự thi
Tin học trẻ cấp Tỉnh.
Lệnh lặp For…to…do là một dạng lệnh rất khó đối với học sinh ở bậc trung
học cơ sở, khi học các em cảm thấy ngại học, học cảm thấy nhàm chán, khó hình
dung, khơng biết cách vận dụng vào để giải các bài tốn. Trong khi đó, lệnh lặp
for…to…do là lệnh mà hầu hết bài toán nào trong thi học sinh giỏi Tin học trẻ
đều sử dụng đến. Nên khi dạy các em đến lệnh lặp này tôi thiết nghĩ để các em
có thể vận dụng lệnh này một cách thuần thục, linh hoạt thì trước hết các em cần
phải nắm chắc cú pháp, hiểu rõ cách thực hiện của lệnh, được làm quen với

nhiều dạng bài tập liên quan đến lệnh For…to…do thì từ đó các em mới biết vận
dụng để giải bài toán một cách ngắn gọn, tối ưu, tiết kiệm được thời gian khi
thực hành. Đồng thời còn gây hứng thú, kích thích và phát triển tinh thần say
mê, sáng tạo, thích thú học lập trình và đặc biệt đạt được kết quả cao trong kỳ
thi học sinh giỏi Tin học trẻ cấp Tỉnh.
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm:
Do chương trình học Tin học cấp THCS ở Tỉnh ta đó là: Học sinh học tự
chọn với khối lớp 6-7, còn ở khối lớp 8 các em không được học Tin học dành
cho THCS quyển 3 mà lại học chương trình: Nghề Tin học ứng dụng. Trong khi
học sinh dự thi Tin học trẻ với vịng thi thực hành lập trình giải tốn bằng ngơn
ngữ Turbo Pascal thì những kiến thức cơ bản lại có trong chương trình Tin học
dành cho THCS quyển 3. Do vậy, khi bồi dưỡng cho học sinh dự thi Tin học trẻ
cấp Tỉnh đa số giáo viên đều rất ngại dạy do phải mất rất nhiều thời gian dạy
cho các em từ những kiến thức cơ bản nhất, chưa nói đến phải trăn trở, nghiên
cứu rất nhiều để dạy nâng cao cho các em và dạy để các em đạt được kết quả
cao trong các kỳ. Mặt khác, theo kinh nghiệm giảng dạy tôi thấy học sinh khi
học đến lệnh lặp For…to…do các em đều thấy rất khó: khó hình dung, khó
khơng hiểu cách thực hiện của lệnh, học cứ cảm giác mơ mơ màng màng dẫn
đến ngại học và ngại thực hành (do không biết vận dụng lệnh lặp vào giải các
bài tập nên khi test chương trình là máy báo lỗi, khơng chạy được). Với nhiều
năm bồi dưỡng học sinh giỏi tôi đã rút ra được một số kinh nghiệm nho nhỏ khi
dạy đến lệnh lặp For…to…do trong Turbo Pascal mà tôi cảm thấy học sinh tiếp
thu bài rất tốt, biết vận dụng vào giải bài tập một cách linh hoạt và đạt kết quả
cao trong các kỳ thi Tin học trẻ cấp Tỉnh, cấp Quốc gia.
3


2.3. Các sáng kiến kinh nghiệm hoặc các giải pháp đã sử dụng để giải
quyết vấn đề
2.3.1. Các giải pháp:

Để học sinh đạt được kết quả cao trong các kỳ thi Tin học trẻ cấp Tỉnh, cấp
Quốc gia tôi phải trăn trở, học hỏi và nghiên cứu rất nhiều. Cụ thể: Đổi mới
phương pháp dạy học khi học sinh học lệnh lặp For là:
Giải pháp 1: Cung cấp cho HS những kiến thức cơ bản của vịng lặp
For...to...do:
- Mơ tả lệnh lặp For...to...do.
- Cú pháp và cách thực hiện của vịng lặp For, các ví dụ minh họa khi sử
dụng vòng lặp For...to...do .
Giải pháp 2: Rèn luyện cho học sinh khả năng tư duy, sáng tạo và phân tích
thuật toán (hướng dẫn học sinh cách giải các bài tập như Tốn học bằng cách
nói và viết. Từ đó u cầu học sinh đưa ra thuật toán ứng với mỗi bài tập), kĩ
năng giải bài tập trên máy tính.
Giải pháp3: Phân dạng bài tập và phương pháp giải
- Với mỗi bài tập sau khi đã đưa ra thuật toán. Yêu cầu học sinh áp dụng
ngơn ngữ lập trình vào giải bài tập và thực hành ngay trên máy. Trong quá trình
thực hành nếu gặp lỗi thì học sinh phải tự sửa các lỗi đó, trường hợp sửa lỗi
khơng được có thể nhờ bạn hoặc cơ giáo giúp. Khi chương trình chạy hồn
chỉnh tơi u cầu các em ghi các bài tập đã chạy được trên máy ra một quyển vở
riêng nhằm giúp các em khắc sâu thêm thuật toán cũng như cách viết chương
trình.
- Với mỗi dạng bài tập tơi ra nhiều bài tập tương tự, bài tập nâng cao để
giao bài về nhà cho học sinh.
- Sau mỗi bài tập thực hành tôi đều nhận xét, củng cố và phát triển bài tốn
để có bài tốn mới. Như vậy học sinh sẽ có tư duy linh hoạt và sáng tạo.
Giải pháp 4: Cho HS tiếp cận với đề thi học sinh giỏi cấp Tỉnh qua các năm
- Phân dạng bài tập qua các đề thi.
- Cho học sinh làm các bài tập của các đề thi những năm trước để các em tập
làm quen và khơng cịn bỡ ngỡ khi thi. Với mỗi bài tập tôi chấm điểm cho học
sinh sau khi học sinh hoàn thành việc chạy chương trình trên máy và chỉ ra sai
lầm cũng như nguyên nhân dẫn đến sai lầm đó (nếu có) -> biện pháp khắc phục

để học sinh nắm chắc từng phần kiến thức và làm chặt chẽ từng dạng bài tập.
Giải pháp 5: Cho học sinh làm bài kiểm tra thử
- Ra đề kiểm tra cho học sinh làm bài tập trên máy tính, tơi bấm giờ và
chấm điểm. Đề có các mức độ nhận thức: nhận biết - thông hiểu - vận dụng phân tích - tổng hợp - đánh giá.
Với phương pháp này qua các kỳ thi Tin học trẻ học sinh đạt giải rất cao. Do
vậy, qua sáng kiến kinh nghiệm này tôi mạnh dạn đưa ra một phương pháp nhỏ
để các bạn đồng nghiệp tham khảo góp phần đưa chất lượng học sinh giỏi Tin
học của Huyện – Tỉnh ngày càng nâng lên.

4


2.3.2. Các biện pháp tổ chức thực hiện các giải pháp
2.3.2.1. Lệnh For…to…do
Mô tả lệnh lặp:
- Đánh răng mỗi ngày hai lần, học Tin học mỗi tuần 2 tiết, mỗi ngày tắm
một lần, sau mỗi phút kim phút của đồng hồ lại chạy lại...
- Học cho đến khi thuộc bài, rửa tách trà cho đến khi sạch, trong cuộc sống,
những hành động trên được gọi là lặp đi lặp lặp lại nhiều. Trong Pascal, cách mô
tả công việc (hành động – lệnh) được lặp lại nhiều lần gọi là cấu trúc lặp.
Cú pháp: For <biến>:=<biểu thức 1> to <biểu thức 2> do
<Lệnh>;
Trong đó: - <biểu thức 1> , <biểu thức 2> là các biểu thức và cùng
kiểu dữ liệu với <biến>. <Biến> có kiểu dữ liệu: Nguyên, liệt kê hoặc lơgic.
- <Lệnh> có thể là một lệnh hoặc nhiều lệnh (nếu nhiều lệnh
phải để trong cặp ghép Begin…end;)
Cách thực hiện:
- Bước 1: Đầu tiên biến nhận giá trị là <biểu thức 1> .
- Bước 2: Sau đó máy kiểm tra điều kiện: biến <= biểu thức 2
- Bước 3: Nếu điều kiện này sai thì máy ra khỏi vịng lặp để thực hiện các

câu lệnh sau For. Nếu điều kiện này là đùng thì máy thực hiện <Lệnh>, sau đó
<biến> được tự động tăng một giá trị: biến:=Succ(biến) và trở lại bước 2.
Sơ đồ khối của lệnh:
Biến=Biểu thức 1
Biến<=Biểu thức
1
True

False

<Lệnh>
Biến:=Succ(biến)
2.3.2.2. Các dạng bài tập:
Dạng 1: Tính tổng trong biểu thức:
VD1:
Tính:
S=1+2+…+n
(với n là số tự nhiên)
Thuật toán:
- Đây là bài toán cấp số cộng ở dạng đơn giản. Học sinh được làm quen
dưới dạng tính tổng n số tự nhiên liên tiếp. Với dạng bài này tôi hướng dẫn học
sinh nên sử dụng vịng lặp For để tính tổng S.
- Để tính S ta cần khởi tạo cho S một giá trị ban đầu (S:=0). Sau đó dùng
vịng lặp For <biến>:=1 to n do, khi đó S:=S+biến.
5


Chương trình
Program
Tong;

Var i, S, n: Integer;
Begin
Write(‘Moi ban nhap n=’);
Readln(n);
S:=0;
For i:=1 to n do S:=S+i;
Writeln(‘Tong cua day so la:’,S:3);
Readln;
End.
Bài tập:
Bài 1: Tính:
1

1

S=1+ 2  ...  n

(với n là số tự nhiên)

Hướng dẫn:
- Nhập n;
- Khởi tạo S:=0;
- Dùng vòng For i:=1 to n do
Bài 2: Tính:

1

1

1


S=1+ 2  4 ...  n

S:=S+1/i;

(với n là số tự nhiên)

Hướng dẫn:
- Nhập n;
- Khởi tạo S:=1;
- Dùng vòng For i:=1 to n do
Bài 3: Tính:

1 1
1
S=1+ 3  5 ...  n

S:=S+1/(2*i);

(với n là số tự nhiên)

Hướng dẫn:

Bài 4: Tính:
Hướng dẫn:

- Nhập n;
- Khởi tạo S:=1;
- Dùng vòng For i:=1 to n do S:=S+1/(2*i+1);
A=12+22+32+…+m2

(với m là số tự nhiên)
- Nhập m; Khởi tạo A:=0;
- Dùng vòng For i:=1 to m do A:=A+i*i;
8

Bài 5: Tính:

2
S=  n 
n 1

108

n

n 100

2



105

n

2

n  97

Hướng dẫn:

- Nhập n;
- Khởi tạo các tổng: S:=0; S1:=0; S2:=0; S3:=0;
- Dùng 3 vịng For để tính tổng S:
For n:=1 to 8 do
S1:=S1+n*n;
For n:=100 to 108 do
S2:=S2+n*n;
For n:=97 to 105 do
S3:=S3+n*n;
S:=S1+S2+S3;
Dạng 2: Tích trong biểu thức
6


VD2:
Tính:
T=1.2…n (với n là số tự nhiên)
Thuật tốn:
- Đây là bài tốn tính tích n số tự nhiên liên tiếp . Ta nên sử dụng
vịng lặp For để tính tích T.
- Để tính T ta cần khởi tạo cho T một giá trị ban đầu (S:=1). Sau đó
dùng vịng lặp For <biến>:=1 to n do, khi đó T:=T*biến.
Chương trình
Program
Tich;
Var
i, T, n: Integer;
Begin
Write(‘Moi ban nhap n=’);
Readln(n);

T:=1;
For i:=1 to n do T:=T*i;
Writeln(‘Tich cua day so la:’,T:3);
Readln;
End.
Bài tập:
Bài 1: Cho số thực a, số tự nhiên n. Hãy tính:
1.
F=an
2.
T=a(a+1)…(a+n-1)
3.
G=a(a-n)(a-2n)(a-3n)…(a-nn)
Hướng dẫn:
1.
F=an  F=a.a…a (n số a)
- Nhập a, n;
Khởi tạo F:=1;
- Dùng vòng For i:=1 to n do F:=F*a;
2.
T=a(a+1)…(a+n-1)
- Nhập a, n;
Khởi tạo T:=1;
- Dùng vòng For i:=1 to n do T:=T*(a+i-1);
3.
G=a(a-n)(a-2n)(a-3n)…(a-nn)
- Nhập a, n;
Khởi tạo G:=a;
- Dùng vòng For i:=1 to n do G:=G*(a-i*n);
Bài 2: Cho số tự nhiên n. Tính:

T= (1 

1
1
1
)(1  2 )...(1  2 )
2
1
2
n

Bài 3: Cho số thực a, số tự nhiên n. Hãy tính:
a)

1
1
1

 .... 
a a  a  1
a ( a  1)...(a  n)

b)

1 1
1
1
 2  2  .... n
a a
a2

a2

c)

a(a-n)(a-2n)(a-3n)….(a-nn)

Dạng 3: Giai thừa
VD3: Tính:
Thuật tốn:

S=1+2!+…+n!

(với n là số tự nhiên)
7


- Khởi tạo: S:=1; gt:=1; (gt: biến tính giai thừa)
- Tính giai thừa: Như ta biết:
1!=1
2!=1!*2
3!=2!*3
4!=3!*4
………
n!=(n-1)!*n
Vậy để tính S ta dùng vịng lặp For:
For i:=2 to n do
Begin
gt:=gt*i;
S:=S+gt;
End;

Chương trình
Program
Giai_thua;
Var
i, n, S, gt: Integer;
Begin
Write(‘Moi ban nhap n=’);
Readln(n);
S:=1;
gt:=1;
For i:=2 to n do
Begin
gt:=gt*i;
S:=S+gt;
End;
Writeln(‘Tong tren la:’,S:3);
Readln;
End.
Bài tập:
Bài 1: Tính:

1

1

S=1+ 2!  3!  ... 

1
n!


(với n là số tự nhiên)

Hướng dẫn:
- Khởi tạo: S:=1; gt:=1;
- Để tính S ta dùng vịng lặp For:
For i:=2 to n do
Begin
gt:=gt*i;
S:=S+1/gt;
End;
Bài 2: Tính: H= 1 

a a2
an

 ... 
1! 2!
n!

(với n là số tự nhiên, a nguyên)

Hướng dẫn:
- Nhập n; nhập a;
- Khởi tạo: H:=1; T:=1; M:=1;
{T: là biến tử của phân số, M là biến mẫu của phân số}
8


- Để tính H ta dùng vịng lặp For:
For i:=1 to n do

Begin
T:=T*a;
M:=M*i;
H:=H+T/M;
End;
Dạng 4: Tính biểu thức có n dấu căn
VD4: Cho số tự nhiên n. Hãy tính:
B= 2  2  ....  2
(n lần dấu căn)
Thuật toán:
- Nhập n (số lượng dấu căn); Khởi tạo giá trị B:=0;
- Tính B: Ta biết:
Khi n=1:
B:=sqtr(2)
Khi n=2:
B:=sqrt(2+ sqtr(2))
hay B:=sqrt(2+B)
Khi n=3:
B:= sqrt(2+ sqtr(2+ sqrt(2))) hay B:=sqrt(2+B)
………………………….
Chương trình:
Program
tinh_can;
Var
B
:Real;
n, i: Integer;
Begin
Write(‘Nhap so luong dau can n=’);
Readln(n);

B:=0;
For i:=1 to n do B:=sqrt(2+B);
Writeln(‘Tong tren la:’,B:3:2);
Readln;
End.
Bài tập: Lập trình đọc giá trị của x, n(số lượng dấu căn) từ bàn phím và tính:
Q= x  x  x  x  ...  x
Hướng dẫn:
- Nhập x  0 và n (số lượng dấu căn).
- Khởi tạo giá trị Q:=0;
- Tính Q: Ta biết:
Khi n=1:
Q:=sqtr(x)
Khi n=2:
Q:=sqrt(x+Q)
………………………….
=> Như vậy, ta sử dụng vòng lặp:
For i:=1 to n do Q:=sqrt(x+Q)
Dạng 5: Tính tổng, tích, trung bình cộng của một dãy số bất kỳ
VD4: Cho số tự nhiên n và các số thực a1, a2, …,an. Hãy tính:
S=a1+a2+…+an
Thuật tốn:
- Nhập n; khởi tạo tổng S:=0;
9


- Dùng vòng lặp For để nhập các giá trị của a, nhập đến đâu tính tổng đến đó.
Chương trình:
Program
tinh;

Var
n, i: Integer;
a, S: Real;
Begin
Write(‘Nhap so lượng các số thực n=’);
Readln(n);
S:=0;
For i:=1 to n do
Begin
Write(‘Nhap gia tri cua a=’); Readln(a);
S:=S+a;
End;
Writeln(‘Tong tren la:’,S:3:2);
Readln;
End.
Bài tập:
Bài 1: Cho số tự nhiên n và các số thực a1, a2, …,an. Hãy tính:
a. T= a1.a2…an
2

2

2

b. F  a1  a2  ...  an

c. H=(a1+a2+…+an)2
Bài 2: Lập trình nhập một dãy số nguyên vào từ bàn phím. Tính tổng các số
dương và trung bình cộng các số âm.
Hướng dẫn:

- Nhập n; khởi tạo tổng S1:=0; S2:=0; d1:=0; d2:=0;
{S1 là tính tổng các số dương, S2 là tính tổng các số âm, d1 là đếm số lượng
các số dương, d2 là đếm số lượng các số âm}
- Dùng vòng lặp For để nhập các giá trị của dãy số nguyên là a, nhập đến
đâu kiểm tra số đó là dương hay âm, nếu là dương thì đếm d1 và cộng vào tổng
S1, nếu là âm thì đếm d2 và cộng vào tổng S2.
- Thông báo tổng các số dương là S1 và trung bình cộng các số âm là
S2/d2;
Bài 3: Nhập một dãy số nguyên. Tính tổng và trung bình cộng các số đã đọc,
khơng tính số 0. Đưa kết quả ra màn hình.
Hướng dẫn:
- Nhập n; khởi tạo tổng S:=0; d:=0;
{S là tính tổng các số đã đọc khác 0, d là đếm số lượng các số khác 0}
- Dùng vòng lặp For để nhập các giá trị của dãy số nguyên a, nhập đến
đâu kiểm tra số đó có khác 0 hay khơng, nếu số đó khác 0 thì đếm d và cộng vào
tổng S.
- Thông báo tổng các số các số đã đọc là S và trung bình cộng là S/d;
Dạng 6: Tính tổng một dãy số đan dấu bất kỳ.
VD6: Cho số tự nhiên n và các số thực a1, a2, …,an. Hãy tính:
10


S=a1-a2+a3-…+(-1)n+1an
Thuật toán:
- Nhập n; khởi tạo tổng S:=0;
- Nhận thấy đây là biểu thức đan dấu, nên dùng thêm một biến d (gọi là
biến dấu), khi đó khởi tạo d:=1;
- Dùng vòng lặp For để nhập các giá trị của a, nhập đến đâu tính tổng đến
đó và đổi dấu cho biến d.
- Thơng báo kết quả S.

Chương trình:
Program
tinh;
Var
n, I,d: Integer;
a, S: Real;
Begin
Write(‘Nhap so lượng các số thực n=’);
Readln(n);
S:=0;
d:=1;
For i:=1 to n do
Begin
Write(‘Nhap gia tri cua a’,i,’=’);
Readln(a);
S:=S+d*a;
d:=-d;
End;
Writeln(‘Tong tren la:’,S:3:1);
Readln;
End.
Bài tập:
Bài 1: Nhập số thực x. Hãy tính:
S x

x3 x5
x 2k 1

 ....  (1) k
3!

5!
(2k  1)!

(k là số tự nhiên)

Hướng dẫn:
- Nhập x; nhập k;
- Khởi tạo S:=x; T:=x; M:=1; d:=1; {S là tổng, T là tử của từng phân
số, M là mẫu của từng phân số, d là biến dấu}
- Dùng vòng lặp For i:=1 to k do:
d:=-d;
T:=T*x*x
{do x3=x*x*x=T*x*x, x5=x3*x*x, …}
M:=M*(2*1)*(2*i+1) {do 3!=2*3; 5!=3!*4*5, ….}
S:=S+d*T/M;
- Thông báo kết quả S.
Bài 2: Nhập số thực x. Hãy tính:
S 1 

x2 x4
x 2k

 ....  (1) k
2!
4!
(2k )!

(k là số tự nhiên)

Bài 3: Cho số tự nhiên n và các số thực a1, a2, …,an. Hãy tính:

(1) n1 .a n
a1 a 2
S  
 .... 
1! 2!
n!

11


2.3.2.3. Các bài tập nâng cao và các bài tập trong các đề thi Tin hoc trẻ cấp
Tỉnh những năm trước:
Bài 1: Nhập vào 1 số. Xác định xem số đó có phải số ngun tố hay khơng?
Thuật tốn:
Số ngun tố là số tự nhiên lớn hơn 1 chỉ có hai ước là 1 và chính nó. Giả sử
số vừa nhập vào là n, ta cho i chạy từ 2 đến n-1, nếu n chia hết cho i trong bất cứ
lần lặp nào thì có nghĩa là n khơng ngun tố, nếu không chia hết cho bất cứ lần
lặp nào là nguyên tố. Về nguyên tắc là như vậy, nhưng người ta đã chứng minh
được rằng chỉ cần xét từ 1 đến phần nguyên căn bậc 2 của n. Như thế thuật tốn
sẽ tối ưu hơn.
Cụ thể:
- Nếu n khơng chia hết mọi số i có giá trị từ 2 đến n - 1 thì n là số nguyên tố.
- Sử dụng biến bl có kiểu boolean và có giá trị ban đầu là true.
- Cho biến i chạy từ 2 đến phần nguyên căn bậc 2 của n. Xét n mod i. Nếu
bằng 0 thì gán bl = false. Ngược lại vẫn để nguyên bl.
Chương trình:
Program
kiem_tra_nguyen_to;
Var n,i:integer; bl:boolean;
Begin

 
bl:=true;
 
write('nhap vao so can kiem tra tinh nguyen to: '); readln(n);
 
if n<=1 then bl:=false
else
 
for i:=2 to trunc(sqrt(n)) do if n mod i=0 then bl:=false;
 
if bl=true then writeln('so ',n, ' la so nguyen to')
 
else writeln('so ',n,' khong phai la so nguyen to');
readln;
End.
Bài 2 (Bài B2-Đề thi tin học trẻ tỉnh năm 2006): Số nguyên tố
Số nguyên tố là một số tự nhiên lớn hơn 1 chỉ có ước là 1 và chính nó.
Cho trước một số tự nhiên n. Hãy viết chương trình hiển thị các số nguyên tố
nằm trong khoảng từ 1 đến n và đếm xem có bao nhiêu số nguyên tố.
Ví dụ: Với n=20, sẽ in ra màn hình dãy các số nguyên tố nằm trong
khoảng từ 1 đến 20 là: 2
3
5
7
11
13
17
19
Có tất cả 8 số ngun tố
Thuật tốn: Tương tự bài 1

- Cho i chạy từ 2 đến n.
- Xét i. Nếu nó là số ngun tố thì in nó ra và đếm.
Chương trình:
12


Program
Nguyen_to;
Var n, i, j, d: integer;
bl: boolean;
Begin
Write('Nhap n= '); readln(n);
bt:=true;
d:=0; {biến đếm số lượng số nguyên tố trong nằm trong khoảng từ 1đến n}
if n<=1 then Writeln(‘Ban da nhap n be hon 1, hay nhap lai cho dung’)
else
begin
For i := 2 to n do
Begin
bl:=true;
For j:=2 to trunc(sqrt(i)) do
if i mod j = 0 then
bl :=false;
If bt=true then
Begin
write(i,' '); d:=d+1; end;
End;
Writeln;
Writeln(‘Co tat ca’, d, ‘ so nguyen to’);
End;

Readln
End.
Bài 3: (Vòng For lồng nhau):
Tìm ba số ngun dương a, b, c có một chữ số thỏa mãn:
abc=100*a+10*b+c=a3+b3+c3
Ví dụ:
Số 407:
407=43+03+73
Thuật tốn:
- Do a, b, c là các số nguyên dương, nên với mỗi giá trị của số a (nhận
một giá trị trong khoảng từ 1 đến 9) ta tìm một giá trị của số b (trong khoảng từ
0 đến 9). Và ứng với mỗi giá trị của b ta sẽ tìm một giá trị của số c (trong
khoảng cũng từ 0 đến 9) mà thỏa mãn điều kiện 100*a+10*b+c=a 3+b3+c3 thì in
ra màn hình số a, b, c .

Chương trình:
Program
tim_so;
Var a,b,c: Integer;
Begin
Write(‘Cac so thoa man dieu kien la:’);
For a:=1 to 9 do
For b:=0 to 9 do
For c:=0 to 9 do
13


If 100*a+10*b+c=a*a*a+b*b*b+c*c*c then
Writeln(a:1,b:1,c:1);
Readln;

End.
Bài 4: Bài toán thực tế:
B1: Vừa gà vừa chó, bó lại cho trịn, ba mươi sáu con, một trăm chân chẵn.
Hỏi có bao nhiêu con chó, con gà?
Thuật toán:
+ Gọi số gà là g ( Điều kiện g ngun dương, g< 36) -> thì số chó là 36-g 
+ Số chân gà là: 2g, số chân chó là: 4(36-g) 
Do tổng số chân là 100 nên ta có phương trình:  2g + 4(36-g) = 100
=> Giải phương trình trên :  2g + 4(36-g) = 100 => g = 22.
Chương trình:
Program
Ga_cho;
Var g,c: integer;
Begin 
for g:=1 to 50 do
{Do tổng số chân 100 ->Số gà tối đa là 50 con)
 begin
 
c:=36-g;
 
if 2*g+4*c=100 then   write('So ga: ',g,', So cho: ',c);
 
end;
 readln; 
End. 
B2: Viết chương trình giải bài tốn 100 trâu 100 bó cỏ, 1 trâu đứng ăn 5 bó
cỏ, 1 trâu nằm ăn 3 bó cỏ, 3 trâu già ăn 1 bó. Hỏi mỗi loại có mấy con?
Chương trình:
Uses crt;
Var td, tn, d: byte; {td là số trâu đứng, tn là số trâu nằm}

Begin {Do có 100 bó cỏ mà 1 trâu đứng ăn 5 bó ->Số trâu đứng tối đa là 20 con)
{ 1 trâu nằm ăn 3 bó -> Số trâu nằm tối đa là 33 con}

 

Clrscr; d:=0;
Writeln(‘
So trau đung
So trau nam
For td:=0 to 20 do
For tn:=0 to 33 do
if 5*td+3*tn+(100-td-tn) div 3=100 then
Begin

So trau gia’);

14


d:=d+1;
write(‘Truong hop ‘,d, ‘:
writeln;
end;
 readln; 

’ ,td, ,‘

’,tn,‘

’, 100-td-tn);


End.
 
Bài 5: Số hoàn chỉnh:
Một số có tổng các ước nhỏ hơn nó bằng chính nó được gọi là số hồn chỉnh.
Ví dụ: 6 có các ước nhỏ hơn nó là 1, 2, 3. Tổng là 1 + 2 + 3 = 6.
Viết chương trình xét xem một số n được nhập từ bàn phím có phải là
số hồn chỉnh khơng.
Thuật tốn:
- Dùng biến n lưu số cần xét.
- Biến S tính tổng các ước, khởi tạo S:=0.
- Cho i chạy từ 1 đến n-1. Nếu i là ước nhỏ hơn n thì cộng thêm i vào S.
- Nếu S = n thì S là số hồn chỉnh.
Chương trình:
Program So_Hoan_Chinh;
Uses crt;
Var n, i, S: integer;
Begin
write('nhap so n: ');
readln(n);
S:=0;
for i:= 1 to n-1 do
if n mod i = 0 then S:=S+i;
if S=n then write(n, ' la so hoan chinh')
else writeln(n, ' khong phai la so hoan chinh');
readln;
End.
* Với dạng bài tập này có thể ra thêm cho HS bài tập nâng cao hơn như:
(Bài 1-Đề thi tin hoc trẻ tỉnh năm 2004): Viết chương trình tìm các số hồn
chỉnh nhỏ hơn n (Với n được nhập từ bàn phím).

Thuật tốn:
- Tương tự bài 4.
- Cho biến i chạy từ 1 đến n. Xét i. Nếu nó là số hồn chỉnh thì in ra.
Chương trình:
Program Tim_cac_so_hoan_chinh;
uses crt;
Var S, n, i,j: longint;
Begin
clrscr;
Write('Nhap so n ='); readln(n);
15


Writeln('Cac so hoan chinh nho hon ',n,' la:');
For i:=1 to n-1 do
Begin
S:=0;
For j:=1 to i-1 do
if i mod j =0 then S:=S+j;
if S=i then write(i:6,',');
End;
Readln
End.
Bài 6: Độ dầy và độ cao (Bài 1 – Đề thi tin học trẻ tỉnh năm 2013):
Một số tự nhiên N. Độ dầy số tự nhiên N là số chữ số của N, độ cao số
tự nhiên N là tổng các chữ số của N. Chẳng hạn: N=232 thì N có độ dầy là 3,
độ cao là 7.
Yêu cầu: Nhập vào số tự nhiên N. Viết chương trình tính độ dầy và độ cao
của số tự nhiên N.
Thuật toán:

- Nhập số tự nhiên N là một xâu ký tự số.
- Độ dầy của số tự nhiên N chính là độ dài của xâu.
- Dùng vịng For để tách từng ký tự trong xâu và chuyển về số => cộng
vào tổng S.
- Thông báo độ dầy và độ cao của số tự nhiên N là S.
Chương trình:
Program Do_day_va_do_cao;
Var i, S, day, so, code: Integer;
N: String;
Begin
Write('Nhap so tự nhiên N ='); readln(N);
day:=length(N); S:=0;
For i:=1 to day do
Begin
Val(N[i],so,code);
S:=S+so;
end;
Writeln(‘Do day cua số tự nhiên la:’,day);
Writeln(‘Do cao cua số tự nhiên la:’, S); readln;
End.
Bài 7: Vẽ hình chữ nhật (Bài 1 - Đề thi tin học trẻ năm 2015)
Viết chương trình vẽ hình chữ nhật rỗng dấu * với các cạnh (0dài<100 và 0Ví dụ: Nhập chiều dài: 8 (gồm 8 dấu *), chiều rộng: 3 (gồm 3 dấu *),
kết quả đưa ra màn hình như sau:
********
*
*
16



********
Thuật tốn:
- Nhập chiều dài hình chữ nhật là d, chiều rộng hình chữ nhật là r.
- Dùng vịng lặp: for i:=1 to r do:
+ Nếu (i=1) hoặc (i=r) thì : {In chiều dài hình chữ nhật}
For j:=1 to d do:
- In ra màn hình d dấu *
- Dùng lênh xuống dịng
+ Nếu (iFor j:=1 to d do:
- Nếu (j=1) hoặc (j=d) thì in ra màn hình d dấu *
- Nếu (jDùng lệnh xuống dịng.
Chương trình:
Program
Ve_hcn;
Var i, j, d, r: integer;
Begin write('Nhap chieu dai hcn d= '); 
readln(d);
 
write('Nhap chieu rong hcn r= ');  readln(r);
 
for i:=1 to r do
Begin
If (i=1) or (i=r) then
Begin
For j:=1 to d do write(‘*’);
writeln;
End;

If (iBegin
For j:=1 to d do
Begin
If (j=1) or (j=d) then write(‘*’);
If (jEnd;
Writeln;
End;
End;
Readln
End.
* Với dạng bài tập này có thể ra thêm cho HS một số bài tập tương tự như:
Viết chương trình nhập vào chiều cao và in ra màn hình hai tam giác bởi các
dấu * có dạng như sau:
*
**
***

*****
****
***

*
***
*****

*
**
***

17


****
*****
a)

**
*
b)

*******
*********
c)

****
*****
d)

Bài 8: Dãy số Fibonaci :
In ra màn hình dãy số Fibonaci với n số nhập từ bàn phím. Biết dãy số
Fibonaci là dãy số mà F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2).
Ví dụ: Dãy Fibonaci: 1, 1, 2, 3, 5, 8,…. ( Hai số đầu tiên của dãy là 1, từ
số thứ 3 trở đi số sau bằng tổng hai số liền trước cộng lại).
Thuật tốn:
- Nhập n;
- Dùng vịng lặp for chạy từ 3 to n để xác định số tiếp theo của dãy là:
F(i)=F(i-1)+F(i-2) và F1:=F2, F2:=F => In ra màn hình Fi.
Chương trình:
Program

Day_so;
Var i,n,F1,F2,F: integer;
Begin
 
write('Nhap n= ');  readln(n);
F1:=1; 
F2:=1;
Writeln(‘Day so Fibonaci la:’);
Write(F1, ' ',F2, ' ') ;
 
for i:=3 to n do
 
begin
 
 
F:=F2+F1; F1:=F2;
F2:=F;
write(F,' ');
end;
 readln;
End. 
* Với dạng bài tập này có thể ra thêm cho HS bài tập nâng cao hơn như:
Dãy Fibonaci là dãy được xác định như sau:
F(0)=0; F(1)=1; và F(n)=F(n-1)+F(n-2)
với n=2,3,…
Em hãy viết chương trình máy tính để nhập từ bàn phím số nguyên
dương n (2ngun tố.
Ví dụ: Với n=10 thì các số Fibonaci là: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55.
Số 13 là số nguyên tố lớn nhất trong các số Fibonaci . Vậy cần đưa ra màn hình

dịng thơng báo kết quả: Số cần tìm là: 13
Thuật tốn:
- Dựa vào thuật tốn của bài tập trên, ứng với mỗi F tìm được ta kiểm tra
xem số đó có phải là số ngun tố khơng. Nếu nó là số ngun tố thì gán cho giá
trị max (max là biến chứa số nguyên tố lớn nhất trong dãy Fibonaci).
- Gán lại giá trị cho F0 và F1.
18


- Kiểm tra xem trong dãy Fibonaci có số nguyên tố lớn nhất khơng (nếu
max>1), cịn ngược lại thì trong dãy Fibonaci khơng có số ngun tố.
Chương trình:
Program Fibonaci;
Var i, j, n, F0, F1, F, max: longint;
bt:
boolean;
Begin
Write('Nhap n= '); 
readln(n);
F0:=0; 
F1:=1;
Writeln(‘Day so Fibonaci la:’);
Write(F0, ' ',F1, ' ') ;
Max:=1;
 
for i:=2 to n do
 
begin
F:=F0+F1;
write(F,' ');

bt:=true;
for j:=2 to trunc(sqrt(F)) do
if F mod j =0 then bt:=False;
if (bt=true) then max:=F;
F0:=F1; F1:=F;
end;
Writeln;
If max>1 then Writeln('So can tim la:', max)
Else Writeln(' Trong day Fibonaci khong co so nguyen to ');
Readln;
End. 

2.3.2.4. Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với
bạn bạn thân, đồng nghiệp và nhà trường
Trong những năm bồi dưỡng học sinh giỏi dự thi Tin học trẻ cấp Tỉnh và cấp
Quốc gia tôi nhận thấy rằng: Tuy điều kiện về cơ sở vật chất rất khó khăn
19


(phịng máy chỉ có 6-7 máy); tài liệu bồi dưỡng có liên quan đến lập trình Pascal
của trường ít ỏi; vòng thi thực hành của kỳ thi Tin học trẻ kiến thức cơ sở chủ
yếu có trong Tin học Quyển 3 dành cho THCS mà sách này các em lại không
được học trên lớp. Nhưng với những kinh nghiệm trên khi các em học đến lệnh
lặp For…to…do đã gây hứng thú học tập cho học sinh, phát huy được năng lực
học tập độc lập, tự mình tìm ra kiến thức mới, sáng tạo trong các bài tập thực
hành và không còn cảm thấy bỡ ngỡ, sợ sai và ngại khi thực hành lập trình mà
thay vào đó là niềm đam mê, sự hứng thú, u thích mơn học, bình tĩnh, tự tin
vào bản thân khi dự thi.
Còn với đồng nghiệp tôi tin rằng khi các bạn áp dụng phương pháp này vào
dạy lệnh For…to…do thì các bạn khơng phải mất nhiều thời gian dạy cho các

em từ những kiến thức cơ bản nữa. Mà qua kinh nghiệm này các bạn cịn khắc
sâu được kiến thức cho các em thơng qua các bài tập nâng cao và luyện cho các
em cách làm bài thi thực hành trên máy. Từ đó nâng cao được chất lượng học
sinh giỏi các cấp cho nhà trường.
PHẦN III. KẾT LUẬN VÀ KIẾN NGHỊ
3.1. Kết luận:
Trong những năm được phân công bồi dưỡng đội tuyển học sinh dự thi
Tin học trẻ cấp Tỉnh tôi đã áp dụng kinh nghiệm trên vào giảng dạy cho học sinh
thì thấy rằng phần nào đã nâng cao được chất lượng học sinh giỏi cấp Tỉnh, cấp
Quốc gia. Cụ thể về kết quả thi Tin học trẻ các cấp trong những
năm tôi bồi dưỡng như sau:
Số giải cấp tỉnh
Số HS đạt
Giải
giải/Số HS
Năm học Giải Giải Giải Giải
Ghi chú
Quốc gia
dự thi
nhất nhì
ba KK
2005-2006

01

2007-2008

01

02


02

01

01 Giải nhì
Tin học vui

06/10
01/01

2008-2009

01

01

01

03/05

2009-2010

01

02

01

04/05


2010-2011

01

2011-2012

01

2012-2013

(Ơn đội tuyển
cho Huyện)

01 Giải ba
Tin học trẻ

Cả tỉnh chỉ có
01 giải nhì

01/01
01/01

01

01

01

03/03


Với kết quả như trên tôi hy vọng rằng khi áp dụng phương pháp này vào dạy
cho học sinh khi học lệnh For...to...do sẽ ngày càng nâng cao được chất lượng
cho học sinh giỏi Tin học cho nhà trường, cho Huyện và cho Tỉnh nhà.
Trên đây là một số kinh nghiệm mà bản thân tôi tự tích luỹ được qua những
năm được phân cơng bồi dưỡng đội tuyển học sinh giỏi. Rất mong được các bạn
20


đồng nghiệp và lãnh đạo phụ trách chun mơn Phịng giáo dục và đào tạo - Sở
giáo dục và đào tạo xây dựng, góp ý để bản thân tơi ngày càng được nâng cao
tay nghề, để công tác bồi dưỡng học sinh giỏi Tin học trẻ của trường tôi đạt kết
quả cao hơn.
3.2. Kiến nghị:
Để phương pháp dạy ngày một thực thi hơn. Là giáo viên trực tiếp giảng dạy
môn Tin học tơi tơi đề nghị:
- Với BGH trường, Phịng giáo dục và đào tạo, UBND Huyện: Do phịng máy
tính hiện tại của trường rất ít (chỉ 7 máy) nên tơi đề nghị cấp trên trang bị thêm
máy tính, tài liệu tham khảo về các kiến thức về máy tính, lập trình Turbo Pascal
để các em được thực hành nhiều hơn trong mỗi tiết học, buổi học bồi dưỡng;
phát huy được tinh thần tự học, tự nghiên cứu.
- Với Sở Giáo dục và đào tạo: Đưa Tin học dành cho THCS quyển 3 vào
chương trình học tự chọn của lớp 8 để học sinh được tiếp cận dần với lập trình.
Từ đó thuận tiện cho việc bồi dưỡng học sinh giỏi.
- Với Phòng giáo dục và đào tạo – Sở giáo dục và đào tạo: Khi tổ chức kỳ thi
học sinh giỏi cấp Huyện – cấp Tỉnh cho các môn văn hóa nên đưa thêm cả mơn
Tin học để các em được cọ sát, làm quen với các kỳ thi góp phần nâng cao chất
lượng học sinh giỏi mơn Tin học.
Tôi xin chân thành cảm ơn và xin cam đoan đây là sáng kiến kinh nghiệm của
mình khơng sao chép nội dung của người khác.


Xác nhận của thủ trưởng đơn vị

Thị Trấn, ngày 20 tháng 02 năm 2016
Người làm sáng kiến
Nguyễn Thị Tâm

21


MỤC LỤC
PHẦN I. MỞ ĐẦU
1.1. Lý do chọn đề tài
1.2. Mục đích nghiên cứu
1.3. Đối tượng nghiên cứu
1.4. Phương pháp nghiên cứu
PHẦN II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM
2.1. Cơ sở lý luận của sáng kiến kinh nghiệm
2.2. Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
2.3. Các sáng kiến kinh nghiệm hoặc các giải pháp đã sử dụng để giải quyết
vấn đề
2.3.1. Các giải pháp
2.3.2. Các biện pháp tổ chức thực hiện giải pháp
2.3.2.1. Lệnh For…to…do
2.3.2.2. Các dạng bài tập
2.3.2.3. Các bài tập nâng cao và các bài tập trong các đề thi Tin học cấp
Tỉnh những năm trước
2.3.2.4. Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục,
với bạn thân, đồng nghiệp và nhà trường
PHẦN III. KẾT LUẬN VÀ KIẾN NGHỊ

3.1. Kết luận
3.2. Kiến nghị

1
1
2
2
2
3
3
3
4
4
5
5
5
12
20
20
20
21

22



×