SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA
TRƯỜNG THPT NÔNG CỐNG 3
SÁNG KIẾN KINH NGHIỆM
TÊN ĐỀ TÀI
“HƯỚNG DẪN HỌC SINH LẬP TRÌNH GIẢI CÁC BÀI TOÁN
CÓ SỬ DỤNG CẤU TRÚC LẶP BẰNG HỆ THỐNG CÁC CÂU HỎI”
Người thực hiện: Mạc Thị Năm
Chức vụ: Giáo viên
Đơn vị công tác: Trường THPT Nông Cống 3
Môn: Tin học
THANH HOÁ NĂM 2016
MỤC LỤC
Trang
I. MỞ ĐẦU..............................................................................................................3
II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM......................................................3
1. Cơ sở lí luận.........................................................................................................3
2. Thực trạng vấn đề................................................................................................4
3. Giải quyết vấn đề.................................................................................................4
4. Hiệu quả của sáng kiến kinh nghiệm...................................................................13
III. KẾT LUẬN, KIẾN NGHỊ.................................................................................14
2
I. MỞ ĐẦU
Công nghệ thông tin là một lĩnh vực luôn có sự bùng nỗ và đột phá, với sự phát
triển vô cùng nhanh chóng. Đảng và Nhà nước ta đã nhận thấy được tầm quan
trọng của ngành Tin học và đã lựa chọn môn học này vào nhà trường phổ thông
như những môn hoc khác với mục tiêu cung cấp cho các em những kiến thức phổ
thông về ngành Tin học, hình thành và phát triển khả năng tư duy thuật toán, năng
lực sử dụng các thành tựu của ngành khoa học này trong học tập và trong các lĩnh
vực của mình sau này. Lớp 11 các em được làm quen với một nội dung rất khó,
nhiều khái niệm mới và trừu tượng đó là lập trình sử dụng ngôn ngữ lập trình
Turbopascal. Hơn nữa việc tiếp thu kiến thức về cấu trúc lặp nhiều em còn gặp
nhiều khó khăn mà phần lớn các bài toán trong tin học 11 lại liên quan đến cấu trúc
lặp. Chính vì vậy việc sử dụng cấu trúc lặp để giải các bài toán trong tin học lớp 11
của học sinh còn nhiều hạn chế.
Xuất phát từ phương pháp dạy học học tập trong hoạt động và bằng hoạt động.
Để học sinh có thể dễ dàng tiếp thu kiến thức mới và lập trình các bài toán. Người
thầy phải hướng dẫn học sinh biết tự mình tìm ra hướng giải quyết vấn đề nảy sinh
trong quá trình giải bài toán. Nếu các em có thể tự giải quyết các bài toán đó các
em sẽ lĩnh hội được kiến thức sâu hơn, rộng hơn, hứng thú trong việc tìm tòi, tiếp
thu kiến thức mới và lập trình các bài toán phức tạp hơn.
Với mong muốn góp phần nâng cao chất lượng dạy học môn Tin học ở trường
THPT Nông Cống 3. Tôi chọn đề tài: “Hướng dẫn học sinh lập trình giải các bài
toán có sử dụng cấu trúc lặp bằng hệ thống các câu hỏi”.
II. NỘI DUNG SÁNG KIẾN KINH NGHIỆM.
1. Cơ sở lí luận.
a. Dạng lặp tiến
a.1. Cú pháp:
FOR <biến đếm>:=<giá trị đầu> TO <giá trị cuối> DO <câu lệnh>;
Trong đó:
+ Biến đếm: Là biến đơn, thường có kiểu nguyên
+ Giá trị đầu, giá trị cuối: Là các biểu thức cùng kiểu với biến đếm. Giá trị đầu phải
<= giá trị cuối; Nếu giá trị đầu > giá trị cuối thì vòng lặp không thực hiện
+ Câu lệnh: Là câu lệnh đơn hoặc câu lệnh ghép
a.2. ý nghĩa
- Câu lệnh viết sau từ khoá Do được thực hiện tuần tự, với biến đếm lần lượt nhận
các giá trị liên tiếp tăng từ giá trị đầu đến giá trị cuối.
- Sau mỗi lần lặp, biến đếm tự động tăng lên 1đơn vị
b. Dạng lặp lùi
* Cú pháp:
FOR <biến đếm>:= <gtrị cuối> DOWNTO <gtrị đầu> DO <câu lệnh>;
3
Tương tự như dạng lặp tiến, chỉ khác là sau mỗi lần lặp, biến đếm tự động giảm đi
1 đơn vị
* Chú ý:
- Trong <câu lệnh> không được thay đổi giá trị của biến đếm
- Số lần lặp là:
Giá trị cuối – giá trị đầu + 1
c. Lặp với số lần chưa biết trước và câu lệnh While - Do
* Cú pháp:
While <điều kiện> Do <câu lệnh>;
Trong đó:
+ Điều kiện: Là biểu thức quan hệ hoặc biểu thức logic.
+ Câu lệnh: Là một câu đơn hoặc câu lệnh ghép.
* ý nghĩa: Trong khi <điều kiện> còn đúng thì còn thực hiện <câu lệnh>.
2. Thực trạng vấn đề.
Trong quá trình giảng dạy bộ môn Tin học lớp 11. Tôi nhận thấy đa số học
sinh còn lúng túng và gặp khó khăn khi lập trình một bài toán có sử dụng cấu
trúc lặp, dẫn đến một thực trạng trong các giờ bài tập đa phần các em không
hứng thú, không sôi nỗi và có phần lo lắng. Nguyên nhân là do các em còn mơ
màng trong vận dụng câu trúc lặp vào các bài toán cụ thể, cũng như khả năng
phân tích bài toán còn hạn chế. Hơn nữa câu lệnh lặp là câu lệnh rất quan trọng
để lập trình trong hầu hết các bài toán.
Qua kết quả khảo sát ở lớp 11c2, trường THPT Nông Cống 3, tổng số 45 học
sinh. Năm học 2015 – 2016, kết quả thu được như sau.
Điểm Giỏi
Điểm Khá
Điểm TB
Điểm Yếu
Điểm Kém
SL
Tỉ lệ
SL
SL
SL
SL
2
4,4% 4
Tỉ lệ
8,8% 15
Tỉ lệ
33,3% 19
Tỉ lệ
42,2% 5
Tỉ lệ
11,3%
Đứng trước thực trạng trên, trong quá trình giảng dạy tin học lớp 11. Khi
hướng dẫn học sinh làm bài tập tôi nhận thấy có thể giải quyết vấn đề bài toán
một cách đơn giản nếu được sự hỗ trợ của giáo viên bằng hệ thống các câu hỏi.
Khi các em có thể tự mình trả lời hệ thống các câu hỏi tức là các em biết cách
tiến hành giải quyết toàn bộ bài toán bằng ngôn ngữ lập trình.
3. Giải quyết vấn đề.
Câu 1: Lập trình: Đưa ra màn hình 5 dòng chữ “chao cac ban”.
Hỏi: Viết câu lệnh đưa ra màn hình?
Trả lời: Writeln(‘chao cac ban’);
Hỏi: Câu lệnh trên được được viết lặp bao nhiêu lần?
4
Trả lời: 5 lần
Hỏi: Sử dụng câu lệnh lặp nào khi biết số lần lặp là 5?
Trả lời: Dạng lặp tiến hoặc dạng lặp lùi
Hỏi: Viết đoạn chương trình đưa ra màn hình 5 dòng chữ “chao cac ban” sử dụng
dạng lặp lùi hoặc dạng lặp tiến?
Trả lời: For i:=1 to 5 do Writeln(‘chao cac ban’);
hoặc For i:=5 downto 1 do Writeln(‘chao cac ban’);
Hỏi: Viết toàn bộ chương trình?
Trả lời:
Program
loichao;
Uses crt;
Var i: byte;
Begin
Clrscr;
For i:=1 to 5 do writeln(’chao cac ban’);
{For i:=5 downto 1 do writeln(’chao cac ban’);}
Readln;
End.
Giáo viên có thể dùng máy chiếu chiếu chương trình pascal đã cài đặt sẵn, sau đó
nhấn phím F8 để học sinh thấy rõ từng lệnh thực hiện như thế nào.
Câu 2: Lập trình: Tính tổng: S= 1= 2+ 3+……..+ 10.
Giáo viên phân tích thao tác tính tổng:
S= 1 + 2 + 3 + 4 +… + 10
1 + 2 + 3 + 4 + 5 + … + 10
1
1+ 2
3 +3
6 +4
10 + 5
……………………….
45 +10
Hỏi: Trình bày cách tính tổng vừa rồi?
Trả lời: - Cách tính: tổng được cộng dồn lại: tổng sau= tổng trước + số hạng tiếp
theo
Hỏi: Thao tác nào được lặp?
Trả lời: tổng sau= tổng trước + số hạng tiếp theo
Hỏi: Thao tác đó lặp mấy lần?
Trả lời: 10 lần
5
Hỏi: Trong thao tác lặp, hãy xác định: Thành phần không thay đổi, thành phần thay
đổi và thay đổi theo quy luật nào sau mỗi lần lặp?
Trả lời :
+ Thành phần không thay đổi:
tổng sau= tổng trước +
+ Thành phần thay đổi: Giá trị của mỗi số hạng trong dãy. Thay đổi theo quy luật:
số đứng sau>số đứng trước 1 đơn vị, bắt đầu từ 1.
Hỏi: Sử dụng câu lệnh lặp nào?
Trả lời: Dạng lặp tiến.
Hỏi: Viết đoạn chương trình tính tổng?
Trả lời:
s:=0;
For i:=1 to 10 do s:=s+i;
Write(‘tong la’, s:3);
Hỏi: Lập trình?
Program
tinhtong ;
Uses crt ;
Var s,i :byte ;
Begin
Clrscr ;
s:=0;
For i:=1 to 10 do s:=s+i;
Write(‘tong la’, s:3);
Readln ;
End.
Câu 3: Lập trình : Tính tổng : S= 1+ 22+32+................+n2
Giáo viên phân tích bài tán :
S=1
S=1+2*2
S=
5+ 3*3
…………………………………..
S=
14+……….+(n-1)*(n-1)+n*n
Hỏi: Trình bày cách tính tổng vừa rồi?
Trả lời: - Cách tính: tổng được cộng dồn lại: tổng sau= tổng trước + bình phương
(số hạng tiếp theo)
Hỏi: Thao tác nào được lặp?
Trả lời: tổng sau= tổng trước + bình phương số hạng tiếp theo
Hỏi: Thao tác đó lặp mấy lần?
Trả lời: n lần
6
Hỏi: Trong thao tác lặp, hãy xác định: Thành phần không thay đổi, thành phần thay
đổi và thay đổi theo quy luật nào sau mỗi lần lặp?
Trả lời:
+ Thành phần không thay đổi:
tổng sau= tổng trước +
+ Thành phần thay đổi: Giá trị căn bậc 2 của mỗi số hạng trong dãy. Thay đổi theo
quy luật: số đứng sau>số đứng trước 1 đơn vị, bắt đầu từ 1
Hỏi: Sử dụng câu lệnh lặp nào?
Trả lời: Dạng lặp tiến.
Hỏi: Viết đoạn chương trình tính tổng?
s:=0;
For i:=1 to n do s:= s+ i*i;
Write(‘tong la’, s:6);
Hỏi: Lập trình?
Program
tongbinhphuong;
Uses crt;
Var s:integer;
i,n: word;
Begin
Clrscr;
s:=0;
For i:=1 to n do s:=s+i*i;
Write(‘tong la’, s:6);
Readln;
End.
Câu 4: Lập trình đưa ra màn hình dãy số sau:
46 43 40 37 34 31 28 25 22 19 16 13 10 7 4
Hỏi: Phân tích dãy số trên?
46= 3* 15 +1
43 = 3*14 +1
40= 3*13 +1
37= 3* 12 +1
……………
7 = 3*2
+1
4= 3*1
+1
Hỏi: Nêu cách tính mỗi số:
Trả lời: Gọi i là các số từ 15 – 1, ta có: so:=3*i+1 (với i thay đổi theo quy luật
mỗi lần tính số hạng trong dãy i giảm 1 đơn vị)
Hỏi: Cách tính số lặp mấy lần?
Trả lời: 15
7
Hỏi: Câu lệnh viết ra màn hình các số trong dãy?
Trả lời: Write(so:4);
Hỏi: Câu lệnh trên được lặp mấy lần?
Trả lời: 15
Hỏi: Sử dụng câu lệnh lặp nào?
Trả lời: Dạng lặp lùi.
Hỏi: Viết đoạn chương trình đưa ra màn hình dãy số:
For i:=15 downto 1 do Begin
so:=3*i+1;
Write(so:4);
End;
Hỏi: Lập trình?
Trả lời:
Program
dayso;
Uses crt;
Var so,i:byte;
Begin
Clrscr;
For i:=15 downto 1 do Begin
so:=3*i+1;
Write(so:4);
End;
Readln;
End.
Câu 5: Lập trình: Tính tổng: S = 1 + 2 + 3 + 4 + 5 + 6 + …
Cho đến khi S>=75
- Giáo viên phân tích thao tác tính tổng:
S= 1 + 2 + 3 + 4 +5+6+…………
1 + 2 + 3 + 4 + 5 + 6+………
1
1+ 2
3 +3
6 +4
10 + 5
15+6
………………………………………..
Hỏi: Nêu nhận xét cách tính tổng?
8
Trả lời: - tổng sau= tổng trước + số hạng tiếp theo(thay đổi theo quy luật số hạng
sau >số hạng trước 1 đơn vị)
Hỏi: Thao tác đó lặp mấy lần?
Trả lời: Chưa biết trước số lần lặp, tính tổng cho đến khi s>=75
Hỏi: Sử dụng câu lệnh lặp nào?
Trả lời : while
do
Hỏi: + Điều kiện lặp là gì?
+ Lệnh cần lặp là gì?
+ Lệnh nào là lệnh làm thay đổi điều kiện?
Trả lời: - Điều kiện lặp là: s<75
- Lệnh cần lặp:
S:= S +i;( i là số hạng)
i:=i+1;
- Lệnh nào là lệnh làm thay đổi điều kiện: S:=S+i;
Hỏi: Viết đoạn chương trình tính tổng :
Trả lời :
S :=0 ;i :=1 ;
While S<75 do
Begin
S :=S+i ;
i :=i +1 ;
end ;
Hỏi : Lập trình ?
Program
tinh ;
Uses crt ;
Var S,i : byte ;
Begin
Clrscr ;
S :=0 ;i :=1 ;
While S<75 do
Begin
S :=S+i ;
i :=i +1 ;
end ;
write(‘tong la’, S:3);
readln;
End.
Câu 6: Lập trình: Tính và đưa ra màn hình tổng:
S=
1
1
1
1
+
+
+ ...... +
+ ........
a a +1 a + 2
a+n
nguyên và a>2 được nhập từ bàn phím.
Giáo viên phân tích thao tác tính tổng:
cho đến khi
1
< 0.0001 , với a là số
a+n
9
1
1
1
1
+
+
+ ...... +
+ ........
a a +1 a + 2
a+n
1
S=
a
1
1
S= +
a a +1
1
1
1
S= +
+
a a +1 a + 2
1
1
1
1
S= +
+
+ ...... +
a a +1 a + 2
a+n
S=
……………………………………………
Hỏi: Nêu nhận xét cách tính tổng?
Trả lời: tổng sau= tổng trước + 1/ (a+ số hạng tiếp theo(thay đổi theo quy luật số
hạng sau >số hạng trước 1 đơn vị))
Hỏi: Thao tác đó lặp mấy lần?
Trả lời: Số lần lặp chưa biết trước, tính tổng cho đến khi
1
< 0.0001 .
a+n
Hỏi: Sử dụng câu lệnh lặp nào ?
Trả lời : while - do
Hỏi: + Điều kiện lặp là gì?
+ Lệnh cần lặp là gì?
+ Lệnh nào là lệnh làm thay đổi điều kiện?
Trả lời: - Điều kiện lặp là: 1/ ( a + n) >= 0.0001
- Lệnh cần lặp:
s:= s + 1.0 / (a + n) ;
n:=n+1;
- Lệnh nào là lệnh làm thay đổi điều kiện: n:=n+1;
Hỏi: Viết đoạn chương trình tính tổng:
Trả lời :
s:=1.0/a ; n:=0 ;
While 1/ (a + n) >= 0.0001 do
Begin
n:=n+1;
s:= s + 1.0 / (a + n) ;
end;
Hỏi: Lập trình?
Program
tong;
Uses crt;
Var s:real;
a, n: integer;
Begin
10
Clrscr;
Write(‘nhap a’); readln(a);
s:=1.0/a ; n:=0 ;
While 1.0 / (a + n) >= 0.0001 do
Begin
n:=n+1;
s:= s + 1.0 / (a + n) ;
end;
write(‘tong la’, s:6:2);
readln;
End.
Câu 7: Lập trình: Tìm ước chung lớn nhất (ƯCLN) của hai số nguyên dương M và
N.
Hỏi: Nhắc lại thuật toán tìm ƯCLN ?
Hỏi: Trong thuật toán ta thấy thao tác nào được lặp, và xác định số lần lặp ?
Trả lời:- Thao tác lặp:
Nếu M>N thì M:= M-N ngược lại N:=N-M ;
- Số lần lặp: Chưa biết trước, lặp cho đến khi M=N
Hỏi: Sử dụng câu lệnh lặp nào?
Trả lời: while - do
Hỏi: + Điều kiện lặp là gì?
+ Lệnh cần lặp là gì?
+ Lệnh nào là lệnh làm thay đổi điều kiện?
Trả lời: - Điều kiện lặp là: M< >N
- Lệnh cần lặp: if M>N then M:= M-N else N:=N-M;
- Lệnh nào là lệnh làm thay đổi điều kiện: M:= M-N ; N:=N-M ;
Hỏi: Viết đoạn chương trình sử dụng câu lệnh lặp?
Trả lời: while M< >N do if M>N then M:= M-N else N:=N-M;
Hỏi: Lập trình:
Program
ucln;
uses crt;
var
M, N: word;
Begin
Clrscr;
Write(‘nhap M,N=’); readln(M,N);
while M< >N do if M>N then M:= M-N else N:=N-M;
write(‘ucln la’,
M:5);
readln;
End.
11
Câu 8: Một người gửi tiết kiệm không kì hạn với số tiền A đồng với lãi suất 0,3%
mỗi tháng. Hỏi sau bao nhiêu tháng, người đó rút hết tiền thì sẽ nhận được số tiền ít
nhất là B đồng? Biết rằng với việc gửi tiết kiệm không kì hạn thì lãi không được
cộng vào vốn.
Hỏi: Cách tính số tiền thu được sau n tháng?
Trả lời: Sau 1 tháng:
tien= 0.003*A+A
Sau 2 tháng
tien= 0.003*A+A+ 0.003*A
………………………………………………….
Sau n tháng
tien= 0.003*A+A+ 0.003*A+.......+ 0.003*A
Cách tính: tien:=tien+ 0.003*A
Hỏi: Thao tác tính tiền hàng tháng lặp bao nhiêu lần?
Trả lời: Số lần lặp chưa biết trước, lặp cho đến khi tien>=B
Hỏi: Xác định số tháng người đó nhận được ít nhất là B đồng?
Trả lời: Số tháng chính là số lần lặp tính tiền để nhận được ít nhất là B đồng.
Hỏi: Xác định câu lệnh lặp?
Trả lời: while –do
Hỏi: + Điều kiện lặp là gì?
+ Lệnh cần lặp là gì?
+ Lệnh nào là lệnh làm thay đổi điều kiện?
Trả lời: - Điều kiện lặp là: tien
- Lệnh cần lặp: tien:=tien+0.003*A; thang:=thang+1;
- Lệnh nào là lệnh làm thay đổi điều kiện: tien:=tien+0.003*A;
Hỏi: Viết đoạn chương trình sử dụng câu lệnh lặp?
Trả lời: tien:=A; thang:=0;
While tien
Begin
tien:=tien+0.003*A;
thang:=thang+1;
end;
Hỏi: Lập trình?
Program
tinhtien;
uses crt;
var
tien, A, B:real;
thang: word;
Begin
Clrscr;
Write(‘nhap so tien A,B’); readln(A,B);
tien:=A; thang:=0;
While Tien
12
Begin
tien:=tien+0.003*A ;
thang:=thang+1;
end;
write(‘so thang de nhan duoc so tien it nhat la B dong’, thang:4);
readln;
End.
Bài tập áp dụng:
Câu 1: Các bài toán dùng For – Do có chuyển sang While – Do được không?
A. Có
B. Không
C. Có thể có hoặc không tùy từng bài cụ thể
D. Chỉ được với những bài toán tính tổng
Câu 2: Lập trình đưa ra màn hình dãy số tự nhiên từ 1 đến 10?
Câu 3: Lập trình đưa ra màn hình dãy số :
15 14 13 12 11 10 9 8 7 6 5 4
50
n
n =1 n + 1
Câu 4: Lập trình tính: Y = ∑
Câu 5: Lập trình để giải bài toán cổ sau:
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 mỗi loại?
Câu 6: Lập trình:
- Nhập từ bàn phím số thực A.
- Tìm và đưa ra màn hình số nguyên dương N nhỏ nhất thoã mãn điều
n
1
A
<
kiện:
.
∑
i =1 i
Câu 7: Lập trình tính:
1 1
1
1
+ ............... + + ...... cho đến khi
< 2*10−6 .
1! 2!
n!
n!
e = 1+ +
4. Hiệu quả của sáng kiến kinh nghiệm.
Sau khi áp dụng đề tài này tại lớp 11C2, trường THPT Nông Cống 3 tôi nhận
thấy: Trong các giờ đã gây được sự chú ý, cuốn hút các em tập trung học tập, động
não, suy nghĩ, học tập sôi nỗi và tạo cho học sinh một thói quen học tập nghiêm
túc, khoa học, kết quả học tập được nâng lên rõ rệt.
13
Qua kết quả khảo sát ở lớp 11C2, trường THPT Nông Cống 3, tổng số 45 học
sinh. Năm học 2015 – 2016, kết quả thu được như sau.
Điểm Giỏi
Điểm Khá
Điểm TB
Điểm Yếu
Điểm Kém
SL
Tỉ lệ
SL
5
11,1% 15
Tỉ lệ
SL
33,3% 25
Tỉ lệ
SL
55,6% 0
Tỉ lệ
SL
Tỉ lệ
0%
0
0%
III. KẾT LUẬN, KIẾN NGHỊ
- Kết luận:
Hướng dẫn học sinh lập trình các bài toán có sử dụng cấu trúc lặp bằng hệ
thống các câu hỏi trong các giờ bài tập Tin học 11 tại trường THPT Nông Cống 3
đã phát huy được tính tích cực, chủ động và sáng tạo trong học sinh. Giáo viên
nhận trách nhiệm quan trọng hơn, nặng nề hơn với vai trò là người thiết kế, uỷ thác,
điều khiển và thể chế hoá.
- Kiến nghị:
Đối với giáo viên: Không ngừng tự học, tự bồi dưỡng để kịp thời lĩnh hội các
kiến thức chuyên môn, có kỷ năng sử dụng thành thạo các trang thiết bị dạy học
hiện đại. Sử dụng các phương pháp thích hợp để kích thích sự hứng thú học tập của
học sinh.
Nhà trường tăng cường thêm về cơ sở vật chất, đảm bảo về trang thiết bị cho
việc dạy và học, cụ thể là: Tăng cường thêm các thiết bị máy móc như máy vi tính,
máy chiếu đa năng.
XÁC NHẬN CỦA THỦ TRƯỞNG ĐƠN VỊ
Thanh Hóa, ngày 02 tháng 05 năm 2016.
Tôi xin cam đoan đây là SKKN của mình
viết, không sao chép nội dung của người
khác.
Người viết
Mạc Thị Năm
Tài liệu tham khảo
14
- Lí luận dạy học tin học ở trường THPT.
- Sách giáo khoa Tin học 11 – Hồ Sỹ Đàm – Chủ biên.
- Sách bài tập Tin học 11 - Hồ Sỹ Đàm – Chủ biên.
- Lý thuyết và bài tập lập trình Pascal – Quách Tuấn Ngọc.
-
15