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

Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình pascal cho học sinh lớp 11 trường THPT quan sơn

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 (131.54 KB, 22 trang )

PHẦN I: MỞ ĐẦU
I.Lý do chọn đề tài
Sự phát triển mạnh mẽ như vũ bão của tin học đã làm cho xã hội có nhiều
nhận thức mới về cách tổ chức các hoạt động. Nhiều quốc gia trên thế giới ý
thức được rất rõ tầm quan trọng của tin học và có những đầu tư lớn cho lĩnh vực
này, đặc biệt trong giáo dục nâng cao dân trí về tin học và đào tạo nguồn nhân
lực có chất lượng cao. Người Việt Nam có nhiều tố chất thích hợp với ngành
khoa học này, vì thế chúng ta hi vọng có thể sớm hoà nhập với khu vực và trên
thế giới.
Trong thời đại thông tin bùng nổ ngày nay, việc lập được các chương trình
tự hoạt động cho máy tính, máy gia dụng là cần thiết và để làm được việc đó cần
có một q trình nghiên cứu, học tập về ngơn ngữ lập trình lâu dài, qua đó nhà
lập trình có thể chọn một ngơn ngữ lập trình thích hợp.
Tin học là một môn học mới ở các trường phổ thơng nên học sinh cịn
nhiều bỡ ngỡ khi tiếp cận với mơn học này. Nội dung tin học lập trình lớp 11 là
một nội dung mới lạ đối với đa số học sinh với nhiều khái niệm, thuật ngữ, cấu
trúc dữ liệu mà học sinh mới được tiếp xúc lần đầu.
Đặc biệt một trong những yếu tố quan trọng và khơng thể thiếu của một
trươ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
Trong chương trình tin học lớp 11, các em học sinh đã được làm quen với
lập trình có cấu trúc trong đó có cấu trúc lặp nhưng trong quá trình học tập và
rèn luyện học sinh 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 cấu trúc lặp.


Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Rèn luyện kĩ năng sử dụng
cấu trúc lặp trong lập trình Pascal cho học sinh lớp 11 trường THPT Quan
Sơn”. 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 học sinh thơng qua một số bài tốn cụ thể.
II.Mục đích nghiên cứu
Do gặp phải những khó khăn trên nên khi lập trình giải các bài tốn học
sinh thường mắc rất nhiều lỗi, thậm chí có những lỗi các em mắc phải nhiều lần
do không hiểu nguyên nhân xuất hiện lỗi. Vì vậy qua đề tài này tơi mong muốn
cung cấp cho học sinh một số 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.
1


III.Đối tượng nghiên cứu
Đề tài này được áp dụng đối với sinh các lớp 11A1, 11A2, 11A3 trường
THPT Quan Sơn năm học 2020 – 2021.
Với nhiệm vụ chủ yếu là đưa ra hệ thống lý thuyết về cấu trúc lặp và ứng
dụng cấu trúc lặp giải các bài tập trong ngơn ngữ lập trình Pascal giúp học sinh
lĩnh hội tri thức, giúp các em tích cực, chủ động tích lũy kiến thức. Qua đó, học
sinh phát triển được tư duy logic thông qua hệ thống bài tập giúp các em rèn
luyện được tính tự giác, tính kỉ luật, thói quen tự học đó là những đức tính rèn
luyện tốt của học sinh
Kế hoạch nghiên cứu: Các vấn đề về cấu trúc lặp trong chương trình tin học
lập trình trên ngơn ngữ Pascal..
IV.Phương pháp nghiên cứu
Để hoàn thành đề tài này, tôi đã tiến hành và áp dụng một số phương pháp
nghiên cứu sau:
- Dựa trên cơ sở lý thuyết của Ngơn ngữ lập trình Pascal. Sự hoạt động tuần
tự từng bước của máy tính khi thực hiện chương trình.

- Thu thập dữ liệu thông qua việc hỏi học sinh về mức độ biết, hiểu và vận
dụng ngơn ngữ lập trình Pascal vào giải các bài tốn trong các mơn học khác.
- Phân tích đánh giá mức độ học sinh hiểu vận dụng, giải được các bài tập,
từ đó xây dựng, giới thiệu các bài tập phù hợp với từng đối tượng học sinh.
- Tổng kết rút kinh nghiệm

2


PHẦN II: NỘI DUNG
I.Cơ sở lý luận
Đảng và Nhà nước ta đã nhận thấy được tầm quan trọng của ngành Tin học
và đã đưa môn học này vào nhà trường phổ thông như những môn khoa học
khác bắt đầu từ năm học 2006-2007.
Chỉ thị số 55/2008/CT- BGTĐT ngày 30/9/2008 của Bộ trưởng Bộ GDĐT
về tăng cường giảng dạy, đào tạo và ứng dụng công nghệ thông tin trong ngành
giáo dục giai đoạn 2008-2011.
Trong bối cảnh toàn ngành Giáo dục và Đào tạo đang nỗ lực đổi mới
phương pháp dạy học theo hướng phát huy tính tích cực chủ động của học sinh
trong hoạt động học tập. Điều 24.2 của Luật giáo dục đã nêu rõ: “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, sáng tạo của
học sinh, phù hợp với đặc điểm của 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”. Như vậy, chúng ta
có thể thấy định hướng đổi mới phương pháp dạy học đã được khẳng định,
khơng cịn là vấn đề tranh luận. Cốt lõi của việc đổi mới phương pháp dạy học ở
trường phổ thông là giúp học sinh hướng tới việc học tập chủ động, chống lại
thói quen học tập thụ động. Với một số nội dung trong đề tài này, học sinh có thể
tự học, tự rèn luyện thơng qua một số bài tập, dạng bài tập cụ thể.
II.Thực trạng vấn đề

Qua thực tế giảng dạy ở trường THPT Quan Sơn các năm qua, tôi nhận
thấy khi học đến chương trình tin học lớp 11 đa số học sinh đều nhận xét bộ mơn
này rất khó.
Theo thống kê kết quả học tập môn tin học 11 năm học 2019 – 2020 như
sau:
- Các học sinh thường gặp khó khăn khi làm các bài toán sử dụng cấu trúc lặp dẫn
đến gặp khá nhiều lỗi khi viết một chương trình trong ngơn ngữ lập trình Pascal.
- Tuy nhiên cũng có một số lượng khơng nhỏ học sinh rất u thích tin học và
thích tìm hiểu một số bài tốn, dạng tốn ngoài phạm vi sách giáo khoa.
III.Các giải pháp đã tiến hành để giải quyết vấn đề
1.Lặp
Xét 2 bài toán sau đây:
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 toá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ồn việc 100 lần.
3


Đố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.Lặp với số lần biết trước và câu lệnh FOR – DO
2.1 .Cú pháp và hoạt động của câu lệnh For – do
Có 2 thuật toán tong1a và tong1b để giải bài toán 1 như sau:
Thuật toán tong1a
Bước 1: S ← 0; i ← 0;
Bước 2: i ← i+1;
Bước 3: Nếu i > 100 thì chuyển đến bước 5;
Bước 4: S ← S+i rồi quay lại bước 2;
Bước 5: Đưa S ra màn hình rồi kết thúc.
Thuật tốn tong1b
Bước 1: S ← 0; i ← 101;
Bước 2: i ← i-1;
Bước 3: Nếu i < 1 thì chuyển đến bước 5;
Bước 4: S ← S+i rồi quay lại bước 2;
Bước 5: Đưa S ra màn hình rồi kết thúc.
Trong thuật tốn tong1a, giá trị i khi bắt đầu tham gia vòng lặp là 1 và sau
mỗi lần lặp i tăng lên 1 đơn vị cho đến khi i > 100 thì kết thúc lặp (thực hiện 100
lần). Trong thuật toán tong1b giá trị i khi bắt đầu tham gia vòng lặp là 100 và
sau mỗi lần lặp giảm đi 1 cho đến khi i < 1 thì kết thúc lặp (thực hiện 100 lần).
Cách lặp trong thuật toán tong1a gọi là dạng lặp tiến và trong thuật toán tong1b
là dạng lặp lùi.
Trong Pascal, cấu trúc lặp với số lần biết trước ứng với 2 dạng lặp tiến và
lặp lùi được mô tả với cú pháp như sau:
 Dạng lặp tiến:
For<biến đếm> := <giá trị đầu>to<giá trị cuối>do<câu lệnh>;
 Dạng lùi:
For<biến đếm> := <giá trị cuối>downto<giá trị đầu>do<câu lệnh>;
Trong đó:
+ Biến đếm là biến đơn thường có kiểu ngun hoặc kiểu kí tự;
+ <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 nhỏ hơn hoặc bằng <giá trị cuối>. Nếu <giá trị đầu> lớn
hơn <giá trị cuối> thì vịng lặp khơng được thực hiện.
Hoạt động:
+ Ở dạng lặp tiến: câu lệnh viết sau từ khóa 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 cuối>.
4


+ Ở dạng lặp lùi: câu lệnh viết sau từ khóa do được thực hiện tuần tự, với
biến đếm lần lượt nhận các giá trị lien tiếp giảm từ <giá trị cuối>đến đầu>.
Chú ý:
+ Giá trị biến đếm được điều khiển tự động vì vậy câu lệnh sau do không
được thay đổi giá trị biến đếm.
+ Không giống với các ngôn ngữ khác Pascal không kiểm tra đếm>><giá trị cuối> trong câu lệnh for – to - do để kết thúc vòng lặp mà kiểm
tra <biến đếm> = <giá trị cuối> để thực hiện lần lặp cuối cùng. Vì lẽ đó việc
can thiệp vào biến đếm có thể gây ra sự cố “vịng lặp vơ tận”. Ngay cả khi biến
đã duyệt hết phạm vi của kiể dữ liệu thì biến lại quay lại giá trị 0 và mọi thứ lại
tiếp tục… trừ khi ấn CTRL+ Break;
+ Trong câu lệnh for<giá trị cuối>, <giá trị đầu> được tính từ khi bắt đầu
vịng lặp để tính số lần lặp, nên trong vịng lặp dù có câu lệnh thay đổi cuối>, <giá trị đầu>thì số lần lặp vẫn khơng thay đổi.
Sử dụng cấu trúc lặp dạng tiến và dạng lùi như trên để mơ tả q trình lặp
trong thuật tốn tong1a và tong1b chương trình có thể được cài đặt như sau:
Program tong1a;
Var S, i: longint;
Begin
S:=0;

For i:= 1 to 100 do S:= S+i;
Write (‘Tong S la: ‘, S);
Readln;
End.
Program tong1b;
Var S, i: longint;
Begin
S:=0;
For i:= 100 downto 1 do S:= S+i;
Write (‘Tong S la: ‘, S);
Readln;
End.
2.2.Một số ví dụ
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 1 <> 0) thì in ra số i.
• Code tham khảo:
Program In_So_le;
Uses crt;
var i,n: longint;
5


Begin
Clrscr;
Write('Nhap so n ='); readln(n);
For i:=1 to n do if i mod 2 <>0 then Write(i,', ');
readln

End.
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’);
readln
End.
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
6


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.
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ố ngun 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<108) được nhập từ bàn phím có phải là số
hồn chỉnh khơng.
•Ý tưởng:
- 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: longint;
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 thời gian 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: longint;
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;
7


if s = n then write(n, ' la so hoan chinh')
else writeln(n, ' khong phai la so hoan chinh');
readln

End.
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.
Ví dụ 6: Lập trình tính giai thừa của số ngun 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:

Đặt gtn = n!, theo cơng thức trên ta có:
•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
8


End.

9


Ví dụ 7: Dãy số fibonaci được định nghĩa như sau:
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 = f 1+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);
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.
Ví dụ 8: Lập trình tính tổng sau:
(SGK Tin học 11 – Trang 51)
•Ý tưởng:
Với bài tốn trên có thể sử dụng cấu trúc lặp với số lần biết trước dạng tiến
hay lùi đều được. Nếu sử dụng cấu trúc lặp For …downto … do ta có thể xây
dựng cơng thức truy hồi để tính giá trị Y như sau:

Với n từ 50 giảm dần về 1
10


Việc cộng vào tổng Y được lặp lại 50 lần, giá trị n khi tham gia vòng lặp là
50 và sau mỗi lần lặp n giảm đi 1 cho đến khi n =1 thì dừng. Như vậy số lần lặp
là biết trước, biến n được sử dụng là một biến đếm giảm từ 50 về 1, tổng cần
tính là Y0
•Code tham khảo:
Var Y: real;
n : integer;
Begin

Y := 0;
for n := 50 downto 1 do Y := Y + n/(n+1);
writeln('Tong Y la: ',Y:10:4);
readln;
End.
Tuy nhiên trong một số trường hợp thì chỉ có thể dùng một cấu trúc, đặc
biệt là khi tính các cơng thức truy hồi. Ta xét một ví dụ dùng for … downto …
do thích hợp hơn:
3.Lặp với số lần chưa biết trước
3.1 .Cú pháp và hoạt động của lệnh lặp với số lần chưa biết trước
a.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 logic
+ Câu lệnh là một câu lệnh trong pascal

Đúng
Sai
Câu lệnh

Sơ đồ hoạt động của câu lệnh While – do

Hoạt động:
B1: Máy tính và kiểm tra điều kiện sau while
B2: Nếu điều kiện đúng thì thực hiện câu lệnh sau do rồi quay lại B1 (quá
trình lặp)
B3: Thực hiện câu lệnh tiếp theo trong chương trình (câu lệnh sau whiledo)
11



Nói một cách khác ta có thể hiểu: Câu lệnh while - do là lệnh lặp kiểm tra
điều kiện trước, câu lệnh sau do sẽ được thực hiện cho đến khi điều kiện nhận
giá trị sai.
b.Câu lệnh lặp repeat_until
Cú pháp:
Repeat
<dãy lệnh>;
Until<điều kiện>;
Trong đó: <điều kiện> là biểu thức quan hệ hoặc logic.

Sai

Câu lệnh
Điều kiện
Đúng

Sơ đồ hoạt động của câu lệnh repeat – until

Hoạt động:
B1: Thực hiện dãy lệnh nằm giữa repeat và until.
B2: Kiểm tra điều kiện sau until, nếu điều kiện sai thì quay lại B1 (quá
trình lặp).
B3:Thực hiện câu lệnh tiếp theo của chương trình (câu lệnh sau repeat –
until).
Nói cách khác câu lệnh repeat – until là câu lệnh lặp kiểm tra điều kiện sau.
Chú ý:
+ Không giống với vòng lặp for - do, cả repeat - until và while - do đều là
các vịng lặp khơng xác định trước số lần lặp. Vì vậy cần có câu lệnh thay đổi
giá trị biến điều khiển vòng lặp để đến một lúc nào đó có thể thốt ra khỏi vòng

lặp.
+ Nếu dùng while - do và repeat - until để cùng giải một bài toán, cùng một
giải thuật như nhau thì điều kiện sau while và điều kiện sau until là phủ định
nhau.
+ Các câu lệnh trong vòng lặp repeat- until khơng cần phải đặt trong cặp từ
khóa begin_end.
 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 Là câu lệnh lặp kiểm tra điều kiện sau
trước
Câu lệnh sau while được lặp lại khi Dãy lệnh nằm giữa repeat – until được
12


điều kiện đúng.
lặp lại khi điều kiện sai.
Câu lệnh sau while có thể khơng được Dãy lệnh nằm giữa repeat – until được
thực hiện lần nào (Khi ngay từ đầu thực hiện ít nhất 1 lần (dù ngay từ đâu
điều kiện đã sai)
điều kiện đã đúng)
3.2.Một số ví dụ
Ví dụ 9: 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 toá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 i, s: longint;
Begin
s:=0;
i:=1;
While s<=100000 do
Begin
i:=i+1;s:=s+i;
End;
Write(‘s= ‘, s);
Readln
End.
Ví dụ 10: 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;
13


while r<> 0 do
Begin
b:=r;
a:=b;
r:=a mod b;
End;
write('UCLN cua hai so la: ',b);
readln
End.
Ví dụ 11: 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 q 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:
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.
Ví dụ 12: 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);
14


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;
Until F>n;
Readln;
End.

Ví dụ 13: 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.
Ví dụ 14: 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;
Repeat
s:=s+i;

i:=i+1;
Until i>100;
Write(‘S= ‘,s);
Readln
15


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.
Ví dụ 15:
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.
•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.
4. Bài tập áp dụng
Bài 1: Viết chương trình tính tổng các số chẵn trong đoạn từ 1 đến 100.
Bài 2: Viết chương trình đếm và in ra số lượng các số nguyên chia hết cho
3 hoặc 7 trong phạm vi từ 1 đến 100.
Bài 3: Viết chương trình nhập vào số ngun n từ bàn phím, tính và đưa ra
tổng sau: S= 1+2+...+n (0Bài 4: Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n, và tính tổng
các số đó với n nhập từ bàn phím. (016


Bài 5: Viết chương trình kiểm tra một số có phải là số nguyên tố hay
không. Biết số nguyên tố là số nguyên dương khác 1 và có đúng hai ước là 1 và
chính nó. (0Bài 6: Đoạn chương trình sau dùng để làm gì? Hãy cho biết giá trị của biến
dem trong đoạn chương trình này:
Dem:=0; n:=100;
For i:=1 to n do if i mod 3 =0 then dem:=dem+1;

Bài 7: Viết chương trình nhập 2 số nguyên m,n từ bàn phím (m<=n,
m,n<1015). Đếm xem trong đoạn [m,n] có bao nhiêu số chia hết cho cả 3 và 5,
tính tổng các số đó.
Bài 8: Nhập hai số nguyên a và b từ bàn phím (asố nguyên lẻ i thỏa mãn điều kiện a<=i<=b. Đưa ra màn hình số lượng tnhs được
và bản thân các số lẻ này.
Bài 9: Viết chương trình tính n!! (giai thừa kép) với n!! được định nghĩa
như sau:
n!! = 1 với n = 0
n!! = 1.3.5..n với n lẻ.
n!! = 2.4.6..n với n chẵn.
Yêu cầu: Sử dụng vòng lặp với số lần chưa biết trước:
Bài 10: Dãy số fibonaci được định nghĩa như sau:

Viết chương trình in ra n số fibonaci đầu tiên (n <= 1000);
Bài 11:Sử dụng vòng lặp while – do viết chương trình tính tổng
S=
n dấu căn

Điều kiện

với n là một số tự nhiên nhập từ bàn phím.
IV.Hiệu quả đạt được
Năm học 2019 – 2020, tôi được phân công giảng dạy môn Tin học các lớp
11A1, 11A5, 11A6 tại trường THPT Quan Sơn khi chưa áp dụng phương pháp
của Sáng kiến kinh nghiệm kết quả học tập ở 3 lớp 11A1, 11A5, 11A6 như sau:
Giỏi

Khá


Trung Bình

Yếu

Lớp
SL

TL(%)

SL

TL(%)

SL

TL(%)

SL

TL(%)

11A1(35HS)

0

0

21

60.0


14

40.0

0

0

11A5(43HS)

0

0

15

34.88

25

58.13

3

6.97
17


11A6(40HS)


0

0

14

35

22

55

4

10

Bảng 1. Kết quả học tập cuối năm học 2019 – 2020
Qua bảng 1 kết quả học tập cuối năm học ta nhận thấy tỉ lệ học sinh có học
lực khá ít, tỉ lệ học sinh học lực trung bình chiếm nhiều; bên cạnh đó vẫn cịn số
ít học sinh có học lực yếu.
Năm học 2020 – 2021, tơi được phân công giảng dạy môn Tin học các lớp
11A1, 11A2, 11A3 tại trường THPT Quan Sơn tôi đã tiến hành áp dụng sáng
kiến kinh nghiệm vào giảng dạy cho các lớp 11A1, 11A2, 11A3, kết quả thu
được như sau:
Giỏi

Khá

Trung Bình


Yếu

Lớp
SL

TL(%)

SL

TL(%)

SL

TL(%)

SL

TL(%)

11A1(32HS)

2

6.25

25

78.12


5

15.62

0

0%

11A2(35HS)

1

2.86

27

77.14

7

20

0

0%

11A3(36HS)

0


0

29

80.55

7

19.45

0

0%

Bảng 2. Kết quả học tập cuối năm học 2020 – 2021
Số liệu so sánh tỉ lệ phần trăm bảng 1 với bảng 2 ta dễ dàng nhận thấy kết
quả học tập giữa các năm có sự chuyển biến rõ rệt. Cụ thể tỉ lệ học sinh khá
tăng, học sinh trung bình giảm và khơng cịn học sinh yếu; đặc biệt đã có học
sinh giỏi ở các lớp 11A1 và 11A2.
Khi thực hiện thực nghiệm qua các đối tượng học sinh đã nêu trên, đa số
các em nắm vững, phân biệt và biết chọn lọc áp dụng được cấu lặp để giải các
bài tốn khi học lập trình Pascal.
Một số khơng ít học sinh có tiến bộ rõ rệt khi viết các chương trình có sử
dụng lập trình có cấu trúc lặp.
Nâng cao việc yêu thích học tin học đối với một bộ phận học sinh và một
số em có định hướng nghề nghiệp sau này.

18



PHẦN III: KẾT LUẬN, KIẾN NGHỊ
I.Kết luận
Qua việc tìm hiểu lộ trình đổi mới giáo dục của Bộ giáo dục và Đào tạo
Việt Nam và việc đổi mới phương pháp dạy học môn Tin học trường Trung học
phổ thông Quan Sơn, tôi đã đưa ra phương 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 học sinh lớp 11” khi dạy mơn Tin học nhằm
khích lệ học sinh u thích hơn mơn Tin học. Đặc biệt dạy học lập trình là một
trong những phần khó mà bản thân mình cũng như một số giáo viên khác đều
gặp phải khơng ít những khó khăn. Chính vì vậy trong sáng kiến kinh nghiệm
này, tôi muốn đưa ra phương 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 học sinh lớp 11 khi giảng dạy ở các dạng bài tập môn Tin
học. Từ đó giúp học sinh dễ dàng nắm bắt, vận dụng vào các bài tốn. Trong q
trình nghiên cứu sẽ khơng tránh được những thiếu sót rất mong sự góp ý, bổ
sung của các thầy, cô, đồng nghiệp để sáng kiến được hồn thiện hơn, giúp ích
cho cơng tác giáo dục chung được tốt hơn.

Điều kiện áp dụng sáng kiến
Sáng kiến này có thể là tài liệu hữu ích đối với giáo viên tin học khi dạy,
hoặc các em học sinh khi học về ngơn ngữ lập trình.
II.Kiến nghị
1.Kiến nghị với nhà trường
Nhà trường cần tạo điều kiện ủng hộ hơn nữa trong quá trình đổi mới
phương pháp dạy học.
Đặc biệt việc dạy học lập trình là phần khó trong mơn Tin học phổ thông,
nên nhà trường và giáo viên cần phải quan tâm đến việc bồi dưỡng chuyên môn,
khả năng tư duy thuật tốn.
Trường tổ chức đầu tư thêm kính phí mua trang thiết bị máy tính ở phịng
máy và máy chiếu ở các lớp học phục vụ cho việc giảng dạy của giáo viên, thực
hành của học sinh được tốt hơn.
2.Hướng tiếp tục nghiên cứu

Sáng kiến kinh nghiệm này tơi mới tìm hiểu, nghiên cứu, áp dụng cho cấu
trúc lặp trong tin học 11. Đối với học sinh các em đã có cảm tình, u thích mơn
Tin học, có hướng tiếp cận mới, nhận biết, hiểu, vận dụng cấu trúc lặp để giải
các bài toán thường gặp trong khi lâp trình Pascal. Đó sẽ là nền tảng tốt để các
em tiếp cận thuận lợi tới những kiến thức khó hơn trong ngơn ngữ lập trình mới.
Nội dung sáng kiến này tơi có hướng phát triển sâu hơn ở tồn bộ chương
III và chương IV trong chương trình tin học 11. Giúp các em học sinh có kiến

19


thức vững vàng hơn khi lập trình Pascal cùng với thay đổi phương pháp, hướng
tiếp cận trong giảng dạy lập trình ở những sáng kiến kinh nghiệm sau.
XÁC NHẬN CỦA THỦ
Thanh Hóa, ngày 09 tháng 05 năm 2021
TRƯỞNG ĐƠN VỊ
Tơi xin cam đoan đây là SKKN của tôi viết,
không sao chép nội dung của người khác.

Lê Văn Ba

20


TÀI LIỆU THAM KHẢO
1. Sách giáo khoa Tin học 11, NXB Giáo dục, 2007.
2. Sách giáo viên Tin học 11, NXB Giáo dục, 2007.
3. Sách giáo khoa Đại số 10, Hình học 10 NXB Giáo dục, 2010.
4. Sách giá o khoa Đại số 11, NXB Giáo dục, 2011.
5. Quách Tuấn Ngọc, Bài tập Ngơn ngữ lập trình Pascal, NXB Đại học Bách

khoa, 1993.
6. Bùi Thế Tâm, Bài tập lập trình Pascal, NXB giao thông vận tải 1999.
7. Một số sáng kiến kinh nghiệp của đồng nghiệp.

21


Mục Lục

22



×