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

SKKN 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 (184.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 Đoà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 toá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 toá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 toá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 toá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 toá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 hoà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 Hoà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 toá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 toá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ư Toán học bằng cách
nói và viết. Từ đó yê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 hoàn
chỉnh tôi yê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 toán
để có bài toá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:
(với n là số tự nhiên)
VD1:
Tính:
S=1+2+…+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
Tong;
Program
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:
1
1
Bà 1: Tính:
i
S=1+ ...
(với n là số tự nhiên)
n

2

Hướng dẫn:

Bài 2: Tính:

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


4

n

Hướng dẫn:

Bài 3: Tính:

- Nhập n;
- Khởi tạo S:=1;
- Dùng vòng For i:=1 to n do S:=S+1/(2*i);
S=1+ 1 1 ... 1
(với n là số tự nhiên)
3

5

n

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);
Bài 4: Tính:
A=12+22+32+…+m2
(với m là số tự nhiên)
Hướng dẫn: - Nhập m; Khởi tạo A:=0;
- Dùng vòng For i:=1 to m do A:=A+i*i;
Bài 5: Tính:
Hướng dẫn:


8

S= n 2
n1

108

105

n2

n2

n 100

n 97

- 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 toán:
- Đây là bài toá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:
1 )
T=(1 1)(1 1)...(1
2

1

2

2

2


n

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

a

aa 1

1
a

1
a

2

1
2
a2

a(a 1)...(a n)

.... 1

a2

n

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

Dạng 3: Giai thừa
VD3: Tính:
Thuật toá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;
End;

S:=S+gt;
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;
End; S:=S+gt;
End.

Writeln(‘Tong tren la:’,S:3);
Readln;

Bài tập:

1

1

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

Bài 1


: Tính:
S=1+ 2! 3! ...
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
Begingt:=gt*i;
S:=S+1/gt;
End;
a
Bài 2: Tính: H=1 a a
(với n là số tự nhiên, a nguyên)
2

1!

2! ...

n

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
BeginT:=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= 22 ....
2
Thuật toán:

(n lần dấu că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:
tinh_can;
Program
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 toá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:
T= a1.a2…an
a.

F a12 a22 ... a2n
2
H=(a1+a2+…+an)
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;
b.

c.

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.
tinh;
Program
Var
n, I,d: Integer;
Begin
a, S: Real;
Write(‘Nhap so lượng các số thực n=’);
S:=0;
d:=1;
For i:=1 to n do
Begin
Write(‘Nhap gia tri cua a’,i,’=’);
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:
3
5
k
S x
x
x
2k 1
3!


5!

.... ( 1)

x
(2k 1)!

Readln(n);

Readln(a);

(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:
2
4
S 1
(k là số tự nhiên)
x

x .... ( 1)k
x 2k
2!

(2k)!

4!

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

aa

1 2

....

( 1)n

.a

1

n

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ố nguyên tố hay không?
Thuật toán:
Số nguyên 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 nguyên 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 toá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ố nguyên tố
Thuật toán: Tương tự bài 1
- Cho i chạy từ 2 đến n.
- Xét i. Nếu nó là số nguyên 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ố nguyên 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
- 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 nguyên 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 toá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ố hoà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ố hoàn chỉnh không.
Thuật toá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ố hoà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ố hoàn
chỉnh nhỏ hơn n (Với n được nhập từ bàn phím).
Thuật toá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ố hoà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
(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 toá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 toá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 (2là nguyên 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 toán:
- Dựa vào thuật toá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ố nguyên tố không. Nếu nó là số nguyên 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ố nguyên 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ú, yê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
Năm học Giải Giải Giải Giải
Giải

giải/Số HS
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 chuyên 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



×