Nếu như trước đây môn Tin học chủ yếu chỉ truyền đạt cho các em kiến thức lý thuyết, hàn lâm thì nay đã chú trọng tới thực hành và giải các bài tập, giúp các em làm quen với lập trình tr
Trang 1
SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THPT NGA SƠN
SỬ DỤNG MỘT SỐ BÀI TẬP CƠ BẢN ĐỂ CỦNG CỐ BÀI 10 “ CẤU TRÚC LẶP” TRONG SÁCH GIÁO KHOA
TIN HỌC 11
Họ tên: Nguyễn Văn Hải
Chức vụ: Giáo viên
SKKN thuộc bộ môn: Tin học
THANH HOÁ NĂM 2020
Trang 2MỤC LỤC
I Mở đầu 2
1.1 Lí do chọn đề tài 2
1.2 Mục đích nghiên cứu 3
1.3 Đối tượng nghiên cứu 3
1.4 Phương pháp nghiên cứu 3
II Nội dung của sáng kiến kinh nghiệm 3
2.1 Cơ sở lý luận của sáng kiến kinh nghiệm 3
a Tham số hình thức 3
b Tham số thực sự 3
c Tham biến 4
d Tham trị 4
e Truyền tham số theo trị 4
f Truyền tham số theo biến 4
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm 4
2.3 Các giải pháp giải quyết vấn đề 4
2.3.1 Các bài tập về câu lệnh for 4
2.3.2 Các bài tập về câu lệnh while do 5
2.3.3 Các bài tập tổng hợp về cấu trúc lặp : 5
c Bài tập 3 6
d Bài tập 4 7
e Bài tập 5 8
2.3.2 Truyền theo trị hay truyền theo biến 9
2.4 Kết quả thu được 9
III.Kết luận, kiến nghị 10
3.1 Kết luận 10
3.2 Kiến nghị 10
Trang 31 MỞ ĐẦU
1.1 Lí do chọn đề tài.
Sự phát triển như vũ bão của khoa học công nghệ - kỹ thuật hiện đại đã đặt giáo dục vào thử thách mới, đó là nhằm đào tạo ra thế hệ tương lai vừa có phẩm chất, vừa phải có năng lực tiếp cận khoa học hiện đại để hội nhập với xu thế chung của
xã hội Hiện nay trong các trường phổ thông đã chú trọng tới vấn đề này
Nghị quyết Hội nghị Trung ương 8 khóa XI về đổi mới căn bản, toàn diện giáo dục
và đào tạo nêu rõ: “Tiếp tục đổi mới mạnh mẽ phương pháp dạy và học theo hướng
hiện đại; phát huy tính tích cực, chủ động, sáng tạo và vận dụng kiến thức, kỹ năng của người học; khắc phục lối truyền thụ áp đặt một chiều, ghi nhớ máy móc Tập trung dạy cách học, cách nghĩ, khuyến khích tự học, tạo cơ sở để người học tự cập nhật và đổi mới tri thức, kỹ năng, phát triển năng lực Chuyển từ học chủ yếu trên lớp sang tổ chức hình thức học tập đa dạng, chú ý các hoạt động xã hội, ngoại khóa, nghiên cứu khoa học Đẩy mạnh ứng dụng công nghệ thông tin và truyền thông trong dạy và học” [1].
Điều 24.2 Luật giáo dục qui định: “Phương pháp giáo dục phổ thông phải phát
huy tính tích cực, tự giác, chủ động của học sinh; phù hợp với đặc điểm từng lớp học, môn học; bồi dưỡng phương pháp tự học, rèn luyện kỹ năng vận dụng kiến thức vào thực tiễn, tác động đến tình cảm, đem lại niềm vui, hứng thú học tập cho học sinh”[2].
Để thực hiện tốt mục tiêu về đổi mới căn bản, toàn diện GD&ĐT theo Nghị quyết
số 29-NQ/TW, Luật giáo dục, giáo viên cần có nhận thức đúng về bản chất của đổi mới phương pháp dạy học theo định hướng phát triển năng lực người học và một số biện pháp đổi mới phương pháp dạy học theo hướng này
Nếu như trước đây môn Tin học chủ yếu chỉ truyền đạt cho các em kiến thức lý thuyết, hàn lâm thì nay đã chú trọng tới thực hành và giải các bài tập, giúp các em làm quen với lập trình trên máy tính, hiện nay các trường phổ thông đã được trang
bị cơ sở vật chất phục vụ dạy và học: phòng máy, phòng nghe nhìn đã được chuẩn hóa, học sinh ý thức được môn học nên tập trung hơn Tuy nhiên, những thay đổi
đó chưa thực sự mang lại hiệu quả cao trong việc tiếp thu và nhận thức bài học của học sinh và phần lớn học sinh chưa có điều kiện để tiếp cận với nhiều tài liệu, cũng như thời gian để làm việc với máy tính đang còn ít Môn Tin học đối với học sinh
là môn khó, đặc biệt là chương trình lớp 11 vì kiến thức lập trình đa số với nhiều học sinh là khó tiếp cận
Trong quá trình giảng dạy chương trình lớp 11 học sinh gặp rất nhiều khó khăn trong việc giải quyết các bài tập lập trình như : việc soạn thảo chương trình, gỡ lỗi chương trình, chạy chương trình, kiểm thử
[1] Nghị quyết Hội nghị TW8 – Khóa XI về đổi mới căn bản, toàn diện giáo dục và đào tạo [2] Luật Giáo dục 2005
Trang 4Việc dạy học nội dung cấu trúc lặp với số lần biết trước, lặp với số lần chưa biết trước học sinh rất khó tiếp thu, đôi khi chưa biết sử dụng hai cấu trúc này để làm các bài tập trong sách giáo khoa và một số bài tập cơ bản Do đó để phần nào giúp học sinh lựa chọn cấu trúc lặp vào sử dụng ở một số bài tập cơ bản tôi chọn đề tài
: “Sử dụng một số bài tập cơ bản để củng cố học bài 10 “ cấu trúc lặp” trong sách giáo khoa tin học 11 ”
1.2 Mục đích nghiên cứu.
Đưa ra khái niệm về cấu trúc lặp với số lần biết trước và lặp với số lần chưa
biết trước, các ví dụ cơ bản để học sinh rèn luyện sử dụng các cấu trúc lặp
1.3 Đối tượng nghiên cứu.
- Nghiên cứu : cấu trúc lặp khi viết chương trình trong pascal và một số bài tập về
cấu trúc lặp
- Thực trạng học và làm bài tập môn Tin học của học sinh khối 11 tại trường THPT Nga Sơn
1.4 Phương pháp nghiên cứu.
- Phương pháp nghiên cứu lý thuyết
- Phương pháp nghiên cứu thực tiễn
- Phương pháp thực nghiệm sư phạm
- Phương pháp thống kê toán học
2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM
Khi học sinh học bài học bài 10 “Cấu trúc lặp” các em gặp rất nhiều khó
khăn, nhầm lẫn trong việc lựa chọn cách sử dụng câu lệnh for , câu lệnh while do Sáng kiến kinh nghiệm này sẽ giúp học sinh củng cố cách sử dụng cấu trúc lặp và cách sử dụng cấu trúc lặp khi lập trình
2.1 Cơ sở lí luận
Trong sáng kiến kinh nghiệm này xin được trình bày phần cấu trúc lặp với số lần biết trước, lặp với số lần chưa biết trước
a.Cấu trúc câu lệnh lặp với số lần biết trước for ( dạng lặp tiến):
For <biến đếm> := <giá trị đầu > to <giá trị cuối> do <câu lệnh >; Cấu trúc câu lệnh for dạng lặp tiến thực hiện các câu lệnh từ giá trị đầu đến giá trị cuối, giá trị đầu luôn luôn nhỏ hơn hoặc bằng giá trị cuối Giá trị đầu và giá trị cuối cùng kiểu với biến đếm Giá trị của biến đếm là kiểu nguyên hoặc kiểu ký tự Do
đó khi thực hiện câu lệnh của cấu trúc lặp for ta đã biết trước số lần lặp
b.Cấu trúc câu lệnh lặp với số lần biết trước for ( dạng lặp lùi):
For <biến đếm> := <giá trị cuối > downto <giá trị đầu> do <câu lệnh >; Cấu trúc câu lệnh for dạng lùi thực hiện các câu lệnh từ giá trị cuối đến giá trị đầu Giá trị đầu và giá trị cuối cùng kiểu với biến đếm Giá trị của biến đếm là kiểu
Trang 5nguyên hoặc kiểu ký tự Do đó khi thực hiện câu lệnh của cấu trúc lặp for ta đã biết trước số lần lặp
c Cấu trúc câu lệnh lặp với số lần chưa biết trước :
Khi làm việc với cấu trúc lặp với số lần chưa biết trước học sinh chủ yếu sử dụng cấu trúc lặp while do còn cấu trúc repeat until sách giáo khoa tin học chưa
đề cập đến trong bài cấu trúc lặp Do đó trong sáng kiến này xin chưa được đề cập
Cấu trúc câu lệnh lặp với số lần chưa biết trước while do :
While <điều kiện> do <câu lệnh>;
Điều kiện ở đây là biểu thức logic nhận một trong hai giá trị TRUE hoặc FALSE Để thực hiện câu lệnh điều kiện nhận giá trị TRUE, khi điều kiện nhận giá trị FALSE thoát khỏi câu lệnh
d Khi nào sử dụng câu lệnh for:
Việc sử dụng câu lệnh for khi biết được hai yếu tố quan trọng : Giá trị đầu, giá trị cuối Khi đó chúng ta sẽ viết được câu lệnh for
e Khi nào sử dụng câu lệnh while do
Câu lệnh while do được sử dụng khi chúng ta xác định được điều kiện để thực
hiện câu lệnh, điều kiện để dừng câu lệnh Các bài toán đã sử dụng được câu lệnh for thì hoàn toàn có thể chuyển sang câu lệnh while do
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm
Mặc dù hiện nay công tác dạy và học môn Tin học tại các trường phổ thông đã được quan tâm, cơ sở vật chất được trang bị nhưng chất lượng học sinh vẫn chưa thực sự được nâng cao
Tại trường THPT Nga Sơn, phần lớn học sinh có ý thức học tập và hứng thú với môn tin học Các tiết học được sử dụng máy chiếu, phòng thực hành nhiều hơn giúp cho học sinh học tập sinh động, trực quan hơn Tuy nhiên có một thực tế mà tôi và các đồng nghiệp trong nhóm còn nhiều băn khoăn, trăn trở đó là chất lượng học sinh ở khối lớp 11 chưa cao Các bài tập sử dụng cấu trúc lặp học sinh giải quyết chưa được nhiều Việc sử dụng cấu trúc lặp trong việc giải quyết các bài tập
cơ bản học sinh đang còn lúng túng Do đó học sinh rất ngại, khó khăn khi làm các bài tập về lập trình
2.3 Các giải pháp để giải quyết vấn đề
2.3.1 Các bài tập về câu lệnh for :
a Bài tập 1: Viết chương trình tính tổng s=1
a+
1
a+1+
1
a+2+…+
1
a+100 với được nhập vào từ bàn phím (a >2)
Program baitap1;
var a,i:longint;
s:real;
Trang 6BEGIN
write('Moi nhap so a = '); read(a);
s:=0;
for i:=1 to 100 do s:=s+ 1/(a+i);
writeln('s=', s:1:2);
readln;
readln;
END
Giá trị nhập vào Kết quả lấy ra
Trong bài tập trên sử dụng câu lệnh for dạng lặp tiến Giá trị đầu được xác định là
1 và giá trị cuối là 100 Kết quả của của bài toán phụ thuộc vào giá trị a được nhập vào từ bàn phím và lấy hai số sau dấu phẩy
b Bài tập 2: Viết chương trình thực hiện nhập từ bàn phím hai số nguyên m và n
(m < n), tính và đưa ra màn hình tổng các số chia hết cho 3 hoặc 5 trong phạm vi từ
m đến n
Program baitap2;
var s,m,n,i:longint;
BEGIN
write('Moi nhap so m = '); read(m);
write('Moi nhap so n = '); read(n);
s:=0;
for i:=m to n do
if ( i mod 3=0) or ( i mod 5=0) then s:=s+i;
writeln('s=', s);
readln;
readln;
END
Giá trị nhập vào Kết quả lấy ra
1
5
8
Trong bài tập trên sử dụng câu lệnh for dạng lặp tiến, giá trị đầu được xác định là m
và giá trị cuối xác định giá trị n Tùy thuộc vào giá trị của m và n ta được kết quả tương ứng
c Bài tập 3: Viết chương trình đưa ra các ký tự từ A đến Z
Trang 7Program baitap3;
var ch: char;
BEGIN
for ch:='A' to 'Z' do write(ch:3);
readln;
readln;
END
Bài tập trên yêu cầu đưa ra các ký tự từ A đến Z do đó ta xác định giá trị đầu là ký
tự A và giá trị cuối là ký tự Z Khi viết chương trình học sinh chú ý khai báo biến đếm có giá trị kiểu Char Nhiều học sinh khai báo biếm đếm kiểu số nguyên dẫn đến chương trình không chạy được vì sai cú pháp
d Bài tập 4: Viết chương trình tính tổng s= 1
100+
1
99+
1
98+…+1 Program baitap4;
var i: longint;
s: real;
BEGIN
s:=0;
for i:=100 downto 1 do s:=s+1/i;
writeln('s=',s:1:2);
readln;
readln;
END
Bài tập trên xác định giá trị đầu là 1 và giá trị cuối là 100 Câu lệnh lặp sử dụng là dạng for lùi, kết quả của bài toán lấy đến 2 số sau dấu phẩy là 5.19 Việc sử dụng câu lệnh dạng for lùi và dạng for tiến đều có kết quả như nhau Tùy vào mỗi trường
hợp, mỗi bài toán mà sử dụng cho thuận tiện
2.3.2 Các bài tập về câu lệnh while do :
a Bài tập 1: Viết chương trình tính tổng s=1
a+
1
a+1+
1
a+2+…+
1
a+ N a>2 cho đến
khi a+N1 <0.0001
Program baitap1;
var s : real;
a, n :longint;
BEGIN
write(' moi nhap a='); read(a);
Trang 8s:=1/a; n:=1;
while (1/(a+n) >= 0.0001) do
begin
s:=s+1/(a+n);
n:=n+1;
end;
writeln('s=',s:1:2);
readln;
readln;
END
Giá trị nhập vào Kết quả lấy ra
Chương trình trên không thể xác định được giá trị đầu, giá trị cuối nên không thể sử dụng câu lệnh dạng for Số lần lặp phụ thuộc vào điều kiện của đề bài và tham số a, điều kiện lặp kết thúc a+N1 <0.0001 Cấu trúc lặp được sử dụng là câu lệnh while
do, với giá trị a =3 cho kết quả gần đúng sau hai số sau dấu phẩy là 8.29
b Bài tập 2: Viết chương trình tính s=1+ 1
1 !+
1
2 !+…+
1
n ! cho đến khi n !1 <2× 10−6
Program baitap2;
var i,n:longint;
s:real;
BEGIN
s:=1; n:=1; i:=1;
while (1/n >= 2*0.000001) do
begin
s:=s+1/n;
i:=i+1;
n:= n*i;
end;
writeln('s=', s:1:2);
readln;
readln;
END
Chương trình trên không thể xác định được giá trị đầu và giá trị cuối mà chỉ biết được câu lệnh kết thúc khi n !1 <2× 10−6
do đó ta sử dụng cấu trúc lặp while do để
Trang 9thực hiện bài tập này Bài tập liên quan đến giá trị của giai thừa rất lớn nên trong sáng kiến này xin chưa được đề cập đến, giá trị của bài toán sau khi thực hiện cho kết quả gần đúng là 2.72
c Bài tập 3: Cho hai số nguyên dương M và N Tìm ước chung lớn nhất của hai
số nguyên dương M và N
Program baitap3;
var m,n:longint;
BEGIN
write(' moi nhap so m'); read(m);
write('Moi nhap so n '); read(n);
while m<>n do
if m >n then m:=m-n else n:=n-m;
writeln('Uoc chung lon nhat ', n);
readln;
readln;
END
Bài toán tìm ước chung lớn nhất của hai số nguyên dương có rất nhiều cách giải tối
ưu Trong sáng kiến này đưa ra cách giải đơn giản nhất để tìm ước chung lớn nhất của hai số Để tìm ước chung lớn nhất của hai số ta lấy số lớn trừ đi số nhỏ, quá trình trên lặp lại cho đến khi giá trị của hai số bằng nhau Điều kiện để lặp ở bài toán là hai số khác nhau, khi hai số bằng nhau thì dừng câu lệnh while do
Giá trị nhập vào Kết quả lấy ra
3 4
1
2.3.3 Các bài tập tổng hợp về cấu trúc lặp :
a Bài tập 1: Cho số nguyên dương N( 0 < N <105) Đưa ra màn hình thông báo số
N vừa nhập có phải số nguyên tố hay không Nếu N là số nguyên tố đưa ra màn hình YES và ngược lại NO
Sử dụng cấu trúc lặp với số lần biết trước (câu lệnh for):
Program baitap1;
var i,n:longint;
ok:boolean;
Trang 10BEGIN
write(' moi nhap n '); read(n);
if n<=1 then ok:=false;
if (n=2) or (n=3) then ok:=true;
if n>=4 then
begin
ok:=true;
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then begin ok:=false; break ; end;
end;
if ok=false then writeln('So ',n,' khong phai la so nguyen to')
else writeln('So ',n,' la so nguyen to');
readln;
readln;
END
Sử dụng cấu trúc lặp với số lần chưa biết trước (câu lệnh while do):
Program baitap1;
var i,n:longint;
ok:boolean;
BEGIN
write(' moi nhap n '); read(n);
if n<=1 then ok:=false;
if (n=2) or (n=3) then ok:=true;
if n>=4 then
begin
ok:=true;
i:=2;
while i <= trunc(sqrt(n)) do
begin
if n mod i=0 then begin ok:=false; break ; end;
i:=i+1;
end;
end;
if ok=false then writeln('So ',n,' khong phai la so nguyen to')
else writeln('So ',n,' la so nguyen to');
readln;
Trang 11readln;
END
Giá trị nhập vào Kết quả lấy ra
Bài toán kiểm tra số nguyên dương N bất kỳ có phải là số nguyên tố có rất nhiều thuật toán tối ưu Để minh họa cấu trúc lặp trong sáng kiến này tôi xin trình bày thuật toán theo cách trên Bài toán được xác định với giá trị đầu 2 và giá trị cuối là phần nguyên của căn n do đó việc áp dụng bài toán theo hai cấu trúc lặp đều cho kết quả giống nhau
b Bài tập 2: Cho số nguyên dương N( 0< N <105) Đưa ra màn tổng các chữ số của N
Program baitap2;
var s,i,n:longint;
BEGIN
write(' moi nhap n '); read(n);
s:=0;
while n <>0 do
begin
i:= n mod 10;
n:=n div 10;
s:=s+i;
end;
writeln('Ket qua ',s);
readln;
readln;
END
Bài toán trên yêu cầu tính tổng các chữ số của số nguyên dương N Để lấy các số hạng của số n ta lần lượt chia số đó cho 10 rồi lấy phần dư, quá trình trên lặp lại cho đến khi ta lấy hết các số hạng của n khi đó số n có giá trị là 0 Điều kiện để lặp
là giá trị của n khác 0 Trong phạm vi kiến thức học sinh được học chỉ có thể sử dụng cấu trúc dạng while do, cấu trúc dạng for được sử dụng khi học sinh đã được học bài kiểu xâu
Giá trị nhập vào Kết quả lấy ra