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

Kinh nghiệm rèn luyện kỹ năng sử dụng cấu trúc lặp trong lập trình pascal cho đội tuyển học sinh giỏi môn tin học lớp 11

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 (327.69 KB, 20 trang )

SỞ GIÁO DỤC VÀ ĐÀO TẠO YÊN BÁI

TRƯỜNG THPT CẢM NHÂN

BÁO CÁO SÁNG KIẾN CẤP CƠ SỞ
Lĩnh vực: Chuyên môn Tin học
TÊN SÁNG KIẾN
“Giải pháp rèn luyện kĩ năng sử dụng cấu trúc lặp
trong lập trình Pascal cho đội tuyển học sinh giỏi môn tin học lớp 11”

Tác giả: Nguyễn Mạnh Linh
Trình độ chun mơn: Đại Học
Chức vụ: Giáo viên
Đơn vị công tác: Trường THPT Cảm Nhân

Cảm nhân, ngày 05 tháng 02 năm 2022


2

I. THÔNG TIN CHUNG VỀ SÁNG KIẾN:
1. Tên sáng kiến: “Giải pháp rèn luyện kĩ năng sử dụng cấu trúc lặp trong
lập trình Pascal cho đội tuyển học sinh giỏi môn tin học lớp 11”.
2. Lĩnh vực áp dụng sáng kiến: Chuyên môn Tin học.
3. Phạm vi áp dụng sáng kiến: Bài 10 Cấu trúc lặp chương trình Tin học
lớp 11 khối Trung học phổ thông ban cơ bản.
4. Thời gian áp dụng sáng kiến:
Từ tháng 09 năm 2021 đến tháng 2 năm 2022.
5. Tác giả:
Họ và tên: Nguyễn Mạnh Linh.
Năm sinh: Ngày 20 tháng 03 năm 1984.


Trình độ chuyên môn: ĐHSP Tin học.
Chức vụ công tác: Giáo viên.
Nơi làm việc: Trường THPT Cảm Nhân – Yên Bình – Yên Bái.
Địa chỉ liên hệ: Nguyễn Mạnh Linh - Giáo viên trường THPT Cảm Nhân Yên Bình - Yên Bái.
Điện thoại: 0919723809.
II. MƠ TẢ SÁNG KIẾN:
1. Tình trạng các giải pháp đã biết:
Thực trạng bộ môn Tin học ở trường THPT Cảm Nhân thường ít được học
sinh quan tâm và yêu thích. Nhất là chương trình tin học lớp 11 vì đây là một nội
dung kiến thức đòi hỏi sự tư duy sâu và khả năng sáng tạo. Khác hẳn với chương
trình tin học 10, 12 là các chương trình ứng dụng, dễ hiểu, dễ vận dụng, dễ hình
dung. Do vậy mà đại đa số các em khi học về nội dung này đều cảm thấy khó tiếp
cận và vẫn gặp phải một số khó khăn trong lập trình, chưa biết cách tối ưu hóa
thuật tốn, thậm chí cịn mắc sai lầm khi lập trình giải các bài tốn có sử dụng đến
cấu trúc lặp.
Mặt khác. Một trong những yếu tố quan trọng và khơng thể thiếu của một
chương trình là “việc điều khiển”, cụ thể là các cấu trúc điều khiển, cũng là thành
tố kết hợp đồng thời giữa dữ liệu và tác vụ. Cấu trúc điều khiển là một trong các
đặc trưng cơ bản của phương pháp lập trình cấu trúc. Trong đó người ta sử dụng
ba cấu trúc điều khiển để tạo nên logic của chương trình. Mọi vấn đề về logic đều
được giải quyết bằng cách sử dụng linh hoạt ba cấu trúc điều khiển đó là:
* Cấu trúc tuần tự; Cấu trúc rẽ nhánh; Cấu trúc lặp.
Điều này dẫn đến ý thức tự học và rèn luyện của học sinh chưa cao, đặc
biệt là các em học để thi học sinh giỏi môn Tin lại càng khó. Trên cơ sở thực tế
đó tơi đã viết ra Sáng kiến: “Giải pháp kĩ năng sử dụng cấu trúc lặp trong lập


3

trình pascal cho đội tuyển học sinh giỏi lớp 11” nhằm cung cấp cho học sinh

những kiến thức khái quát hơn về cấu trúc lặp và rèn luyện kỹ năng lập trình cho
đội tuyển học sinh giỏi nhà trường thơng qua một số bài toán cụ thể và đã áp dụng
trong năm học trước và học kì 1 năm học này tại trường THPT Cảm Nhân.
2. Nội dung các giải pháp đề nghị cơng nhận sáng kiến:
2.1. Mục đích của Sáng kiến:
Góp phần đổi mới phương pháp dạy học sinh giỏi mơn Tin học theo hướng
phát huy tính tích cực, chủ động và sáng tạo của học sinh giúp học sinh tiếp thu
tri thức một cách có hiệu quả.
Góp phần gây hứng thú học tập môn Tin học cho học sinh tham gia thi chọn
học sinh giỏi, tránh việc học thụ động, học vẹt. Giúp học sinh lĩnh hội tri thức một
cách khoa học, củng cố và khắc sâu kiến thức.
Qua đề tài này tôi mong muốn cung cấp cho học sinh một những vấn đề mà
các em đang gặp phải về kĩ năng sử dụng cấu trúc lặp trong khi lập trình giúp các
em chủ động hơn trong học tập, tích luỹ kiến thức, kỹ năng lập trình.
2.2. Nội dung của Sáng kiến:
Tất cả các nội dung, các ví dụ, bài tập trong đề tài này được xây dựng trên
ngơn ngữ lập trình Pascal.
2.3 Tìm hiểu về Lặp
Đưa ra 2 bài tốn đơn giản:
Bài tốn 1: Tính và đưa kết quả ra màn hình tổng
S = 1+2+3+…+100
Bài tốn 2: Tính và đưa kết quả ra màn hình tổng
S = 1+2+3+..+n+… cho đến khi S > 105
Với cả 2 bài tốn trên, dễ thấy cách để tính tổng S có nhiều điểm tương tự:
• Xuất phát, S được gán giá trị 0;
• Tiếp theo cơng vào tổng S một giá trị i với i = 1,2,3,4,5,….
Việc cộng này được lặp lại một số lần.
Đối với bài toán 1, số lần lặp là 100 và việc cộng vào tổng S sẽ kết thúc khi
thực hiện công việc 100 lần.
Đối với bài toán 2, số lần lặp chưa biết trước nhưng việc cộng vào tổng S

sẽ kết thúc khi điều kiện S > 105 được thỏa mãn.
Nói chung, ta thấy trong một số thuật tốn có những thao tác phải lặp đi lặp
lại nhiều lần. Cấu trúc lặp mô tả thao tác lặp được phân biệt 2 loại là 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 ngơn ngữ lập trình đều có các câu lệnh để mô tả cấu trúc lặp.
2.3.1. Lặp với số lần biết trước và câu lệnh FOR – DO


4

a. Ví dụ 1:
Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n (0<=n<=106).
* Ý tưởng
- Sử dụng vòng lặp tiến với biến đếm i chạy từ đến n để duyệt lần lượt các
số từ 1 đến n;
- Nếu i lẻ ( i mod 2 <> 0) thì in ra số i.
* Code tham khảo
Program In_So_le;
Uses crt;
var i,n: longint;
Begin
Clrscr;
Write('Nhap so n ='); readln(n);
For i:=1 to n do
if i mod 2 <>0 then Write(i,', ');
readln
end.
b. Ví dụ 2:
Viết chương trình đếm xem có bao nhiêu số lẻ trong đoạn từ 20 đến 100.
* Ý tưởng

- Dùng 1 biến đếm kiểu nguyên (dem) để đếm số lượng số lẻ. Ban đầu khởi
tạo dem:=0;
- Sử dụng vòng lặp for tiến với biến đếm i chạy từ 20 đến 100 ( vì xét trong
đoạn từ 20 đến 100 ( KH:[20,100] nên ta phải xét cả 2 đầu mút: i=20 và i=100)
- Nếu i lẻ ( i mod 2 <> 0) thì tăng biến đếm dem lên 1 đơn vị.
* Code tham khảo
Program dem_So_le;
Uses crt;
var i, dem: integer;
Begin
Clrscr;
dem:=0;
For i:=20 to 100 do
if i mod 2 <>0 then inc(dem);
write(‘Co ‘,dem,’ so le trong doan tu 20 den 100’);


5

readln
end.
c. Ví dụ 3:
Viết chương trình đếm xem có bao nhiêu số chẵn, bao nhiêu số lẻ trong
khoảng từ n đến m (0* Ý tưởng
- Dùng 2 biến đếm kiểu nguyên (d_chan, d_le) để đếm số lượng số chẵn và
số lượng số lẻ. Ban đầu khởi tạo d_chan:=0; d_le:=0;
- Sử dụng vòng lặp for tiến hoặc lùi với biến đếm i chạy từ n+1 đến m-1
- Nếu i chẵn ( i mod 2 = 0) thì tăng biến d_chan lên 1 đơn vị. Nếu i lẻ ( i
mod 2 <> 0) thì tăng biến d_le lên 1 đơn vị.

* Code tham khảo
Program dem_So_chan_le_2;
Uses crt;
var i,n,m, d_chan, d_le: qword;
Begin
Clrscr;
Write('Nhap so n ='); readln(n);
Write('Nhap so m ='); readln(m);
d_chan:=0;
d_le:=0;
For i:=n+1 to m-1 do
if i mod 2 <>0 then inc(d_le)
else inc(d_chan);
Writeln(‘Co ‘,d_chan,’ so chan trong khoang tu ‘,n,’ den ‘,m);
Writeln(‘Co ‘,d_le,’ so le trong khoang tu ‘,n,’ den ‘,m);
readln
end.
d. Ví dụ 4:
Một số có tổng các ước thực sự (là các ước không kể chính nó) bằng chính
nó được gọi là số hồn chỉnh.
Ví dụ: Số nguyên 6 có các ước thực sự là 1, 2, 3. Tổng là 1 + 2 + 3 = 6.
Viết chương trình xét xem một số n (n<1018) được nhập từ bàn phím có
phải là số hồn chỉnh không.
* Ý tưởng


6

- Dùng biến n lưu số cần xét.
- Biến S lưu trữ tổng các ước thực sự, khởi tạo s:= 0;

- Sử dụng vòng lặp for với biến đếm i chạy từ 1 đến n-1. nếu i là ước của n
thì cộng thêm i vào S.
- Nếu S = n thì đưa ra thơng báo n là số hồn chỉnh, ngược lại đưa ra thơng
báo n khơng là số hồn chỉnh .
* Code tham khảo
Program So_Hoan_Chinh;
uses crt;
var n, i, s: int64;
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.
* Nhận xét
Ước lớn nhất của số ngun N khơng kể chính nó ln <= N div 2. Vì vậy,
thay vì duyệt i từ 1 đến n-1 ta chỉ cần duyệt i từ 1 đến n div 2, việc làm này sẽ làm
giảm đáng kể số lần lặp do đó có thể tiết kiệm time chạy chương trình (nhất là với
n lớn). Chương trình giải bài tốn trên có thể được cài đặt lại như sau:
Program So_Hoan_Chinh;
uses crt; var n, i, s: int64;
begin
write('nhap so n: ');readln(n);
s:=0;
for i:= 1 to n div 2 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.


7

e. Ví dụ 5:
Viết chương trình tìm các số hồn chỉnh nhỏ hơn n (n<1015).
* Ý tưởng
- Sử dụng 2 vịng lặp for lồng nhau để kiểm tra tính hồn hảo của các số từ
1 đến n-1.
* Code tham khảo
Program Tim_uoc_2;
uses crt;
Var S, n, i, j: longint;
Begin
clrscr;
Write('Nhap so n ='); readln(n);
For i:=1 to n-1 do
Begin
S:=0;
For j:=1 to i div 2 do
if i mod j = 0 then S:=S+j;
if S = i then write(i,', ');
end;
readln
end.
g. Ví dụ 6:
Viết chương trình xét xem một số n có phải là số nguyên tố khơng

(0Số ngun tố là số chỉ có 2 ước là 1 và chính nó
* Ý tưởng
- Nếu n khơng chia hết mọi số i trong đoạn từ 2 đến n - 1 thì n là số nguyên tố.
- Sử dụng biến ok có kiểu boolean và có giá trị ban đầu là true.
- Cho biến i chạy từ 2 đến n – 1. Xét n mod i = 0 thì gán ok = false.
- Nếu ok = true thì n là số ngun tố, ngược lại thì n khơng phải là số nguyên tố
* Code tham khảo
Program Nguyen_to_1;
uses crt;
var n, i: integer; ok: boolean;
begin


8

ok:=true;
write('Nhap n: ');readln(n);
for i:= 2 to n-1 do
if n mod i = 0 then ok :=false;
if ok then write(n,' la so nguyen to')
else write(n, ' khong la so nguyen to');
readln
end.
* Nhận xét + Ở đây ta sử dụng biến có kiểu logic (Đúng, sai). Chỉ cần một lần
n mod i = 0 thì sau khi thực hiện xong vịng lặp ok có giá trị là false.
+ Mọi số nguyên N nếu có ước khác 1 và chính nó thì chắc chắn có ước
trong đoạn từ 2 đến phần nguyên căn bậc 2 của N. Vì vậy thay vì kiểm tra n có
chia hết cho số nào trong đoạn từ 2 đến n -1 hay không, ta chỉ cần kiểm tra n có
chia hết cho số nào trong đoạn từ 2 đến trunc(sqrt(n)) hay không, việc làm này sẽ

giúp giảm đáng kể số lần lặp, giúp tiết kiệm thời gian thực hiện chương trình.
Giá trị của N

Các ước của N ( Khác 1 và N)

Trunc(sqrt(n))

2

1

3

1

4

2

5
6

2
2

2, 3

7

2

2

8

2, 4

2

9

3

3

10

2, 5

3

11
12

3
2,3, 4,6

13

3
3


14

2, 7

3

15

3, 5

3

16

2,4, 8

4

17
18

4
2, 6,9

4


9


Chương trình trên có thể được viết lại như sau:
Program Nguyen_to_2;
uses crt;
var n, i: integer;
ok: boolean;
begin
ok:=true;
write('Nhap n: ');readln(n);
for i:= 2 to trunc(sqrt(n)) do
if n mod i = 0 then ok :=false;
if ok then write(n,' la so nguyen to')
else write(n, ' khong la so nguyen to');
readln
end.
+ Trong chương trình Nguyen_to_2 nếu đã phát hiện n chia hết cho 1 số
trong đoạn từ 2 đến trunc(sqrt(n)) rồi (thuật tốn có thể kết thúc và thơng báo kết
quả) nhưng vịng lặp vẫn tiếp tục kiểm tra các số tiếp theo. Điều này làm thời gian
thực hiện chương trình chưa được tối ưu
Để khắc phục nhược điểm này ta sử dụng thủ tục Break, cho phép thốt
khỏi vịng lặp gần nhất chứa nó.
Chương trình có thể viết lại:
Program Nguyen_to_3;
uses crt;
var n, i: integer; ok: boolean;
begin
ok:=true; write('Nhap n: ');readln(n);
for i:= 2 to trunc(sqrt(n)) do
if n mod i = 0 then begin
ok :=false;
break;

end;
if ok then write(n,' la so nguyen to')
else write(n, ' khong la so nguyen to');
readln
end.


10

h. Ví dụ 7:
Lập trình tính giai thừa của số nguyên n (n<=8)
* Ý tưởng
N! = 1.2.3…n (tích các số tự nhiên từ 1 đến n). Khơng có cơng thức
tổng qt để tính n! nhưng ta có cơng thức truy hồi sau:
0!= 1;
N!= n . (n-1)!

Đặt gtn = n!, theo cơng thức trên ta có gt0 = 1;

gtn = gtn-1 . n

* Code tham khảo
Var n, i, gt: longint;
Begin
Writeln(‘Nhap n: ‘);
Readln(n);
gt:=1;
For i:= 1 to n do
gt:= gt*1;
Writeln(‘n! = ‘, gt);

Readln
End.
i. Ví dụ 8:
Dãy số fibonaci được định nghĩa như sau:
f1 = 1, f2=1
fn = fn-1 + fn-2

Viết chương trình in ra số fibonaci thứ n (n <= 1000);
* Ý tưởng
- Nếu n <= 2, ta có f1 = f2 = 1;
- Nếu n > 2: Dựa vào công thức truy hồi của dãy fibonaci ta có thể dẽ dàng
tính được fn dựa vào fn-1 và fn-2. Sử dụng biến f để tính fi ứng với mỗi giá trị của i
(i= 3..n) , theo cơng thức truy hồi ta có f = f1+f2, sau đó f1 và f2 được thay đổi giá
trị để tính phần tử tiếp theo của dãy.
* Code tham khảo
Var i, f, f1, f2: longint;
Begin
Write(‘Nhap n: ‘);
Readln(n);


11

If n <= 2 then writeln(‘So fibonacithu ‘,n,’ la: ‘,1)
Else begin
f1:=1;
f2:=1;
For i:=3 to n do
Begin
f:=f1+f2;

f1:=f2;
f2:=f;
End;
Write(‘So fibonaci thu ‘,n,’ la: ‘,f);
End;
Readln
End.
k. Ví dụ 9:
Tính tổng S =
* Ý tưởng
Đặt si =

2+

4 + ... 2n

với n là một số tự nhiên nhập từ bàn phím.

n dấu căn
2i +

2(i + 1) + ... 2n


s n +1 = 0 , s n =

2i + si +1

si =


ta có cơng thức truy hồi sau:
2n

Tổng cần tính là si. Cơng thức truy hồi là truy hồi ngược (vì tính si qua si+1)
nên dùng for … down … to là thích hợp nhất.
* Code tham khảo
Var i,n : integer;
s : real;
begin
write('Nhap mot so tu nhien n = ');
readln(n);
s:=0;
for i := n downto 1 do
s := sqrt (2 * i + s);
writeln('Ket qua can tinh: s = ',s:10:5);
readln;
end.
2.3.2. Lặp với số lần chưa biết trước


12

Câu lệnh While – do và câu lệnh lặp repeat_until
* Sự giống và khác nhau giữa while – do và repeat – until
- Giống nhau: Cả hai đều là câu lệnh lặp với số lần chưa biết trước
- Khác nhau
While - do

Repeat - until


Là câu lệnh lặp kểm tra điều kiện trước

Là câu lệnh lặp kiểm tra điều kiện
sau

Câu lệnh sau while được lặp lại khi điều
kiện đúng

Dãy lệnh nằm giữa repeat – until
được lặp lại khi điều kiện sai

Câu lệnh sau while có thể khơng được
thực hiện lần nào (Khi ngay từ đầu điều
kiện đã sai)

Dãy lệnh nằm giữa repeat – until
được thực hiện ít nhất 1 lần (dù
ngay từ đâu điều kiện đã đúng)

a. Ví dụ 1:
Viết chương trình tính tổng sau:
S = 1+2+3+..+n+… cho đến khi S > 105
* Ý tưởng
Ta có thể mơ tả thuật tốn giải bài toán trên bằng cách liệt kê như sau:
B1: Gán s ← 0, i ← 0;
B2: Nếu s>105 thì chuyển đến b5
B3: i ← i+1
B4: s = s+i, rồi quay lại b2
B5: Đưa ra S rồi kết thúc
* Code tham khảo

Var
Begin

i, s: longint;
S:=0; i:=1;
While s<= 100000 do
Begin
i:=i+1;
S:=s+i;
End;
Write(‘S= ‘, s);
Readln

End.


13

b. Ví dụ 2:
- Viết chương trình tìm ước chung lớn nhất của hai số nguyên dương M và N.
- Viết chương trình tìm ước chung lớn nhất (UCLN) của hai số với yêu cầu sử
dụng thuật toán Euclid.
Thuật toán Euclid: Nếu a chia hết cho b (a chia b dư 0) thì UCLN(a,b) bằng b
Nếu a chia b dư r thì UCLN(a,b) = UCLN(b,r)
* Ý tưởng
- Nhập a, b và gán r = a mod b.
- Lặp với điều kiện r <> 0: b = r, a = b, r = a mod b.
* Code tham khảo
Program UCLN;
uses crt;

var a,b,r:byte;
begin
clrscr;
writeln('CHUONG TRINH TIM UCLN CUA HAI SO');
write('Nhap a: ');readln(a);
write('Nhap b: ');readln(b);
r:=a mod b;
while r<> 0 do
begin
b:=r;
a:=b;
r:=a mod b;
end;
write('UCLN cua hai so la: ',b);
readln
end.
c. Ví dụ 3:
Viết chương trình cho phép tính tổng của nhiều số (chưa biết bao nhiêu số).
Nhập số 0 để kết thúc quá trình nhập.
* Ý tưởng
- Sử dụng câu lệnh repeat – until để kiểm tra số nhập vào. Kho nào số nhập
vào =0 thì thốt khỏi vòng lặp
* Code tham khảo


14

Program tong_repeat;
uses crt;
var i: byte;

so, tong: real;
begin
write('NHAP CAC SO - NHAP 0 DE NGUNG ');
readln;
repeat
clrscr;
write('Nhap so thu ',i,': ');
readln(so);
tong:=tong+so;
i:=i+1;
until so=0;
write('Tong la: ',tong:0:2);
readln
end.
d. Ví dụ 4:
Viết chương trình sử dụng lệnh repeat – until in ra dãy Fibonacy có phần
tử lớn nhất nhỏ hơn n?
* Ý tưởng
- Cần hai biến F_1 và F có giá trị đầu là 1, 1.
- Thực hiện lặp cho đến khi F >= n.
- Do yêu cầu chỉ in các số bé hơn n nên khi in cần thêm một lệnh kiểm tra.
* Code tham khảo
Program Fi_Bo_na_xi;
Var n, F_2,F_1, F: Longint;
Begin
Write('Nhap n: ');Readln(n);
F_1:=1; F_2:=1;
Write(F_2,';',F_1,';');
Repeat
F:=F_2+F_1;

if F< n then Write(F,';');
F_2:=F_1; F_1:=F;


15

Until F>n;
Readln;
End.
e. Ví dụ 5:
Viết chương trình sử dụng vịng lặp while – do tính tổng:
S=1 + 2 +…+100
* Ý tưởng
- Khởi tạo i=1
- Sử dụng vòng lặp while – do với điều kiện i<=100 để tính tổng
- Sau mỗi lần lặp tăng i lên 1
* Code tham khảo
Var s,i: word;
Begin
s:=0;
i:=1;
While i<=100 do
Begin
s:=s+i;
i:=i+1;
End;
Write(‘S= ‘,s);
Readln
End.
g. Ví dụ 6

Viết chương trình sử dụng vịng lặp repeat_until tính tổng:
S= 1 + 2 +...+100
* Ý tưởng
- Khởi tạo i=1
- Sử dụng vòng lặp repeat – until với điều kiện i>100 để tính tổng
- Sau mỗi lần lặp tăng i lên 1
* Code tham khảo
Var s,i: word;
Begin
s:=0;
i:=1;


16

Repeat
s:=s+i;
i:=i+1;
Until i>100;
Write(‘S= ‘,s);
Readln
End.
* Nhận xét
Cả for - do, while - do, repeat – until đều là lệnh lặp, nhưng for- do chỉ
dùng được cho trường hợp lặp với số lần biết trước, while – do, repeat - until,
tổng quát hơn, có thể dùng cho mọi vịng lặp, nhưng thường sử dụng cho các
trường hợp lặp với số lần chưa biết trước.
h. Ví dụ 7:
Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng số nguyên dương n
(0

* Ý tưởng
- Sử dụng kiến thức số lẻ đầu tiên bằng 1. Số lẻ sau bằng số trước cộng với 2.
- Cho biến i có giá trị ban đầu bằng 1.
- Dùng vịng lặp while do với điều kiện i < n và công việc bên trong là in i và
tăng i lên 2.
* Code tham khảo
Program In_So_Le;
uses crt; var i,n:integer;
begin
clrscr; Repeat
write('Nhap so n: ');readln(n);
until n>0;
i:=1;
while i<=n do
begin
write(i:3,', ');
i:=i+2;
end;
readln
end.


17

* Nhận xét
Người ta thường dùng repeat – until để kiểm tra, khống chế điều kiện của
dữ liệu vào.
2.4. Tính mới của Sáng kiến:
Sáng kiến mà tôi đưa ra ở đây là giúp cho các em học sinh:
Thứ nhất: Có thể tiếp nhận kiến thức bài học theo lộ trình từ cơ bản đến

nâng cao.
Thứ hai: Các em không phải lo lắng dẫn đến chán nản, không hứng thú khi
nhập môn bài học bằng các bài tập vượt quá sức của các em.
Từ đó mới có thể nâng cao được kết quả học tập đối với bài cấu trúc lặp nói
riêng và bộ mơn Tin học 11 nói chung.
3. Khả năng áp dụng của Sáng kiến:
Sáng kiến mà Tôi viết ra có khả năng áp dụng:
* Sáng kiến có khả năng áp dụng cho tất cả các đối tượng học sinh lớp 11
học môn Tin học và bồi dưỡng học sinh khá giỏi tham dự các kì thi chọn học sinh
giỏi cấp mơn tin học, ngồi ra sáng kiến cịn áp dụng cho các em học sinh u
thích bộ mơn Tin học, giúp các em qua lập trình tạo ra những phần mềm có ích
và thiết thực trong đời sống hàng ngày.
* Các thầy cơ có thể áp dụng Sáng kiến trong q trình giảng dạy bộ mơn.
4. Hiệu quả, lợi ích thu được hoặc dự kiến có thể thu được do áp dụng Sáng
kiến:
Trong năm học 2021-2022 tôi được phân cơng giảng dạy hai lớp đội tuyển
đó là: Lớp tin 1 và Lớp tin 2.
Tôi áp dụng sáng kiến đối với lớp tin 1 (lớp thử nghiệm); so sánh đối chứng
với lớp tin 2 (lớp đối chứng). Các lớp này có trình độ học sinh gần như nhau.
Kết quả:
Tỉ lệ % học sinh đạt điểm Xi
Trường

Đối
tượng

Bài
KT

Yếu,

kém
(0-4)

TB
(5-6)

Khá
(7-8)

Giỏi
(9-10)

1

0%

9.1%

54.5%

36.4%

(11hs)

2

0%

0%


45.5%

54.5%

Tin 2

1

0%

23.1%

46.1%

30.8%

2

0%

7.7%

53.8%

38.5%

Lớp

Tin 1
THPT

Cảm
Nhân

TN

ĐC
(13 hs)


18

- Từ bảng số liệu trên, phân tích thấy kết quả thử nghiệm như sau:
+ Bài kiểm tra 1:
Tỉ lệ điểm Trung bình (5 – 6 đ) giảm : 14.0%
Tỉ lệ điểm Khá (7 – 8) tăng: 8.4%
Tỉ lệ điểm Giỏi (9 – 10) tăng: 5.6%
+ Bài kiểm tra 2:
Tỉ lệ điểm Trung bình (5 – 6 đ) giảm: 7.7%
Tỉ lệ điểm Khá (7 – 8) tăng: 8.3%
Tỉ lệ điểm Giỏi (9 – 10) tăng: 16.0%
Nhận xét:
Việc áp dụng sáng kiến lớp tin 1 trong năm học 2021 - 2022 đã mang lại
những thay đổi rõ rệt về kiến thức học sinh đạt được và kĩ năng viết chương trình
của học sinh. Từ đó điểm của học sinh qua từng bài kiểm tra đã tốt hơn. Số lượng
học sinh đạt điểm khá tăng mạnh ở bài kiểm tra số 2 bởi lẽ những học sinh này
đạt điểm Trung bình ở bài kiểm tra trước, sau nỗ lực học tập, hiểu bài và vận dụng
được kiến thức để giải quyết bài toán mới trong đề kiểm tra số 2 đã đạt điểm Khá
ở bài kiểm tra này. Ngoài ra, tỉ lệ học sinh lớp tin 1 đạt điểm giỏi ở bài số 2 tăng
rất ấn tượng.
Kết quả đội tuyển học sinh giỏi: Sáng kiến này sau khi được áp dụng vào bồi

dưỡng học sinh giỏi môn Tin học cấp Trường, cấp Tỉnh năm học 2021 - 2022
cũng đạt được những kết quả khả quan ban đầu đó là:
- Đội tuyển học sinh giỏi cấp trường có 06 em học sinh.
- Đội tuyển học sinh giỏi cấp tỉnh có 02 em với số điểm đạt được là 12, đứng
thứ 16/35.
- Dự thi lập đội tuyển Quốc gia có 02 em.
Từ đó nhận thấy Sáng kiến “Giải pháp rèn luyện kĩ năng sử dụng cấu trúc lặp
trong lập trình Pascal cho đội tuyển học sinh giỏi mơn tin học lớp 11”. có tính
thực tiễn, áp dụng tốt trong giảng dạy môn Tin học, phù hợp với học sinh trường
THPT Cảm Nhân. Ngoài ra sáng kiến đã góp phần phát triển được năng lực, phẩm
chất của học sinh, nâng cao chất lượng dạy học môn Tin học của nhà trường.
Sau một thời gian áp dụng cách làm này tôi nhận thấy kỹ năng lập trình các
vấn đề về cấu trúc lặp của các em tăng lên đáng kể, đặc biệt là hứng thú học tập,
khả năng sáng tạo. Nhiều học sinh đã biết vận dụng linh hoạt cấu trúc lặp để mơ
tả thuật tốn của các bài toán cơ bản và các bài toán mở rộng, biết cải tiến thuật
toán để đưa ra thuật toán tối ưu hơn (giảm số lần lặp → tiết kiệm thời gian thực
hiện chương trình). Đặc biệt là đội tuyển HSG Tin khối 11 năm nay đã có tiến bộ
rất nhiều so với đội tuyển HSG Tin 11 những năm trước. Mặc dù thời gian ôn


19

luyện trên trường với giáo viên không được nhiều, ở nhà lại khơng có máy tính
để thực hành nhưng các em vận dụng thành thục cấu trúc lặp, biết lựa chọn cấu
trúc phù hợp để mơ tả thuật tốn, hơn thế nữa biết cải tiến thuật toán để giảm tới
mức tối thiểu số lần lặp. Điều đó cho thấy hiệu quả của cách rèn luyện kỹ năng
lập trình bằng việc mở rộng bài toán cơ bản. Với cách làm đơn giản này các em
học sinh sẽ có hứng thú để tiếp tục tìm hiểu và giải quyết các bài tốn khác, các
thầy, cơ có thể áp dụng cách làm này với nhiều dạng bài tập khác nhau để thấy
được hiệu quả của sáng kiến.

Sáng kiến kinh nghiệm này là một kinh nghiệm của bản thân tôi khi giảng
dạy môn tin học khối 11 và bồi dưỡng đội tuyển học sinh giỏi tin 11 để đi thi tại
một trường mà điểm thi đầu vào lớp 10 ở mức trung bình trong huyện, học sinh
chưa có bất kì kiến thức cơ bản gì về lập trình nên việc chọn và dạy đội tuyển rất
khó khăn, nhiều em đã tham gia đội tuyển nhưng sau khi ơn luyện thấy khó mà
bỏ cuộc. Với kết quả đó, tơi mạnh dạn viết ra sáng kiến kinh nghiệm này mặc dù
cách làm chưa được đầy đủ và sâu sắc, chưa thể hiện đầy đủ được các ưu nhược
điểm và cịn nhiều thiếu sót, rất mong được sự góp ý kiến, phản hồi của quý độc
giả. Cuối cùng tôi hy vọng sáng kiến kinh nghiệm này sẽ được các đồng nghiệp
nghiên cứu và áp dụng vào thực tiễn dạy học để rút ra những điều lý thú và bổ
ích.
5. Các điều kiện cần thiết để áp dụng sáng kiến:
Sáng kiến được áp dụng cho học sinh lớp 11 và học sinh đội tuyển Học sinh
giỏi môn Tin học lớp 11 – Trường THPT Cảm Nhân.
Sáng kiến có thể được áp dụng được ở những trường có cơ sở vật chất về
phịng học bộ mơn cơ bản và đặc biệt là có trang bị thêm các cơ sở vật chất về
cơng nghệ thơng tin như máy vi tính, máy chiếu, có đường truyền internet,...
III. CAM KẾT KHƠNG SAO CHÉP HOẶC VI PHẠM BẢN QUYỀN:
Tôi xin cam kết: Sáng kiến này là do chính tơi viết, các giải pháp mà tôi đưa
ra đã được áp dụng trong thực tế với đối tượng tại nhà trường và chưa từng được
đăng tải trên mạng internet, chưa từng được công bố trên sách, báo hay đã được
hội đồng sáng kiến các cấp cơng nhận. Nếu sai, tơi xin hồn tồn chịu trách nhiệm.
Cảm Nhân, ngày 05 tháng 02 năm 2022
Người viết báo cáo
(Ký và ghi rõ họ tên)

Nguyễn Mạnh Linh


20


XÁC NHẬN CỦA THỦ TRƯỞNG
VỀ VIỆC TRIỂN KHAI ÁP DỤNG SÁNG KIẾN TẠI ĐƠN VỊ
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
(Nhận xét về việc triển khai sáng kiến tại đơn vị, số người đã áp dụng, hiệu quả,
ký tên, đóng dấu xác nhận)

Cảm Nhân, ngày 07 tháng 02 năm 2022
Hiệu trưởng

Lưu Trung Kiên



×