SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THPT TRẦN PHÚ
SÁNG KIẾN KINH NGHIỆM
XÂY DỰNG HỆ THỐNG BÀI TẬP LUYỆN KỸ NĂNG
CHO HỌC SINH CHUYỂN ĐỔI GIỮA CẤU TRÚC LẶP
WHILE…DO VÀ FOR DO
Người thực hiện : Vũ Thị Huệ
Chức vụ : Giáo viên
SKKN thuộc môn : Tin học
THANH HOÁ NĂM 2013
2
I. Đặt vấn đề
1. Lý do chọn đề tài
Trong tất cả các ngôn ngữ lập trình đều có cấu trúc vòng lặp hay
còn gọi là chu trình, tuỳ theo điều kiện lặp và yêu cầu sử dụng lệnh mà sử
dụng vòng lặp khác nhau. Tuy nhiên với các em học sinh khi làm bài tập
còn gặp nhiều lúng túng cũng như các vướng mắc khi lựa chọn cấu trúc
lặp, hay chuyển đổi giữa các cấu trúc lặp để mô tả các thuật toán tương
ứng, viết các chương trình thực hiện nhiều lần một hoặc nhiều tác vụ khi
điều kiện còn thoả mãn. Chính vì lý do trên tôi đã mạnh dạn xây dựng hệ
thống bài tập để luyện kỹ năng cho học sinh chuyển đổi giữa cấu trúc lặp
For Do và While…Do.
2. Mục đích nghiên cứu
Để tạo cho học sinh thực hiện hiệu quả giải các bài toán có những
thao tác phải thực hiện lặp đi lặp lại một số lần, luyện cho các em kỹ
năng khi nào thì sử dụng cấu trúc For Do, khi nào thì sử dụng cấu trúc
While Do và cách chuyển đổi qua lại giữa hai cấu trúc trên. Từ đó các
em sẽ hình dung hết được máy tính thực hiện các chu trình lặp các em đã
lựa chọn để giải các bài toán như thế nào?
3. Phương pháp nghiên cứu
- Để xây dụng đề tài này đạt kết quả cao tôi đã sử dụng các phương
pháp nghiên cứu sau:
+ Phương pháp điều tra: Tôi yêu cầu các em học sinh mô tả chu
trình lặp khi làm các bài tập trong sách giáo khoa, sách bài tập và trình
bày cấu trúc lặp các em lựa chọn.
+ Phương pháp phân tích tổng hợp: Với phương pháp này tôi yêu
cầu học sinh chỉ rõ các ưu điểm, nhược điểm cũng như sự giống nhau và
khác nhau khi sử dụng cấu trúc For…Do hay While…Do khi giải bài
toán.
+ Phương pháp nghiên cứu: Tôi đã nghiên cứu các vấn đề mang
tính lý luận có liên quan đến đề tài.
- Đối tượng nghiên cứu : Học sinh khối 11 của trường THPT Trần
Phú – Nga Sơn – Thanh Hoá và các điều kiện có liên quan.
- Kế hoạch nghiên cứu: Bắt đầu từ tháng 9 năm 2012 đến tháng 5 năm
2013
II. Giải quyết vấn đề
1. Cơ sở lý luận
Căn cứ nhiệm vụ của khoa học và đúc rút sáng kiến kinh nghiệm
của nghành GD & ĐT Thanh Hoá, căn cứ phương hướng, nhiệm vụ trọng
tâm của nghành GD& ĐT Thanh Hoá năm học 2012- 2013 với chủ đề
đổi mới phương pháp dạy học, phát huy tính sáng tạo trong dạy học, xây
dựng trường học thân thiện , học sinh tích cực Bên cạnh đó bám sát nội
dung chương trình dạy học, cụ thể là ở Tiết phân phối chương trình thứ 17
Tin Học 11 phần “ Câu hỏi và bài tập”. Tôi đã xây dựng hệ thống bài tập
3
luyện kỹ năng cho học sinh biết lựa chọn cấu trúc lặp phù hợp với từng
tình huống cụ thể, viết được câu lệnh lặp mô tả thuật toán tương ứng và có
thể dùng câu lệnh While Do để thay thế cho câu lệnh For…Do và ngược
lại. Với đề tài này tôi hy vọng sẽ giúp cho bản thân thêm vững vàng, hiểu
sâu về ngôn ngữ lập trình Pascal hơn.
2. Thực trạng
- Thực trạng chung: Mặc dù trong những năm gần đây Tin học được đưa
vào giảng dạy ở các trường tiểu học, trung học cơ sở và hầu hết các em
học sinh ở các lớp tôi giảng dạy đều đã được học Tin học ở các cấp dưới
thế nhưng để hiểu về lập trình và áp dụng ngôn ngữ lập trình Pascal để
mô tả thuật toán giải các bài toán đơn giản trên máy tính bây giờ các em
mới thực sự được hiểu, được học kỹ, bài bản đầy đủ hệ thống của một
ngôn ngữ lập trình.
- Thực trạng đối với học sinh: Đa số các em học sinh ở các lớp tôi dạy đều
ở vùng nông thôn, bãi ngang nên điều kiện gia đình chưa có máy vi tính
cho các em thực hành thêm ở nhà, các em tiếp xúc với máy vi tính còn ít.
- Với giáo viên: Một điều thực tế là chất lượng tuyển sinh đầu vào ở các
em học sinh trường tôi đang trực tiếp giảng dạy còn thấp, thua so với các
trường bạn lân cận vì vậy nên việc mô tả thuật toán cho các em hiểu được
các chu trình lặp tôi cần mất nhiều thời gian hơn và việc trình bày đòi hỏi
phải kỹ lưỡng, tỉ mỉ hơn.
- Các em có đầy đủ sách vở cũng như các dụng cụ học tập và một điều
thúc đẩy tôi có thêm nhiều tâm huyết xây dựng đề tài này là ý thức học
tập, xây dựng bài của các em luôn hăng say và sôi nổi.
3. Các biện pháp tiến hành.
Khi tôi hướng dẫn cho học sinh làm bài tập về cấu trúc lặp, câu hỏi
thường đặt ra ở các em là:
- Lựa chọn cấu trúc lặp nào cho phù hợp với bài toán?
- Sử dụng cấu trúc For Do hay While Do sẽ có ưu điểm và
nhược điểm nào?
- Có thể sử dụng cả hai cấu trúc trên khi giải một bài toán được
không?
Những vướng mắc trên của các em tôi đã trăn trở để xây dựng hoàn
thành đề tài này và tôi đã tiến hành theo các bước như sau:
3.1. So sánh đặc điểm của từng cấu trúc vòng lặp.
4
- Cấu trúc For…DO
+ Biết trước số lần lặp , số lần lặp được xác định bằng <giá trị cuối> - < giá trị
đầu> + 1. Từ khóa To được dùng khi < giá trị cuối > lớn hơn <giá trị đầu>,
ngược lại thì dùng Downto.
+ Biến điều khiển phải là kiều số nguyên, những kiểu đếm được, rời rạc, hữu
hạn. Không được là kiểu số thực.
+ Biến điều khiển sau mỗi vòng lặp sẽ tự động tăng hoặc giảm 1 đơn vị, vì vậy
trong vòng lặp không được làm thay đổi giá trị của biến điều khiển
+ Toàn bộ cấu trúc For … Do là một câu lệnh đơn, nếu có nhiều lệnh trong vòng
lặp thì phải đặt chúng trong Begin… End.
- Cấu trúc While…Do
+ Không biết trước số lần lặp, kiểm tra điều kiện trước, thực hiện công việc sau,
vì vậy nếu ngay từ đầu < Điều kiện > không thoả mãn thì đã thoát khỏi vòng
lặp.
+ Điều kiện là một biến hoặc biểu thức thuộc kiểu Boolean.
+ Nên sử dụng cấu trúc While Do trong trường hợp
- Muốn một hay nhiều câu lệnh được lặp lại chừng nào mà một
< Điều kiện> nào đó còn thoả.
- Muốn một khả năng để < Điều kiện> lặp không thoả và câu
lệnh sau Do sẽ không thực hiện.
+ Toàn bộ cấu trúc While …Do là một câu lệnh đơn, nếu cần nhiều lệnh thì phải
đặt trong cặp Begin….End.
Trên cơ sở các em nắm được đặc điểm của từng cấu trúc lặp, tôi đưa ra hệ
thống bài tập sau.
3.2 Hệ thống bài tập luyện kỹ năng chuyển đổi câu lệnh While Do
thay cho câu lệnh For…Do cà ngược lại.
Bài toán 1: Có thể dùng câu lệnh While…Do thay cho câu lệnh For…Do được
không? Nếu được hãy thực hiện điều đó với chương trình Tong-1a tính và đưa ra
màn hình tổng s =
100
1
2
1
1
11
+
++
+
+
+
+
aaaa
.
( Bài tập 3 trang 51 sgk Tin Học 11)
Đáp án: Khi một bài toán được giải bằng cấu trúc lặp For…Do thì sẽ luôn giải
được bằng cấu trúc lặp While….Do. Tuy nhiên trong một số trường hợp lại
không thể dùng For…Do để thay cho cấu trúc While…Do.
Với bài toán Tong- 1a, phải thực hiện qua 100 bước lặp, mỗi bước lặp
tổng s được cộng thêm một giá trị xác định bởi công thức
na
+
1
. Đây là vòng lặp
xác định số lần lặp trước, ta sử dụng vòng For …Do
Tổng s được tính, dừng lại khi N >100. Do vậy ta có thể sử dụng cấu trúc
lặp While…Do thay cho For…Do, điều kiện biểu thức ở đây N>100 Thì thoát
khỏi vòng lặp.
- Chương trình Tong-1a dùng vòng lặp For…Do
Program Tong1a;
Uses crt;
Var
S:Real;
a,n:integer;
Begin
Clrscr;
Writeln(‘ chuong trinh su dung cau truc lap For Do’);
Writeln(‘ ‘);
Writeln(‘ Hay nhap gia tri cua a =’); readln(a);
S:= 1.0/a;
For n:=1 to 100 do
S:= s+ 1.0/(a+n);
Writeln(‘ Tong -1a can tinh s= ‘, s:5:2);
Writeln;
Readln
End.
- Chương trình Tong-1a dùng vòng lặp While…Do
Program Tong1a;
Uses crt;
Var
S:Real;
a,n:integer;
Begin
Clrscr;
Writeln(‘ chuong trinh su dung cau truc lap While Do’);
Writeln(‘ ‘);
Writeln(‘ Hay nhap gia tri cua a =’); readln(a);
S:= 1.0/a;
While (n> 0) and (n <= 100) do
Begin
N:=N+1
S:= s+ 1.0/(a+n);
End;
Writeln(‘ Tong -1a can tinh s= ‘, s:5:2);
Writeln;
Readln
6
End.
Bài toán 2: Viết chương trình tính tổng bình phương của N số nguyên đầu tiên
Để tính tổng của N số nguyên đầu tiên chưa biết trước số lần lặp cụ thể,
số lần lặp phụ thuộc vào giá trị N nhập từ bàn phím.
+ Sử dụng vòng lặp For Do , biến điều khiển i tự động tăng và đi từ 1
đến N, mỗi lần lặp tổng bình phương được cộng thêm một giá trị bằng (i*i)
+ Sử dụng vòng lặp While…Do khi biến điều khiển thoả mãn i<N
-Chương trình thực hiện
Program tongbinhphuong;
Uses crt;
Var
I,n: integer;
S:Real;
Begin
Clrscr;
Writeln(‘ chuong trinh su dung cau truc lap For Do’);
Writeln( ‘ Nhap n = ‘); readln(N);
For i :=1 to N do
S:= s+ (i*i);
Writeln( ‘ tong binh phuong cua ‘,n,’ so nguyen dau tien = ‘, s );
Writeln;
Write(‘ Bam phim <Enter > de ket thuc’)
Writeln;
Readln;
End.
Program tongbinhphuong;
Uses crt;
Var
I,n: integer;
S:Real;
Begin
Clrscr;
Writeln(‘ chuong trinh su dung cau truc lap While Do ’);
Writeln( ‘ Nhap n = ‘); readln(N);
S:= 0;
I:=0;
While ( i <n ) do
Begin
S:= s+ (i*i);
I:=i+1;
End;
Writeln( ‘ tong binh phuong cua ‘,n,’ so nguyen dau tien = ‘, s );
Writeln;
Write(‘ Bam phim <Enter > de ket thuc’)
7
Writeln; Readln
End.
Bài toán 3: Tính tổng của 5 số nhập vào từ bàn phím
+Tính tổng 5 số được nhập từ bàn phím biết số lần lặp xác định là 5 lần,
sử dụng cấu trúc lặp For Do, biến điều khiển tự động tăng từ 1 đến 5
+ Vòng lặp While Do được thực hiện khi điều kiện được thoả mãn, các
số nhập vào có giá trị khác không và số lần nhập i<=5
+ Chương trình thực hiện
Program tong5so;
Uses crt;
Var
I:integer:
So,tong:real;
Begin
Clrscr;
Write (‘ chuong trinh tinh tong 5 so nhap tu ban phim ‘);
Writeln(‘ chuong trinh su dung cau truc lap For Do ’);
Writeln (‘ ‘);
For i:=1 to 5 do
Begin
Write (‘ Nhap so thu ‘,i:2,’ =) ; Readln(so);
End;
For i:=1 to 5 do
Tong:= tong+ so;
Write (‘ Tong cua 5 so = ‘,tong :3:2);
Writeln;
Readln
End.
Program tong5so;
Uses crt;
Var
I:integer:
So,tong:real;
Begin
Clrscr;
Write (‘ chuong trinh tinh tong 5 so nhap tu ban phim ‘);
Writeln(‘ chuong trinh su dung cau truc lap While Do ’);
Writeln (‘ ‘);
Tong:=0;
I:=1;
Writeln (‘ Nhap so thu ‘,i:2,’ =) ; Readln(so);
While (so <> 0 ) and (i<5) do
8
Begin
I:=i+1;
Write( ‘ nhap so : ‘,i,’ = ‘);
End;
For i:= 1 to 5 do
Tong:= tong+ so;
Write (‘ Tong cua 5 so = ‘,tong :8:2);
Writeln;
Readln
End.
Bài toán 4: Lập trình tính y=
∑
=
+
50
1
1
n
n
n
Tổng y được tính khi thực hiện 50 lần lặp xác định, mỗi lần lặp tổng y
được cộng thêm một giá trị xác đinh bởi công thức
1
+
n
n
+ Sử dụng cấu trúc lặp For…Do, biến điều khiển tự động tăng từ 1 đến 50
+ Sử dụng cấu trúc While Do khi thoả mãn điều kiện N<=50, Nếu N>50
thì thoát khỏi vòng lặp.
+Chương trình thực hiện
Program tinhtong;
Uses crt;
Var
Y:real;
N,i :integer;
Begin
Clrscr;
Writeln( Su dung vong lap For…Do’);
Y:=0;
For N :=1 to 50 do
Y:=y+ N/N+1:
Writeln(‘ Tong can tinh =’, y:5:2);
Writeln;
Readln
End.
Program tinhtong;
Uses crt;
Var
Y:real;
N,i :integer;
Begin
Clrscr;
Writeln( Su dung vong lap While…Do’);
Y:=0; n:=0;
While N <= 50 do
9
Begin
N:=N+1;
Y:=y+ N/N+1:
End;
Writeln(‘ Tong can tinh =”, y:5:2);
Writeln;
Readln
End.
Bài toán 5:Lập trình tính e(n) = 1+
!
1
!3
1
!2
1
!1
1
n
++++
cho đến khi
6
10.2
!
1
−
<
n
Đây là bài toán chưa xác định trước số lần lặp và có điều kiện ràng buộc,
ta sử dụng cầu trúc lặp While Do, tổng e(n) được tính khi thoả mãn điều kiện
6
10.2
!
1
−
>
n
, mỗi lần lặp e(n) được cộng thêm một giá trị bằng
!
1
n
Tuy nhiên tổng e(n) có thể sử dụng vòng lặp For Do khi không có điều
kiện ràng buộc
6
10.2
!
1
−
<
n
và giá trị N được nhập vào từ bàn phím để xác định số
lần lặp.
- Chương trình thực hiện:
Program tong;
Uses crt;
Var
E(n):real;
N,gt:integer;
Begin
Clrscr;
Writeln( ‘ su dung vong lap While…Do ‘);
E(n) :=1;
N:=0;
Gt:=1;
While not(1/gt < 2.10
-6
do
Begin
N:=N+1;
Gt:=gt*N;
E(n) :=E(n) +1/gt;
End;
Writeln( ‘ tong can tinh E(n) = ‘, E(n) :3:2’);
Writeln;
Readln;
End.
Program tong;
Uses crt;
Var
10
E(n):real;
gt:integer;
I,N:byte;
Begin
Clrscr;
Writeln( ‘ su dung vong lap For…Do ‘);
Writeln( ‘ Nhap N = ); Readln(N);
E(n) :=1;
Gt:=1;
For i:= 1 to N do
Begin
Gt:=gt*i;
E(n) :=E(n) +1/gt;
End;
Writeln( ‘ tong can tinh E(n) = ‘, E(n) :3:2’);
Writeln;
Readln
End.
Bài toán 6: Viết chương trình tìm ước số chung lớn nhất của 2 số
Để tìm ước chung của 2 số bất kỳ nhập vào từ bàn phím, ta thực hiện so
sánh 2 số
+ Khi so1 >so2 thì so1=so1-so2
+ Khi so2 >so1 thì so2=so2-so1
+Thực hiện tiếp tục như vậy cho tới khi nào so1=so2 thì dừng , đó chính
là ước số chung lớn nhất của 2 số.
Như vậy, việc thực hiện chưa xác định trước được số lần lặp, với bài toán
này ta không dùng cấu trúc lặp For Do mà chỉ dùng được cấu trúc While Do
khi 2 số khác nhau. Vòng lặp sẽ kết thúc khi 2 số bằng nhau để đưa ra ước
chung lớn nhất của 2 số.
- Chương trình thực hiện:
Program ucln;
Uses crt;
Var
So1,so2,x,y:integer;
Begin
Clrscr;
Writeln( ‘ tim uoc chung lon nhat cua 2 so’);
Writeln(‘ ‘):
Write( ‘nhap so thu nhat:’); Readln(so1);
Write(’ nhap so thu hai:’) ; Readln(so2);
X:=so1;
Y:=so2;
11
While( so1<>so2) Do
If so1>so2 then
So1:=so1-so2
Else
So2:=so2-so1;
Writeln;
Writeln (‘ Uoc so chung cua 2 so ‘,x,’ va ‘,y,’ la : ‘, so1);
Writeln;
Readln.
End.
Trên đây là các bài tập tôi đã đưa ra để luyện tập cho các em phần bài tập
cấu trúc lặp, trong các bài toán 1,2,3,4 tôi phân tích để các em thấy được có thể
sử dụng được cả hai cấu trúc lặp For Do và While Do
Với bài toán 5 sử dụng cấu trúc While Do khi có điều kiện ràng buộc, ta
thực hiện được cấu trúc For Do khi bỏ điều kiện và thực hiện khi giá trị N nhập
từ bàn phím cũng là để xác định số lần lặp.
Bài toán 6 là bài tập mà ta chỉ có thể sử dụng cấu trúc lặp While Do để
thực hiện và không thể dùng cấu trúc lăp For Do.
Ngoài các bài tập trên tôi hướng dẫn và gợi ý cho các em làm thêm các
bài tập trong sách giáo khoa và sách bài tập Tin Học 11 phần cấu trúc lặp.
4. Kiểm nghiệm
Qua việc vận dụng các phương pháp nghiên cứu trên vào công tác giảng
dạy tôi thấy có nhiều kết quả khả quan thông qua các lần kiểm tra và các giờ
thực hành, các em đã biết lựa chọn cấu trúc lặp phù hợp cho mỗi bài toán cụ thể
và có thể chuyển đổi giữa cấu trúc lặp While Do và For Do.Điều đó khiến cho
các em thêm yêu thích môn học hơn, tinh thần học tập luôn tự tin phấn khởi.
Các em đã có thêm nhiều kiến thức bổ ích về ngôn ngữ lập trình Pascal nói riêng
và các ngôn ngữ lập trình nói chung.
12
III. Kết luận và đề xuất.
Để hoạt động dạy cũng như hoạt động học luôn đạt kết quả cao đòi hỏi
người thầy luôn tìm tòi khám phá đổi mới phương pháp của mình, hướng học
sinh tới những phương pháp tích cực nhất để các em giải quyết được những vấn
đề mà chính người thầy đặt ra. Người thầy giúp các em học sinh chỉ ra các sai
lầm các em mắc phải do không hiểu rõ vấn đề, tư duy chưa mạch lạc. Tôi đã xây
dựng hệ thống bài tập luyện kỹ năng cho học sinh chuyển đổi giữa cấu trúc lặp
While Do và For Do xuất phát từ việc giảng dạy trên thực tế. Tuy nhiên vẫn
còn nhiều hạn chế. Tôi mong nhận được sự đóng góp của các quý đồng nghiệp
để đề tài được hoàn thiện hơn.
Qua đây tôi cũng xin có một đề xuất nho nho là giảm tải bớt chương trình
và tăng thêm các giờ bài tập, thực hành. Tôi xin chân thành cảm ơn!
Xác nhận của hiệu trưởng Thanh hoá, ngày 28 tháng 5 năm 2013
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 thực hiện
13
Mục lục
Trang
I. Đặt vấn đề……………………………………………. 1
1. Lí do chọn đề tài………………………………… 1
2. Mục đích nghiên cứu…………………………… 1
3. Phương pháp nghiên cứu…………………………. 1
I. Giải quyết vấn đề…………………………………… 1
1.Cơ sở lý luận……………………………………… 1
2.Thực trạng………………………………………… 2
3.Các biện pháp tiến hành……………………………. 2
3.1. So sánh đặc điểm của từng cấu trúc lặp………. 2
3.2 Xây dựng hệ thống bài tập luyện kỹ năng …….
chuyển đổi câu lệnh While Do và For Do
3
4. Kiểm nghiệm………………………………………. 10
III. Kết luận và đề xuất…………………………………… 11
14