Trong khi đó, nhữngkiế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ầuhết ở trường THCS trong Tỉnh các em học theo chương trình: Học tự chọn chohọc sinh khối lớ
Trang 1PHẦ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 ứngdụ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ấphọ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ộcthi 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úphọ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ềucá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ớiTHCS thông thường hình thức các em dự thi là dự thi cá nhân (Bảng B) Nộidung 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ầnmề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ớpqua 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ìnhbằ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ữngkiế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ầuhết ở trường THCS trong Tỉnh các em học theo chương trình: Học tự chọn chohọ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ácbà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 đếnnay 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ốiTHCS (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ầnlớ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 đã đượcthầ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ậttoá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áyphả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ó khichỉ là sơ xuất nhỏ như: Thiếu dấu phẩy, dấu chấm, dấu mở ngoặc hoặc dấucách….chứ chưa cần nói đến thuật toán có đúng hay không trong khi trình bàythì cũng sinh ra lỗi và máy không chạy được Như vậy, với vòng thi lý thuyếtcác em đạt điểm cao nhưng vòng thi thực hành điểm dưới trung bình thì danhhiệu học sinh giỏi cấp Tỉnh môn Tin học cũng tuột khỏi tầm tay
Trang 2Vớ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âydựng cơ sở lý thuyết (nghiên cứu qua tài liệu: Tin học dành cho học sinh THCSquyển 3; Turbo pascal 7.0 của PGS-PTS Bùi Thế Tâm; Lập trình Turbo pascal7.0 của Hoàng Hồng; Em tập lập trình của Đỗ Trần Hùng ) để xác định nhữngnộ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ổngkết kinh nghiệm của các khóa học trước áp dụng cho khóa học sau
Trang 3PHẦ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 Namphả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ươngphá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ầnphả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 khithự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ỳ thihọ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ànhcho THCS quyển 3 Do vậy, khi bồi dưỡng cho học sinh dự thi Tin học trẻ cấpTỉ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ấtnhiề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
Trang 42.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ấpQuố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ớiphươ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:
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ụngngô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ìnhthự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ỗikhông được có thể nhờ bạn hoặc cô giáo giúp Khi chương trình chạy hoànchỉ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ươngtrì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ậplà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ọcsinh sau khi học sinh hoàn thành việc chạy chương trình trên máy và chỉ ra sailầ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 Dovậ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 Tinhọc của Huyện – Tỉnh ngày càng nâng lên
Trang 52.3.2 Các biện pháp tổ chức thực hiện các giải pháp
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áccâ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:
False True
- Để tính S ta cần khởi tạo cho S một giá trị ban đầu (S:=0) Sau đó dùngvòng lặp For <biến>:=1 to n do, khi đó S:=S+biến
Trang 6For i:=1 to n do S:=S+i;
Writeln(‘Tong cua day so la:’,S:3);
4
1 2
5
1 3
1 + + (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 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;
100 2 8
1
2
n n
n
n n
Trang 7For i:=1 to n do T:=T*i;
Writeln(‘Tich cua day so la:’,T:3);
- 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:
2
1 1 )(
1
1 1
n
+ +
+
Bài 3: Cho số thực a, số tự nhiên n Hãy tính:
1
1
1 1
n a a
a a
a
a a
a
1
1 1
1
2 + +
+c) a(a-n)(a-2n)(a-3n)….(a-nn)
Trang 8Dạng 3: Giai thừa
Thuật toán:
- 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!=12!=1!*23!=2!*34!=3!*4
………
n!=(n-1)!*nVậy để tính S ta dùng vòng lặp For:
! 3
1
! 2
1
n
+ + + (với n là số tự nhiên)
!11
2
n
a a
++++ (với n là số tự nhiên, a nguyên)
Trang 9Dạ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:
- 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)
Trang 10Dạ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 a 1 , a 2 , …,a n Hãy tính:
- 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}
Trang 11- 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àotổ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 a 1 , a 2 , …,a n Hãy tính:
- 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
12)1(
!5
5
!3
3
+
+
−+
−+
−
=
k
k x k x
x x
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
Trang 12Bài 2: Nhập số thực x Hãy tính:
)!
2(
2)1(
!4
4
!2
21
k
k x k x
! 2
! 1
1 2
1
n
a a
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ầnlặ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ếubằng 0 thì gán bl = false Ngược lại vẫn để nguyên bl
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ố.
Trang 13Ví dụ: Với n=20, sẽ in ra màn hình dãy các số nguyên tố nằm trong
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’)
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:
Trang 14Bà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
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}