SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA
TRƯỜNG THPT BA ĐÌNH NGA SƠN
-------------- --------------
SÁNG KIẾN KINH NGHIỆM
XÂY DỰNG HỆ THỐNG BÀI TẬP KHI DẠY CÂU
LỆNH RẼ NHÁNH VÀ CẤU TRÚC LẶP
Người thực hiện: Trần Ngọc Chiến
Chức vụ: Giáo viên
SKKN thuộc lĩnh vực (môn): Tin
THANH HOÁ NĂM 2015
1
PHẦN A – ĐẶT VẤN ĐỀ
Có thể nói dạy học là hoạt động đặc trưng chỉ có ở con người. Trải qua
hàng nghìn năm, hoạt động dạy học không ngừng được cải tiến. Khó có thể nói
đâu là điểm dừng hay đâu là đỉnh của việc cải tiến dạy học. Thế nhưng, thực tế
cuộc sống cho thấy đến thời điểm hiện nay dạy học đã đạt được những thành tựu
rất đáng nể. Đó chính là những thành tựu làm phát huy tối đa vai trò của người
học, làm tối ưu hóa hoạt động của người dạy hướng về người học, là tổ chức
hoạt động dạy học theo định hướng hiệu quả nhất trong những điều kiện tối ưu
nhất. Lẽ đương nhiên, để có thể thực hiện những yêu cầu ấy, đạt được những
thành tựu lý tưởng ấy đòi hỏi việc dạy học phải dựa trên những cơ sở khoa học
nhất định mà các loại bài tập cho học sinh là điều không thể thiếu.
Hoạt động dạy học là một dạng hoạt động đặc trưng của loài người nhằm
truyền thụ lại những kinh nghiệm, những vốn kiến thức của xã hội loài người đã
tích luỹ được từ thế hệ này cho thế hệ khác, biến chúng thành vốn liếng, kinh
nghiệm, phẩm chất và năng lực tư duy sáng tạo của người học. Hoạt động dạy
học gồm hai hoạt động: hoạt động dạy của giáo viên và hoạt động học của học
sinh. Hai hoạt động này liên quan mật thiết với nhau, tác động qua lại lẫn nhau
và có chung một mục đích cuối cùng là giúp cho người học lĩnh hội được nội
dung học đồng thời phát triển được phẩm chất, nhân cách và năng lực tư duy
sáng tạo của người học.
Nói như vậy trong dạy học nói chung và dạy học môn Tin nói riêng không
phải chỉ cần người học phát huy tính tích cực, tự giác chủ động sáng tạo của họ
trong hoạt động học là đã đạt được mục tiêu của hoạt động dạy học mà người
dạy cũng cần phải biết phân tích nội dung của hoạt động dạy thành những hoạt
động thành phần rồi căn cứ vào mục tiêu của tiết học, trình độ của học sinh,
trang thiết bị hiện có của nhà trường mà lựa chọn phương pháp giảng dạy, thời
điểm đưa ra nội dung kiến thức của tiết học một cách phù hợp nhằm thực hiện
những hoạt động tiềm tàng trong nội dung cần dạy để đạt được mục tiêu đặt ra
một cách cao nhất, hiệu quả nhất.
Ngày nay sự hiểu biết về tin học điều là không thể thiếu. Bởi nó đã xâm
nhập vào rất nhiều ngành khoa học khác nhau với vai trò là một công cụ hữu ích
để học tập, ứng dụng, nghiên cứu và phát minh.
PHẦN B - GIẢI QUYẾT VẤN ĐỀ
I – CƠ SỞ LÍ LUẬN CỦA VẤN ĐỀ .
Việc lựa chọn và nghiên cứu đề tài này tôi dựa vào hai nguyên tắc cơ bản
trong dạy học đó là: nguyên tắc đảm bảo sự thống nhất giữa tính vừa sức chung
và vừa sức riêng và nguyên tắc đảm bảo sự thống nhất giữa tính tập thể và cá
nhân .
Phương pháp dạy học Tin học có liên quan mật thiết đến nhiều bộ môn
khoa học như: Triết học duy vật biện chứng, Toán học, Giáo dục học, Tâm lý
học, Lôgic học và những khoa học khác.
2
Cơ sở Toán học: Đó là tính chính xác, chặt chẽ và logic, tuần tự và khoa
học trong dạy học.
Cơ sở Giáo dục học: Căn cứ vào nguyên tắc đảm bảo sự thống nhất giữa
tính vừa sức chung và vừa sức riêng trong dạy học, giữa tính tập thể và cá nhân
trong dạy học.
Cơ sở Triết học: Mâu thuẫn là động lực thúc đẩy quá trình phát triển. Một
vấn đề được gợi ra cho học sinh học tập chính là một mâu thuẫn giữa yêu cầu
nhiệm vụ nhận thức với tri thức và kinh nghiệm sẵn có.
Cơ sở Tâm lý học: Sự nảy sinh, hình thành tâm lý về phương diện cá thể là
quá trình chuyển đổi liên tục từ cấp độ này sang cấp độ khác đạt tới một chất
lượng mới và diễn ra một quy luật đặc thù.
Quy luật của quá trình nhận thức là từ trực quan sinh động đến tư duy trừu
tượng, từ tư duy trừu tượng về thực tiễn. Trong quá trình nhận thức có đạt được
hiệu quả hay không, có bền vững hay không còn phụ thuộc vào quá trình tích
cực của hoạt động, sáng tạo của chủ thể.
Trong các môn học nói chung và môn Tin học nói riêng, sự thống nhất giữa
điều khiển của thầy và hoạt động học của trò có thực hiện bằng cách quán triệt,
kích thích quan điểm hoạt động thực hiện dạy học trong hoạt động và bằng hoạt
động.
Dạy học theo phương pháp phải làm cho học sinh chủ động tư duy nhiều
hơn, làm nhiều hơn, tham gia hoạt động nhiều hơn trong quá trình chiếm lĩnh tri
thức, còn thầy đóng vai trò là người hướng dẫn.
Dạy học là dạy cho học sinh phương pháp tư duy sáng tạo, dạy tin học là
phải dạy suy nghĩ, dạy cho học sinh thành thạo các phương pháp tư duy, từ phân
tích tổng hợp trừu tượng hóa, khái quát hóa… phải dạy cho học sinh có sự tìm
tòi tự mình phát hiện và phát biểu vấn đề, dự đoán kết quả, tìm được hướng giải
của bài toán khi làm bài tập tin học nói chung và bài tập Pascal, hướng viết giải
thuật về một bài toán. Hình thành và phát triển tư duy tích cực, độc lập sáng tạo,
có óc hoài nghi khoa học trong dạy học tin học cho học sinh là quá trình lâu dài,
thông qua bài học và từng tiết học.
II – THỰC TRẠNG CỦA VẤN ĐỀ CẦN NGHIÊN CỨU:
2.1. Thực trạng chung:
Đối với bộ môn Tin học ở trường THPT nhất là ngôn ngữ lập trình Pascal.
Đây là một nội dung khó đối với cả người dạy và người học. Một trong những
nội dung khó đó là các bài tập với Câu lệnh rẽ nhánh và cấu trúc lặp ở
chương trình Tin học 11.
Mặt khác, như chúng ta đã biết xây dựng được hệ thống bài tập là một căn
cứ cho việc điều khiển quá trình dạy học. Vì vậy giáo viên phải xác định được
những mức độ yêu cầu thể hiện những hành động mà học sinh phải đạt được
hoặc có thể đạt được để xây dựng hệ thống bài tập, hệ thống ví dụ hợp với bài
dạy.
3
2.2 . Đối với giáo viên.
Bản thân là một giáo viên đang trực tiếp giảng dạy Tin học, tôi mạnh dạn
chọn đề tài: “Xây dựng hệ thống bài tập khi dạy câu lệnh rẽ nhánh và cấu
trúc lặp”. Với đề tài này tôi hy vọng sẽ giúp cho bản thân vững vàng hơn, hiểu
thêm về ngôn ngữ lập trình Pascal, để dạy học sinh của mình tiếp cận với ngôn
ngữ lập trình Pascal, làm cho các em hiểu và thấy được ứng dụng rộng rãi của
ngôn ngữ lập trình Pascal trong khoa học và trong đời sống.
2.3. Đối với học sinh
Học sinh THPT còn coi tin học là môn học phụ, hầu hết các em chỉ tập
trung vào học các môn thi vào các trường đại học và trung học chuyên nghiệp.
Trường THPT Ba Đình là một trường chất lượng cao của huyện, do vậy các em
cần phải được học và được rèn luyện, trang bị nhiều hơn trên mọi phương diện.
Không những kỹ lưỡng về cơ bản mà còn phải nâng cao hơn yêu cầu SGK.
Chính vì thế môn Tin học còn là hành trang để các em mang theo vào các trường
đại học.
III- GIẢI PHÁP VÀ TỔ CHỨC THỰC HIỆN:
3.1 – Phân tích những căn cứ xây dựng các bài tập.
3.1.1- Sự phức tạp của đối tượng hoạt động.
Đối tượng hoạt động càng phức tạp thì hoạt động càng khó thực hiện. Vì
vậy có thể dựa vào sự phức tạp của đối tượng để xây dựng các bài tập.
Ví dụ 1: Khi cho học sinh luyện tập về câu lệnh rẽ nhánh có thể đưa ra các
bài tập dựa vào sự phức tạp của biến số.
Chẳng hạn: Viết chương trình cho máy nhận vào 3 số thực bất kỳ. Xét xem
3 số đó có làm thành 3 cạnh của một tam giác không?
Ở ví dụ này học sinh có thể dễ dàng đưa ra thuật toán để viết được chương
trình. Hay nói cách khác học sinh có thể dễ dàng xét tổng 2 cạnh của một tam
giác bao giờ cũng lớn hơn cạnh còn lại.
Thuật giải:
Bước 1: Nhập vào 3 số a, b, c thực bất kỳ ứng với chiều dài của 3 cạnh của
một tam giác;
Bước 2: – Nếu (a < b + c) và (b < a + c) và (c < a + b) thì tiếp đến bước 3;
– Nếu không thỏa mãn thì chuyển đến bước 4;
Bước 3: Thông báo 3 số vừa nhập là ba cạnh của một tam giác;
Bước 4: Thông báo 3 số vừa nhập không phải là ba cạnh của một tam giác;
Bước 5 : Kết thúc.
Dựa vào thuật toán trên học sinh dễ dàng viết được chương trình.
Write (‘Hay nhap 3 so thuc tuy y’); readln(a,b,c);
4
If (a < b + c) and (b < a + c) and (c < a + b) then
Write(‘Ba so vua nhap la ba canh cua mot tam giac’)
Else
Write (‘Ba so vua nhap khong phai la ba canh cua mot tam giac ’);
Nhưng nếu như thêm yêu cầu nữa vào bài trên như: Nếu là tam giác thì
tam giác đó là tam giác nhọn, tam giác vuông hay tam giác tù thì độ phức tạp lại
càng tăng thêm rất nhiều. Các em không những phải so sánh tổng 2 hai cạnh với
một cạnh mà các em không những lại phải so sánh một lần nữa mà còn phải sử
dụng vòng lặp lồng nhau mới giải quyết được, do vậy giáo viên cần hướng dẫn
cho các em thuật toán để giải quyết vấn đề này .
Thuật toán :
Bước 1: Nhập 3 số a, b, c tương ứng với ba cạnh của tam giác;
Bước 2: Nếu (a < b + c) và (b < a + c) và (c < a + b) thì tiếp đến bước 3;
Nếu không thỏa mãn điều kiện trên thì chuyển đến bước 10;
Bước 3: Thông báo có là tam giác ;
Bước 4: Đưa số lớn về c;
Bước 5: a := a*a; b := b*b; c := c*c
Bước 6: Nếu c < a + b thì chuyển đến bước 8;
Nếu c = a + b thì chuyển sang bước 9;
Nếu không thì chuyển đến bước 7;
Bước 7: Thông báo là tam giác tù ; chuyển đến bước 11;
Bước 8: Thông báo là tam giác nhọn ; chuyển đến bước 11;
Bước 9: Thông báo là tam giác vuông ; chuyển đến bước 11;
Bước 10: Thông báo không là tam giác ;
Bước 11: Kết thúc.
Giáo viên cần gợi ý cho các em khi đưa số lớn về c các em nên dùng một
biến gọi là biến trung gian (tg).
Begin
Write (‘Hay nhap 3 so thuc tuy y’); Readln(a,b,c);
If (a < b + c) and (b < a + c) and (c < a + b) then
Begin
Write( ‘Ba so vua nhap la ba canh cua mot tam giac’);
{Dua so lon nhat ve c}
If a > c then Begin tg := a; a := c; c := tg;
End;
If b > c then Begin tg := b; b := c; c := tg;
End;
{Moi so la binh phuong cua no}
a:= a*a; b:= b*b; c := c*c;
5
If c < a + b then Writeln (‘Day la tam giac nhon’)
Else If c = a + b then Writeln (‘Day la tam giac vuông ’)
Else Writeln (‘Day la tam giac tu ’)
End
Else
Writeln(‘Ba so vua nhap không phai la ba canh cua mot tam giac’);
Readln; End.
Tóm lại: Đối tượng hoạt động càng phức tạp thì hoạt động càng khó thực
hiện khi gặp những bài toán dạng này, người giáo viên phải từ từ hướng dẫn học
sinh đưa về dạng đơn giản nhất như khi có ít đối tượng tham gia hoạt động, từ
đó học sinh dễ dàng lần lượt giải quyết được yêu cầu của bài tập.
3.1.2- Sự trừu tượng, khái quát của đối tượng hoạt động.
Như chúng ta đã biết, tính chất của giải thuật là không giải một bài toán
riêng lẻ nào cả mà giải cho một lớp bài toán có cùng cấu trúc nhưng khác nhau
về mặt dữ liệu vào. Vì vậy, đối tượng hoạt động càng trừu tượng, khái quát có
nghĩa là yêu cầu hoạt động càng cao. Do đó có thể coi mức độ trừu tượng, khái
quát của đối tượng là căn cứ để xây dựng bài tập.
Ví dụ2: Viết chương trình nhập vào một dãy số nguyên sau đó tính tổng
các số âm và tính trung bình cộng của các số dương.
a) Dãy đó có 10 phần tử.
b) Số phần tử của dãy được nhận vào từ bàn phím trước khi vào từng phần
tử của dãy.
c) Số phần tử của dãy không được biết chính xác trước khi vào từng phần
tử của dãy mà chỉ biết trong khoảng đó. Nó hoàn toàn xác định khi người ta vào
dấu hiệu kết thúc dãy đó là nhận được số 0.
Trường hợp a) số phần tử của dãy là một hằng số, các em chỉ cần bố trí
vòng lặp For... là có thể thực hiện được, đoạn chương trình như sau:
for i := 1 to 10 do
Begin
Write(‘Nhap so thu: ’,i,‘=’);
Readln(a);
If a < 0 then ta := ta + a
Else Begin td := td + a; sd := sd + 1; End;
End;
Writeln(‘Tong cac so am la: ’, ta);
Writeln(‘Trung binh cong cua cac so duong la: ’, (td/sd):8:2);
Trường hợp b) hoạt động này được khái quát, giáo viên có thể gợi ý để học
sinh có thể phát hiện ra và biết viết chương trình trong đó, ta cần một biến để
nhận vào số phần tử của dãy trước khi thực hiện vòng lặp, biến đếm này phải
chạy từ 1 đến n.
Đoạn chương trình như sau:
Write(‘Cho biet so phan tu cua day’);
Readln(i);
6
For i :=1 to i do
Begin
Writeln(‘Nhap so thu: ’,i, ‘=’);
Readln(a);
If a < 0 then ta := ta + a Else
Begin td := td + a; sd := sd + 1;
End;
Writeln(‘Tong cac so am la: ’, ta);
Writeln(‘Trung binh cong cua cac so duong la: ’, (td/sd):8:2);
End;
Trường hợp c) hoạt động lại được khái quát một mức nữa bằng các thay
một biến cụ thể bằng một điều kiện kết thúc của dãy số. Trong trường hợp này
giáo viên có thể gợi ý cho các em để các em có thể tự đặt ra xem với yêu cầu
này có gì khác với hai yêu cầu trước như: Dãy số có bao nhiêu phần tử? Đến lúc
không muốn nhập nữa thì ta phải làm thế nào? Có thể dùng điều kiện gì để kết
thúc dãy đó? Nên dùng vòng lặp như thế nào để nhập các số nguyên đó? Học
sinh phải tìm cách trả lời được các câu hỏi đó. Giáo viên có thể gợi ý: Dùng một
biến để xác định chỉ số phần tử của dãy và dùng vòng lặp với điều kiện sau để
nhận vào phần tử của dãy số và điều kiện để kết thúc là nhận vào một số 0.
Repeat i := 1;
Write('Nhap so thu: ', i, '=');
Readln(a);
If a < 0 then ta := ta + a
Else Begin td := td + a; sd := sd +1;
End;
Until a = 0;
Writeln('Tong cac so am la: ',ta);
Writeln('Trung binh cong cua cac so duong la: ',(td/sd):8:2);
Như vậy: Hoạt động nhập vào một dãy số nguyên có thể được tiến hành
ở ba bình diện khác nhau, trong đó tính trừu tượng và khái quát của đối tượng
hoạt động ngày càng gia tăng tùy thuộc vào đối tượng học sinh.
Ví dụ 3: Tính giá trị của biểu thức P như sau:
a) P= 5 + 4 + 3 + 2 + 1
b) P= 5 + 15 + ... + 5n
c) P= m 5 + m 15+ ... + m 5n
Với m là một số nguyên lớn hơn 1
Trường hợp a) học sinh dễ dàng sử dụng vòng lặp For... để tính giá trị của
P như sau:
P := 0;
For k := 1 to 5 do P := Sqrt(k + P);
Write('Gia tri cua bieu thuc P la: ',P:8:2);
Trường hợp b) sự khái quát hoá đã cao hơn học sinh phải biết tổ chức
lặp như phần a) thì không giải quyết được yêu cầu bài. Vì vậy nhiệm vụ của
người giáo viên phải hướng dẫn học sinh vòng lặp For... đi theo chiều Downto
7
từ n đến 1 để tính dần giá trị của P từ trong ra ngoài, còn nếu đi theo chiều to sẽ
không giải quyết được bài toán.
Repeat
Write('Nhap gia tri cua n:');
Readln(n);
Until n > 0;
P := 0;
For k := n downto 1 do P := Sqrt(5*k + P);
Write('Gia tri cua bieu thuc P la: ',P:8:2);
Trường hợp c) sự trừu tượng càng cao hơn, nhưng với ý thức khái quát
hoá, học sinh sẽ đặt vấn đề n dấu căn bậc bất kỳ thì máy tính sẽ giải quyết bài
toán như thế nào. Bây giờ các em suy nghĩ đến tính giá trị của biểu thức P có n
dấu căn m. Để giúp học sinh không nản khi cảm thấy bài quá khó, nhiệm vụ của
người thầy giáo nhắc lại cho học sinh biết căn bậc m của một số nào đó có số
mũ là 1/m và để nhập được P lớn hơn 1 và n không âm thì phải tổ chức vòng
lặp…để học sinh tính được P như sau:
Repeat
Write('Nhap gia tri cua n va m:');
Readln(n, m);
Until (n > 0) and (m > 1);
P := 0; For k := n downto 1 do P := Exp(1/m*Ln(5*k + P));
Write('Gia tri cua bieu thuc P la: ',P:8:2);
Tóm lại việc xây dựng dược hệ thống bài tập như vậy sẽ giúp cho học sinh
tăng khả năng tư duy, khả năng trừu tượng hoá, khái quát hoá.
3.1.3- Nội dung của hoạt động.
Nội dung của hoạt động chủ yếu là những tri thức liên quan đến hoạt
động và những điều kiện khác của hoạt động. Nội dung hoạt động càng gia tăng
thì hoạt động càng khó thực hiện cho nên nội dung hoạt đông cũng là một căn cứ
để phân loại bài tập.
Ví dụ 4: Nhận vào m phần tử của một dãy số, in ra các số chia hết 5 và cho
9, tính tổng các số chia hết cho 9. Có thể phân loại bài tập dựa vào sự phức tạp
của nội dung bằng những mức sau:
a) Nhập vào m phần tử là số nguyên dương và in ra màn hình dãy vừa
nhập.
b) Nhập vào m phần tử là số nguyên, in ra màn hình các phần tử là số chia
hết cho 9 và chia hết cho 5. Tính tổng các số chia hết cho 9.
c) Nhập vào m phần tử là số nguyên lớn hơn 3 và nhỏ hơn 3000, in ra màn
hình các phần tử là số chia hết cho 9 và chia hết cho 5. Tính tổng các số chia hết
cho 9.
Ở nội dung a) học sinh dễ dàng độc lập viết chương trình nhận vào số m
và bố trí vòng lặp để nhận vào các số nguyên không âm như sau:
Write('Nhap vao bao nhieu phan tu la nguyen duong? ');
Readln(m);
8
i := 0;
Repeat
i := i + 1;
Write('Nhap so thu ',i,' = ');
Readln(So[i]);
if So[i] < 0 then Begin Writeln('Moi nhap lai'); i := i - 1;
Until i = m;
Write('Day vua nhap la: ');
For i := 1 to m do Write(So[i]:3);
End;
Ở nội dung b) thêm nội dung in ra các số hết cho 9 và chia hết cho 5, sau
đó tính tổng các số chia hết cho 9, rất có thể các em sẽ lúng túng, các em có thể
chưa nghĩ ra được ngay, Vì vậy, giáo viên cần hướng dẫn cho các em chỉ cần
thêm điều kiện nhập được ở số sau Until, như vậy học sinh sẽ dễ dàng viết được
lệnh đó:
Write('Nhap vao bao nhieu phan tu la nguyen duong? ');
Readln(m);
i := 0;
Repeat
i := i + 1;
Write('Nhap so thu ',i,' = ');
Readln(So[i]);
if So[i] < 0 then Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End;
Until i = m;
Write('So chia het cho 5 va 9 la: ');
for i := 1 to m do
Begin
If (So[i] mod 5 = 0) and (So[i] mod 9 = 0) then Write(So[i]:5);
End; Readln;
For i := 1 to m do If So[i] mod 9 = 0 then s := s + So[i];
Write('Tong cac so chia het cho 9 la: ',s:3);
Khi đến nội dung c) mặc dù thêm nội dung là các số đó lớn hơn 3 và nhỏ
hơn 3000 nhưng đã được hướng dẫn theo tư duy ở ý b) các em dễ dàng làm
được.
Write('Nhap vao bao nhieu phan tu la nguyen duong? ');
Readln(m);
i := 0; s := 0;
Repeat
i := i + 1;
Write('Nhap so thu ',i,' = ');
Readln(So[i]);
if (So[i] <= 3) or (So[i] >= 3000) then
Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End;
Until i = m;
Write('So chia het cho 5 va 9 la: ');
for i := 1 to m do
Begin
9
If (So[i] mod 5 = 0) and (So[i] mod 9 = 0) then Write(So[i]:7);
End;
Readln;
For i := 1 to m do If So[i] Mod 9 = 0 then s := s + So[i];
Write('Tong cac so chia het cho 9 la: ',s:3);
Như vậy việc gia tăng thêm nội dung hoạt động khi hoạt động càng khó
thực hiện, cho nên giáo viên trong trường hợp này phải hướng dẫn để cho học
sinh vận dụng những kết quả của phần trước để suy nghĩ tìm cách giải quyết
phần sau.
3.1.4 - Chất lượng của hoạt động.
Chất lượng của hoạt động thường là tính độc lập hoặc độ thành thạo, cũng
có thể lấy làm căn cứ để xây dựng bài tập.
Ví dụ 5: Xây dựng chương trình, có thể xây dựng bài tập theo 3 mức độ sau:
a) Hiểu chương trình.
b) Trình bày lại dược việc xây dựng chương trình.
c) Độc lập xây dựng chương trình.
Ví dụ cụ thể như sau: Viết chương trình tính:
S = 1 + 2 + 3 + … + n với n nhập từ bàn phím khi chạy chương trình.
Trong ví dụ này học sinh phải hiểu được đây là phép tính tổng của một dãy
số, vì vậy sẽ phải dùng vòng lặp có số lần định trước để viết thuật giải, đó là
mức độ hiểu chương trình.
Ở mức độ trình bày lại được việc xây dựng chương trình là bước đầu tiên
nhập n, dùng vòng lặp For… cho biến chạy từ 1 đến n, sau đó cho cộng dồn ở
sau do..., thoát khỏi vòng lặp thì in giá trị của tổng.
Ở mức độ độc lập xây dựng chương trình người giáo viên phải dẫn dắt để
học sinh biết xác định số biến phải dùng là 2 biến, một biến đếm thuộc kiểu số
nguyên, một biến chứa giá trị của tổng thuộc kiểu số thực. Trước khi vào vòng
lặp thì phải khởi tạo gán cho biến chứa tổng bằng 0. Xác định trong vòng lặp
For… Thì phép tính cộng dồn ở sau do... phải là s := s + i, khi thông báo kết quả
phải dùng lệnh Write và định dạng cho tổng s là số thực.
Var i: integer; S: real;
Begin
Write(‘Nhap gia tri cua n=’);
Readln(n);
S := 0;
For i := 1 to n do S := S + i Write(‘Tong cua day S = ’,S:8:2);
Readln; End;
Sau khi học sinh đã viết xong chương trình để kiểm tra độ thành thạo của
học sinh bằng cách cho thêm ví dụ tương tự như sau:
10
Tính tổng S = 1 + 1/2 + 1/3 + 1/4 +…+ 1/n với n nhập khi chạy chương
trình.
Lúc này mức độ thành thạo của học sinh là việc khai báo biến, biến đếm
thuộc kiểu nguyên, biến chứa tổng thuộc kiểu thực và trước khi vào vòng lặp là
phải gán cho biến chứa giá trị của tổng bằng 0. Vì bài toán tương tự như bài tập
đã được làm. Mức độ độc lập xây dựng chương trình là học sinh viết được lệnh
cộng dồn ở sau Do là S := S + 1/i; và viết được toàn bộ chương trình.
Var i: integer; S: real;
Begin
Write(‘Nhap gia tri cua n=’); Readln(n);
S := 0;
For i := 1 to n do S := S + 1/i Write(‘Tong cua day S = ’,S:8:2);
Readln
End;
Để kiểm tra độ thành thạo của học sinh và rèn kỹ năng nắm cấu trúc của
vòng lặp có số lần lặp không xác định giáo viên cũng có thể thêm một số ví dụ
nhỏ sau:
Em hãy cho biết 2 chương trình sau in ra giá trị nào của a
1) Program VonglapWhile;
Var a: integer;
Begin a := 13 While a <12 do Writeln(a); End.
2) Program VonglapRepeat;
Var a: integer;
Begin a := 13; Repeat Writeln(a); Until a < 12;
End.
Học sinh phải nắm vững cấu trúc của hai vòng lặp này thì mới phát hiện ra,
ở vòng lặp While… điều kiện lặp là a < 12, mà a = 13 nên không đủ điều kiện,
như vậy chương trình không in giá trị nào của a.
Vòng lặp Repeat… điều kiện để dừng vòng lặp là a < 12, mà a = 13 không
đủ điều kiện để dừng vòng lặp như vậy chương trình sẽ chạy mãi không dừng lại
được và sẽ in ra vô số số13.
3.1.5- Phối hợp nhiều phương diện làm căn cứ xây dựng bài tập.
Hoạt động nhận thức bao gồm hai quá trình: Nhận thức cảm tính và nhận
thức lý tính. Nhận thức cảm tính là quá trình nhận thức cái bên ngoài của sự vật
hiện tượng, đây chính là quá trình nhận thức bậc thấp của quá trình tư duy, ở bậc
này học sinh chỉ có khả năng nhận thức được chính sự vật hiện tượng đó chưa có
cái nhìn sâu sắc về bản chất, nguồn gốc sự vật hiện tượng của nó và mối quan hệ
của nó về thế giới xung quanh. Nhận thức lý tính là bậc cao của quá trình tư duy,
Ở bậc này học sinh có thể nhận thức cái bên trong, cái bản chất của sự vật hiện
tượng học sinh mới có thể khái quát hoá và sáng tạo. Nếu phối hợp nhiều
phương diện làm căn cứ tiến hành dạy học ở câu lệnh rẽ nhánh và lặp trong lập
trình. Trong các bài tập ví dụ bài tập đưa ra ở phần trên được tiến hành đi từ dễ
đến khó. Các bài tập từng bước tăng dần trong hoạt động nhận thức. Trong dạy
11
học lập trình, hoạt động này có thể kể như nhận dạng, thể hiện phân tích, so
sánh, trừu tượng hoá, khái quát hoá. Các hoạt động này cũng được thực hiện
tuần tự hoặc xen kẽ trong những bài tập đã cho ở trên. Hoặc ví dụ sau:
Ví dụ 6: a) Nhận vào một dãy số gồm 20 số nguyên.
b) Tìm giá trị nhỏ nhất trong dãy
c) In ra các số còn lại trong dãy.
d) In ra các số nguyên tố trong dãy.
Nhìn vào yêu cầu của bài toán ta thấy nội dung hoạt động và mức độ độc
lập của hoạt động. Ở phần a và b học sinh có thể tự làm (2) hoặc làm nhưng có
sự gợi ý của giáo viên (1). Nếu học sinh không tự làm mà không cần gợi ý thì
mức (2) đã cao hơn mức( 1) về mức độ độc lập của hoạt động. Phần a và b có
thể làm như sau:
i := 0;
Repeat
i := i + 1;
Write('Nhap so thu ',i,' = ');
Read(SO[i]);
Until i = 10;
Readln;
NN := SO[1];
For i := 2 to 10 do
If NN > SO[i] then NN := SO[i];
Writeln;
Write('So nho nhat trong cac so la: ', NN);
Readln;
Writeln;
Write('Cac so con lai la:');
For i := 1 to 10 do If SO[i] > NN then Write(SO[i]:5);
Khi chuyển sang phần c) chúng ta mong muốn học sinh khá giỏi có thể
viết được, nếu học sinh lúng túng giáo viên có thể gợi ý: Thế nào là số nguyên
tố? Giáo viên thông báo: số nguyên tố không bao giờ có ước số từ 2 đến căn bậc
hai của nó, hay không bao giờ có ước số từ 2 đến -1.
i := 0;
Repeat
i := i + 1;
Write(‘Nhap so thu ’, i, ‘ =’);
Readln(so);
If so >= 2 then
Begin
b := true;
For u := 2 trunc((sqrt(so)) do
If so mod u = 0 then Begin
b := false;
break
end;
12
end
else
Until i = 20;
Write(‘Nhap lai ’);
Trong phần c) hoc sinh cũng có thể làm được từ (3) hoặc làm nhưng có sự
gợi ý của giáo viên (2’). Nếu học sinh làm mà cần có sự gợi ý của giáo viên thì
mức độ (2’) cũng chỉ hơn mức độ (1) ở sự phức hợp của hoạt động, nhưng lại
thấp hơn mức đô (3) về tính độc lập của hoạt động, còn bậc (2) lại chỉ kém mức
độ(3) về sự phức hợp của hoạt động.
Tóm lại: Phối hợp nhiều phương diện hoạt động cũng là một căn cứ để
người giáo viên phải lưu ý đến dạng bài tập này và chuẩn bị tốt những câu hỏi
gợi ý học sinh để giải quyết tốt các vấn đề gặp phải.
3.2 . Hệ thống bài tập khi dạy câu lệnh rẽ nhánh và cấu trúc lặp.
Bài 1: Viết chương trình cho máy nhận vào ba số. Xét xem ba số đó có là
ba cạnh của một tam giác hay không? Nếu có thì ta giác đó là tam giác gì?
(Vuông, nhọn hay tù).
Chương trình:
Program Tamgiac; Uses Crt;
Var a, b, c, tg: Real;
Begin
Clrscr;
Writeln(‘Cho ba so a, b, c’);
Readln(a); Readln(b); Readln(c);
If (a < b + c) and (b < a + c) and (c < a + b) then
Begin
Writeln(‘Ba so vua nhap la ba canh cua mot tam giac’);
If a > c then
Begin
tg := a; a :=c; c: = tg; End;
If b > c then
Begin
tg := b; b := c; c := tg; End;
a := a*a;
b := b*b;
c := c*c;
If c < a + b then Writeln(‘Day la tam giac nhon’)
Else Writeln(‘Day la tam giac vuong’)
Else Writeln(‘Day la tam giac tu’);
End
Else Writeln(‘Day khong phai la ba canh cua mot tam giac’);
Readln;
End.
Bài 2: Viết chương trình nhập vào một dãy số nguyên sau đó tính tổng các
số âm và tính trung bình cộng của các số dương.
a) Dãy số có 10 phần tử.
b) Số phần tử của dãy được nhập từ bàn phím trước khi vào từng phần tử
của dãy.
13
c) Số phần tử của dãy không được biết chính xác trước khi vào từng phần
tử của dãy mà chỉ biết tron khoảng nào đó. Nó hoàn toàn được xác định khi
người ta nhập vào dấu hiệu kết thúc dãy đó là nhận được số 0.
Chương trình:
a) Program Tinh_tong; Uses Crt;
Var i, a, sd, td, ta: Integer;
Begin
Clrscr;
sd := 0; td := 0; ta := 0;
for i := 1 to 10 do
Begin
Write(‘Nhap so thu: ’,i,‘=’);
Readln(a);
If a < 0 then ta := ta + a
Else
Begin td := td + a;
sd := sd + 1; End;
End;
Writeln(‘Tong cac so am la: ’, ta);
Writeln(‘Trung binh cong cua cac so duong la: ’, (td/sd):8:2);
readln;
End.
b) Program TinhTong_va_TBCduong; Uses Crt;
Var i, a, sd, td, ta: Integer;
Begin
Clrscr;
sd := 0; td := 0; ta := 0;
Write(‘Cho biet so phan tu cua day’);
Readln(i);
For i :=1 to i do
Begin
Writeln(‘Nhap so thu: ’, i, ‘=’); Readln(a);
If a < 0 then ta := ta + a
Else Begin td := td + a; sd := sd + 1; End;
Writeln(‘Tong cac so am la: ’, ta);
Writeln(‘Trung binh cong cua cac so duong la: ’, (td/sd):8:2);
End;
Readln;
End.
c) Program Tinhtong_va_TBCduong; Uses Crt;
Var i, a, sd, td, ta: Integer;
Begin
Clrscr;
sd := 0; td := 0; ta := 0; i := 0;
Repeat i := 1;
14
Write('Nhap so thu: ', i, '=');
Readln(a);
If a < 0 then ta := ta + a
Else Begin td := td + a; sd := sd +1; End;
Until a = 0;
Writeln('Tong cac so am la: ',ta);
Writeln('Trung binh cong cua cac so duong la: ',(td/sd):8:2);
Readln;
End.
Bài 3. Tính giá trị của biểu thức P như sau:
a) P = 5 + 4 + 3 + 2 + 1
b) P = 5 + 15 + ... + 5n
c) P = m 5 + m 15 + ... + m 5n
Với m là một số nguyên lớn hơn 1.
Chương trình:
a) Program Tinh_GTTB_P; Uses Crt;
Var k: Integer; P:Real;
Begin
Clrscr;
P := 0;
For k := 1 to 5 do
P := Sqrt(k + P);
Write('Gia tri cua bieu thuc P la: ',P:8:2);
Readln;
End.
b) Program Tinh_GTBT_P(n); Uses Crt;
Var k,n: Integer; P:Real;
Begin
Clrscr;
Repeat
Write('Nhap gia tri cua n:');
Readln(n);
Until n > 0;
P := 0;
For k := n downto 1 do P := Sqrt(5*k + P);
Write('Gia tri cua bieu thuc P la: ',P:8:2);
Readln;
End.
c) Program Tinh_GTBT_P(m); Uses Crt;
Var k,n,m: Integer; P:Real;
Begin
Clrscr;
Repeat
Write('Nhap gia tri cua n va m:');
15
Readln(n, m);
Until (n > 0) and (m > 1);
P := 0;
For k := n downto 1 do P := Exp(1/m*Ln(5*k + P));
Write('Gia tri cua bieu thuc P la: ',P:8:2);
Readln;
End.
Bài 4: a) Nhập vào m phần tử là số nguyên dương và in ra màn hình dãy
vừa nhập.
b) Nhập vào m phần tử là số nguyên dương, in ra màn hình các phần tử là
số chia hết cho 9 và chia hết cho 5. Tính tổng các số chia hết cho 9.
c) Nhập vào m phần tử là số nguyên lớn hơn 3 và nhỏ hơn 3000, in ra màn
hình các phần tử là số chia hết cho 9 và chia hết cho 5.Tính tổng các số chia hết
cho 9.
Chương trình:
a) Program Nhap;
Uses Crt;
Var i, m :Integer;
So: Array[1..20] of Integer;
Begin
Clrscr;
Write('Nhap vao bao nhieu phan tu la nguyen duong? ');
Readln(m);
i := 0;
Repeat
i := i + 1;
Write('Nhap so thu ',i,' = ');
Readln(So[i]);
if So[i] <= 0 then
Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End;
Until i = m;
Write('Day vua nhap la: ');
For i := 1 to m do
Write(So[i]:5);
Readln;
End.
b) Program Nhap;
Uses Crt;
Var i, m, s: Integer;
So: Array[1..20] of integer;
Begin
Clrscr;
Write('Nhap vao bao nhieu phan tu la nguyen duong? ');
16
Readln(m);
i := 0;
Repeat
i := i + 1;
Write('Nhap so thu ',i,' = ');
Readln(So[i]);
if So[i] <= 0 then
Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End;
Until i = m;
Write('So chia het cho 5 va 9 la: ');
for i := 1 to m do
Begin
If (So[i] mod 5 = 0) and (So[i] mod 9 = 0) then Write(So[i]:5);
End;
Readln;
For i := 1 to m do If So[i] mod 9 = 0 then s := s + So[i];
Write('Tong cac so chia het cho 9 la: ',s:3);
Readln;
End.
c) Program Nhap; Uses Crt;
Var i,m,s :Integer;
So :array[1..50] of integer;
Begin
Clrscr;
Write('Nhap vao bao nhieu phan tu la nguyen duong? ');
Readln(m);
i := 0; s := 0;
Repeat
i := i + 1;
Write('Nhap so thu ',i,' = ');
Readln(So[i]);
if (So[i] <= 3) or (So[i] >= 3000) then
Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End;
Until i = m;
Write('So chia het cho 5 va 9 la: ');
for i := 1 to m do
Begin
If (So[i] mod 5 = 0) and (So[i] mod 9 = 0) then
Write(So[i]:7);
End;
Readln;
For i := 1 to m do If So[i] Mod 9 = 0 then s := s + So[i];
Write('Tong cac so chia het cho 9 la: ',s:3);
Readln;
End.
17
Bài 5: a) Nhập vào một dãy số gồm 20 số nguyên.
b) Tìm số có giá trị nhỏ nhất trong dãy.
c) In ra các số còn lại trong dãy đó.
d) In ra các số nguyên tố trong dãy đó.
Chương trình:
a, b, c)
Program NHO_NHAT; Uses Crt;
Var i, NN:Integer;
SO:Array[1..10] of Integer;
Begin
Clrscr;
i:=0;
Repeat
i:=i+1;
Write('Nhap so thu ',i,' = ');
Read(SO[i]);
Until i = 10;
Readln;
NN := SO[1];
For i := 2 to 10 do If NN > SO[i] then NN := SO[i];
Writeln;
Write('So nho nhat trong cac so la: ', NN);
Readln;
Writeln;
Write('Cac so con lai la:');
For i := 1 to 10 do
If SO[i] > NN then Write(SO[i]:5);
Readln;
End.
d) Program IN_SNTO; Uses Crt;
Var i,j:Integer;b:Boolean;
SO:Array[1..20] of Integer;
Begin
Clrscr;
i:=0;
Repeat i:=i+1; Write('Nhap so thu ',i,' = '); Read(SO[i]); Until i = 20;
Readln;
Write('Cac so nguyen to cua day la: ');
For i := 1 to 20 do
If So[i] = 2 then
Write(So[i]: 4)
Else
If SO[i] > 2 then
Begin
b := true;
18
for j := 2 to trunc(sqrt(So[i])) do
If So[i] mod j = 0 then
Begin
b:=false;
break;
If b then
Write(SO[i]:4);
end; Readln;
End;
End.
IV - KIỂM NGHIỆM
Qua 2 năm áp dụng đề tài để giảng dạy tin học tại trường THPT Ba Đình
bản thân nhận thấy kết quả giảng dạy được nâng lên hẳn cụ thể ở bảng dưới đây:
Năm học 2012 -2013: Năm chưa áp dựng đề tài:
Lớp
11A 11B 11D 11G 11H 11K
X.loại
Giỏi
18
3
7
16
9
13
Khá
8
11
5
19
12
13
TB
22
13
16
13
14
10
Yếu
5
1
2
1
Kém
T.số HS
48
27
33
49
37
37
Năm học 2013 -2014 : Năm áp dụng đề tài
Lớp
11A 11D 11G 11H 11K 11M
X.loại
Giỏi
17
22
10
23
13
9
Khá
31
24
36
24
22
26
TB
1
1
2
6
Yếu
1
1
Kém
T.số HS
49
48
48
47
42
35
Năm học: 2014 -2015: Năm áp dụng đề tài
Lớp
11A 11D 11G 11H 11K 11M
X.loại
Giỏi
34
9
24
15
26
14
Khá
10
30
21
29
5
28
TB
4
4
2
Yếu
Kém
T.số HS
44
43
45
44
35
44
11M
11N
Tổng
11
12
13
18
7
13
95
87
114
9
36
38
305
11N
11P
Tổng
11
25
3
23
6
5
3
39
37
128
194
18
5
0
345
11E
Tổng
10
31
4
132
154
14
0
0
300
45
Qua bảng tổng hợp kết quả của 3 năm học mà tôi đã dạy, đã phần nào minh
chứng cho kết quả của đề tài.
19
PHẦN C – KẾT LUẬN:
Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây
dựng các chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển
của tin học (trong đó các nhà lập trình chuyên nghiệp) mà hiện nay hầu hết các
lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công viêc nhanh,
hiệu quả và chính xác hơn.
Ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến nhất
trên thế giới sử dụng trong lĩnh vực giảng dạy. Trong quá trình giảng dạy, người
giáo viên nếu biết thực hiện tốt hoạt động dạy học của mình, hướng dẫn khéo
léo hoạt động học của HS. Trong tiết học, làm cho học sinh chủ động để tìm tòi
lại kiến thức đã học qua đó giải quyết được vấn đề do giáo viên đặt ra. Trong
quá trình giải quyết vấn đề, giáo viên chỉ ra những sai lầm mà học sinh mắc phải
do hiểu không rỏ vấn đề giúp cho các em hiểu rỏ hơn về câu lệnh, thì kết quả
giáo dục mới đạt được, làm cho học sinh yêu thích môn học, ham học hỏi và tìm
tòi sáng tạo.
Trên đây là kinh nghiệm “Xây dựng hệ thống bài tập khi dạy câu lệnh rẽ
nhánh và cấu trúc lặp” của cá nhân tôi xuất phát từ việc giảng dạy trong thực
tế, nó còn có nhiều hạn chế vì điều kiện thời gian... Tôi mong được sự đóng góp
ý kiến của đồng nghiệp để đề tài được hoàn thiện hơn.
Xin chân thành cảm ơn !
Nga Sơn, ngày 05 tháng 05 năm 2015
XÁC NHẬN CỦA ĐƠN VỊ
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.
Tác giả
Trần Ngọc Chiến
20