Mục lục
trang
PHẦN 1. ĐẶT VẤN ĐỀ
1. Lí do chọn đề tài 2
2. Mục đích của đề tài 2
PHẦN 2. NỘI DUNG
I. Cơ sở lí luận 3
1. Lập trình và ngôn ngữ lập trình 3
2. Dạy học lập trình ở nhà trường phổ thông 4
II. Thực trạng
1. Thuận lợi 4
2. Khó khăn 4
III. Giải pháp
1. Vận dụng cấu trúc While do giải các bài toán dạng lặp với số
lần lặp chưa biết trước
5
2. Chuyển đổi vận dụng cấu trúc While do giải các bài toán lặp
với số lần lặp xác định
8
3. Giải quyết vấn đề 10
4. Kết quả thu được 10
PHẦN 3. KẾT LUẬN VÀ ĐỀ XUẤT 11
Danh mục tài liệu tham khảo 12
1
PHẦN 1: ĐẶT VẤN ĐỀ
1. Lý do chọn đề tài
Trong xã hội ngày nay, CNTT đã được ứng dụng trong tất cả các mặt của đời sống
xã hội, sự phát triển không ngừng của KHKT đòi hỏi con người phải tự nâng cao kiến
thức, kỹ năng của mình để bắt kịp với đà phát triển đó. Kể từ khi tin học được đưa vào
và trở thành một môn học chính thức trong bậc học THPT, đã góp phần rất lớn vào
việc trang bị thêm cho thế hệ trẻ những kỹ năng cần thiết trong cuộc sống, đồng thời
PHẦN II: NỘI DUNG
I. CƠ SỞ LÝ LUẬN
1. Lập trình và ngôn ngữ lập trình
a. Khái niệm lập trình
Như ta đã biết, mọi bài toán có thuật toán đều có thể giải được trên máy tính
điện tử. Khi giải bài toán trên máy tính điện tử, sau các bước xác định bài toán và xây
dựng hoặc lựa chọn thuật toán khả thi là bước lập trình.
Lập trình là sử dụng cấu trúc dữ liệu và các câu lệnh của ngôn ngữ lập trình cụ
thể để mô tả dữ liệu và diễn đạt các thao tác thuật toán.
b. Ngôn ngữ lập trình
Ngôn ngữ lập trình là một hệ thống được ký hiệu hóa để miêu tả những tính
toán (qua máy tính) trong một dạng mà cả con người và máy đều có thể đọc và hiểu
được. Có rất nhiều ngôn ngữ lập trình đã được thiết kế và mỗi năm lại có thêm nhiều
ngôn ngữ lập trình mới xuất hiện. Các ngôn ngữ lập trình thường được nhắc đến như:
Basic, C, C++, C#, java, pascal, PHP…
Trong chương trình tin học phổ thông, để học sinh bước đầu làm quen với lĩnh
vực lập trình trong tin học, ngôn ngữ lập trình Pascal đã được lựa chọn để hướng dẫn
học sinh cách vận dụng mô tả các thuật toán. So với các loại ngôn ngữ lập trình khác,
ngôn ngữ lập trình Pascal tương đối đơn giản, đễ học, đễ nhớ với cấu trúc hết sức chặt
chẽ từ cấu trúc chương trình, đến cú pháp từng câu lệnh vì vậy đòi hỏi người học phải
rèn luyện cho mình tính chính xác về mặt cấu trúc và phải biết vận dụng linh hoạt các
cấu trúc lệnh để mô tả thuật toán giải quết từng bài toán cụ thể.
c. Cấu trúc điều khiển trong lập trình
Mỗi ngôn ngữ lập trình, ngoài các câu lệnh cơ bản bao giờ ta cũng bắt gặp hệ
thống các cấu trúc điều khiển, có thể kể đến như: cấu trúc điều khiển rẽ nhánh, cấu
trúc điều khiển lặp… giúp người lập trình có thể mô tả chính xác các bài toán có thật
toán phức tạp.
Trong ngôn ngữ lập trình pascal, các cấu trúc điều khiển có thể kể đến như: cấu
trúc rẽ nhánh với câu lệnh if… Then gồm hai dạng thiếu và đủ, cấu trúc điều khiển lặp
được chia làm hai loại: lặp với số lần biết trước với câu lệnh For do và lặp với số lần
sinh ít có điều kiện tiếp cận với CNTT. Với nội dung lập trình trong tin học, đây là
một nội dung mới và khó đối với đa số học sinh, phần lớn học sinh thực sự khó khăn
trong việc nắm bắt ý nghĩa của từng câu lệnh cũng như cách vận dụng chúng như thế
nào trong việc lập trình, do đó nhiều học sinh sau khi xác định được yêu cầu của bài
toán thường chỉ dừng lại ở việc xây dựng và biểu diễn thuật toán cho bài toán (dưới
dạng sơ đồ hoặc liệt kê các bước) chứ chưa biết sử dụng các câu lệnh như thế nào để
mô tả các thao tác đó thành chương trình, nên kết quả học sinh bế tắc trong việc giải
quyết các bài toán lập trình dẫn đến kết quả giảng dạy chưa cao.
Cụ thể, với nội dung về các cấu trúc điều khiển, cấu trúc rẽ nhánh khá quen
thuộc với các dạng toán trong thực tế học sinh đã học như biện luận nghiệm cho
4
phương trình, biện luận giải các bài toán… đối với cấu trúc lặp học sinh khó phân biệt
như thế nào là lặp, cái gì cần lặp và khi nào thì kết thúc việc lặp, do đó khi gặp các bài
toán cần sử dụng cấu trúc điều khiển lặp để giải quyết đa số học sinh không biết cách
làm, hoặc tìm ra cách làm nhưng không biết làm thế nào để chuyển từ thật toán thành
chương trình. Bên cạnh đó, việc ứng dụng cấu trúc lặp lại khá phổ biến trong lập trình,
đặc biệt là khi làm việc với dữ liệu kiểu mảng hay kiểu xâu là nội dung chiếm phần
lớn trong chương trình tin học lớp 11 ở nhà trường phổ thông, những nhân tố này một
phần tác động ngược lại làm cho học sinh bế tác dẫn đến chán, ngại học lập trình.
Đối với bản thân giáo viên: ít kinh nghiệm trong công tác giảng dạy nên việc
truyền đạt cho học sinh hiểu đúng bản chất và cách vận dụng các cấu trúc lệnh còn gặp
không ít khó khăn, lúng túng đôi khi chú tâm nhiều vào lí thuyết mà ít quan tâm đến
việc hướng dẫn học sinh học tập trực tiếp thông qua các ví dụ thực hành.
Sau một số năm giảng dạy, từ việc nhận thấy những khó khăn gặp phải của học
sinh trong việc học lập trình, cũng như việc thiếu kinh nghiệm truyền đạt của bản thân,
tôi đã tìm tòi, nghiên cứu tìm ra các nguyên nhân dẫn đến việc học sinh ngại học, chán
học lập trình điều đó không phải chỉ ở việc xây dựng các thuật toán để giải các bài
toán mà là làm thế nào để chuyển đổi chính xác thuật toán thành chương trình, lựa
chọn cấu trúc điều khiển như thế nào để có thể mô tả chính xác thao tác của thuật
toán.
lặp lại, xác định được dạng lặp cho bài toán. Học sinh dễ dàng nhận thấy không thể sử
dụng cấu trúc For do trong trường hợp này. Kết thúc việc trả lời các câu hỏi Giáo
viên yêu cầu học sinh viết câu lệnh lặp để giải bài toán trên.
Học sinh viết:
S:=0;
n:=0;
While (S<2013) do
Begin
n:=n+1;
S:=S+n;
end;
Giáo viên cho học sinh hoàn thiện chương trình trên, và kết luận những bài toán có
dạng lặp nhưng số lần lặp chưa cụ thể là bao nhiêu cần phải xác định được công việc
gì cần lặp lại, khi nào thì còn thực hiện thao tác lặp đó đề từ đó giúp học sinh có thể
phát biểu cấu trúc while do thành lời: “ trong khi điều kiện còn đúng thì còn thực hiện
công việc”.
Bài toán 2: Lập trình giải bài toán cổ:
“Vừa gà vừa chó,
bó lại cho tròn,
ba mươi sáu con,
một trăm chân chẵn”
6
Với bài toán 2, bằng kiến thức toán học, học sinh dễ dàng tìm ra đáp án cho bài
toán, tuy nhiên để giải bài toán trên bằng phương pháp lập trình thì không ít học sinh
gặp khó khăn. Để giúp học sinh giải quyết được bài toán, trước hết phải yêu cầu học
sinh xác định chính xác bài toán.
Xác định bài toán:
Input:
Output: số gà, số chó
Từ kết quả xác định bài toán của học sinh, giáo viên đặt ra hệ thống các câu hỏi giúp
Bài 1. Tính và đưa kết quả ra màn hình tổng
1 1 1 1
1 2 100
S
a a a a
= + + + +
+ + +
Bài 2. Tính và đưa kết quả ra màn hình tổng
1 1 1 1
1 2
S
a a a a N
= + + + + +
+ + +
Cho đến khi
1
0,0001
a N
<
+
.
Giáo viên đưa ra các câu hỏi sau:
Câu 1. Bài 1 đã xác định được lần lặp chưa?
Học sinh trả lời là: đã xác định được lần lặp, cụ thể cộng dồn đến a+100.
Câu 2. Em hãy viết câu lệnh lặp để tính tổng S ở bài 1?
Học sinh viết:
Việc dùng câu lệnh lặp while…do để thực hiện vòng lặp cho câu lệnh for…do
là có thể làm được, nhưng việc dùng câu lệnh for…do để thực hiện vòng lặp cho câu
lệnh while…do là không được vì:
+ Câu lệnh for…do sau khi thực hiện câu lệnh sau do thì biến đếm tự động
tăng lên 1, trong câu lệnh while…do ta có thể thực hiện lệnh tăng biến_đếm lên 1
bằng cách thực hiện câu lệnh gán biến_đếm:=biến_đếm+1.
+ Câu lệnh for…do kết thúc khi biến_đếm > Giá_trị_cuối, trong câu lệnh
while…do ta có thể đưa điều kiện biến_đếm>Giá_trị_cuối vào trong điều kiện kiểm
tra vòng lặp while…do, cụ thể bài 1 ta có thể thực hiện như sau:
S:=1/a;
N:=1;
While N <= 100 do
Begin
S:=S+1/(a+N);
N:=N+1;
End;
9
+ Câu lệnh while…do thực hiện câu lệnh khi điều_kiện còn đúng, nên ta
không xác định được đến vòng lặp thứ bao nhiêu để điều_kiên sai vì thế ta không thể
dùng vòng lặp for…do để thực hiện tính tổng S cho bài 2. Đồng thời đưa ra kết luận
thứ hai: Câu lệnh While do có thể áp dụng để giải các bài toán có dạng lặp với số
lần biết trước ngược lại câu lệnh For do không thể áp dụng để giải các bài toán có
dạng lặp với số lần chưa biết trước.
3. Giải quyết vấn đề
Trong quá trình thảo luận để giải thích, chứng minh vấn đề cách vận dụng cấu
trúc While do và khả năng chuyển đổi qua lại giữa hai câu lệnh lặp bắt buột học sinh
phải nắm vững cú pháp, cũng như ý nghĩa của hai câu lệnh trên. Dẫn đến việc các em
thấy được sự giống và khác nhau của hai câu lệnh một cách rõ ràng hơn, giúp học sinh
nắm rõ bản chất của hiện tượng lặp trong lập trình, bản chất của câu lệnh While do và
cách vận dụng nó một cách linh hoạt để giải quyết từng bài toán cụ thể.
2013.
PHẦN III: KẾT LUẬN VÀ ĐỀ XUẤT
Từ kết quả thu được của việc áp dụng giải pháp sáng kiến cho thấy, so với các
phương pháp khác, việc hướng dẫn học sinh giải các bài tập cụ thể có sử dụng cấu trúc
While do một cách chi tiết giúp học sinh thấy rõ bản chất của cấu trúc lặp với số lần
chưa biết trước, hiểu và biết vận dụng chính xác cấu trúc điều khiển lặp While do
trong việc giải quyết từng bài toán cụ thể góp phần tạo nên hứng thú cho người học,
tăng chất lượng môn học. từ đó nhận thấy rằng, việc dạy học tin học nói chung và dạy
học lập trình nói riêng, cách dạy học giúp học sinh hiểu rõ bản chất của vấn đề nên
xuất phát từ những bài toán cụ thể cũng như cần phải hướng dẫn một cách chi tiết,
điều đó giúp người học nắm rõ hơn bản chất của vấn đề, từ đó biết vận dụng các kiến
thức lĩnh hội được vào giải quyết các bài toán cần vận dụng các kiến thức đó tạo niềm
tin và hứng thú cho người học góp phần nâng cao chất lượng giáo dục bộ môn.
Quảng Xương, ngày 13 thang 5 năm 2013
Tôi xin cam kết nội dung của sáng kiến do
bản thân tôi tự đúc rút kinh nghiệm không
sao chép của bất cứ ai.!
Thủ trưởng đơn vị xác nhận Giáo viên
Tống Thanh Toàn
11
Danh mục tài liệu tham khảo
1. Sách giáo khoa tin học 11 Hồ Sĩ Đàm chủ biên
2. Sách giáo viên tin học 11 Hồ Sĩ Đàm chủ biên
3. Lý thuyết và Bài tập lập trình Pascal 5.5-6.0 Nguyễn Thị Kiều Duyên
4. Một số sáng kiến kinh nghiệm và ý kiến của đồng nghiệp .
12