Tải bản đầy đủ (.doc) (13 trang)

SKKN THCS: Một số giải pháp giúp học sinh lớp 8, nắm vững các thuật toán và mô tả thuật toán, qua bài “Từ bài toán đến chương trình

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 (360.58 KB, 13 trang )

MỘT SỐ GIẢI PHÁP GIÚP HỌC SINH LỚP 8
NẮM VỮNG CÁC THUẬT TOÁN VÀ MÔ TẢ THUẬT TOÁN
QUA BÀI: “TỪ BÀI TOÁN ĐẾN CHƯƠNG TRÌNH”
A. ĐẶT VẤN ĐỀ
Để học tốt lập trình, dù là ngôn ngữ nào thì xác định bài toán và mô tả thuật
toán là điều đầu tiên học sinh cần phải nắm vững. Việc xác định bài toán và xây
dựng thuật toán là những nội dung quan trọng, nếu không nói là quan trọng nhất.
Nếu học sinh nắm vững được những kiến thức này thì sẽ dễ dàng hơn rất nhiều trong
việc tiếp thu kiến thức ở các bài sau, để viết được chương trình tốt. Tuy rằng ngôn
ngữ lập trình Pascal là một ngôn ngữ có cấu trúc trong sáng, có tính sư phạm cao,
phổ biến, phù hợp với giáo viên và học sinh, thường được dạy trong nhà trường và
dành cho cho người mới học lập trình. Nhưng việc học lập trình đang còn khá mới
mẻ và tương đối khó với đa số học sinh lớp 8. Việc nắm được thuật toán và mô tả
thuật toán của từng bài toán nhiều học sinh không làm được và tỏ ra khá lúng túng.
Trong quá trình dạy học, tôi nhận thấy việc tiếp cận với lập trình của học
sinh còn rất khó khăn, nhất là kỹ năng trong xây dựng thuật toán và mô tả bài toán
để tiến tới viết chương trình. Bản chất thuật toán là sáng tạo, tư duy của con người,
không phải của máy tính, nếu học sinh không nắm được thuật toán sẽ rất khó để
viết được chương trình. Một số chương trình các em viết xong khi chạy chương
trình kết quả không như mong muốn vì thuật toán không đúng hoặc không tối ưu.
Chính vì vậy để học sinh có thể nắm vững được thuật toán và biết cách mô tả
thuật toán đối với một số bài toán trong yêu cầu chuẩn kiến thức, kỹ năng tạo điều
kiện để các em có thể thành thạo viết chương trình tốt, tôi đã mạnh dạn ứng dụng
Sáng kiến kinh nghiệm “Một số giải pháp giúp học sinh lớp 8, nắm vững các
thuật toán và mô tả thuật toán, qua bài “Từ bài toán đến chương trình” .
B. GIẢI QUYẾT VẤN ĐỀ
I. CƠ SỞ LÝ LUẬN CỦA VẤN ĐỀ:
THUẬT TOÁN (algorithm) để giải một bài toán là một dãy hữu hạn các thao
tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác
ấy, từ Input của bài toán, ta nhận được Output cần tìm.
Thuật toán được mô tả theo rất nhiều cách: trong ngôn ngữ tự nhiên (natural


languages), bằng sơ đồ khối (flowcharts) hoặc trong cái gọi là mã giả (pseudocode)
một loại ngôn ngữ thể hiện thuật toán, không phụ thuộc vào ngôn ngữ lập trình cụ
thể.
Với học sinh, khái niệm thuật toán là thuật ngữ còn khá mới mẻ đối với các
em khi bắt đầu học lập trình. Và với học sinh lớp 8 khả năng tiếp thu về kiến thức
lập trình lại càng khó khăn hơn.
1


Đứng trước một bài toán lập trình nhiều em còn lúng túng không tìm ra cách
giải quyết bài toán. Điều này sẽ gây hậu quả học sinh không thể mô tả được thuật
toán và viết được chương trình dẫn đến các em có tâm lí chán nản không thích học
môn học này.
Nắm vững được thuật toán và biết mô tả thuật toán sẽ giúp các em có kiến
thức về lập trình mà cụ thể là lập trình Pascal, tạo tiền đề cho sau này các em học
lập trình bằng ngôn ngữ khác.
II. THỰC TRẠNG CỦA VẤN ĐỀ
1. Thực trạng:
1.1. Thực trạng việc dạy nội dung “Từ bài toán đến chương trình”
Nội dung về các bài toán và thuật toán trong (bài 5) là một nội dung quan
trọng và tương đối khó đối với học sinh. Các thuật toán ở bài này là những thuật
toán cơ bản học sinh cần tiếp thu.
Tuy nhiên làm thế nào để học sinh có thể hiểu, nắm và ghi nhớ được các
thuật toán này, nhiều giáo viên vẫn chưa tìm ra cách để giảng dạy phù hợp với khả
năng tiếp thu của học sinh.
Một số giáo viên lựa chọn các bài toán và thuật toán để giới thiệu cho học
sinh chưa phù hợp, còn lúng túng trong cách truyền đạt dẫn đến học sinh chỉ nắm
thuật toán máy móc chứ không hiểu bản chất của thuật toán.
Một số giáo viên khác lại lựa chọn giới thiệu thuật toán và mô tả thuật toán
bằng cả hai cách liệt kê các bước và bằng sơ đồ khối. Điều này làm phức tạp hóa

vấn đề, gây quá tải cho học sinh dẫn đến việc tiếp thu kiến thức không sâu và
nhanh quên.
1.2. Thực trạng việc học nội dung “Từ bài toán đến chương trình”
Bài toán và thuật toán để giải quyết bài toán là những nội dung rất quan
trọng trong lập trình. Học sinh nắm vững được những kiến thức này thì sẽ dễ dàng
hơn rất nhiều trong việc tiếp thu kiến thức trong các bài sau.
Tuy nhiên, rất nhiều học sinh do lần đầu tiên được học lập trình nên trước
một bài toán các em tỏ ra lúng túng và rất khó khăn để tìm ra thuật toán hay còn gọi
cách giải một bài toán. Đa số các em còn rất bỡ ngỡ và cảm thấy xa lạ với môn học
lập trình và đặc biệt là việc tìm ra thuật toán ở các bài toán cụ thể.
Trong chương trình Tin học 8 các em bước đầu làm quen với lập trình bằng
ngôn ngữ Pascal. Nhưng việc nắm về kiến thức lập trình và đặc biệt là các thuật
toán được giới thiệu trong bài 5 còn rất yếu, nhiều học sinh không nắm được các
thuật toán hoặc nắm một cách máy móc nên rất dễ quên. Chính vì vậy dẫn đến
nhiều em không biết áp dụng các câu lệnh đã học để viết chương trình cụ thể trong
các bài tập ở những bài học sau.

2


2. Kết quả:
Rất ít học sinh tìm được các bước để giải một bài toán, nếu có tìm được các
em cũng không nhớ được lâu dẫn đến số lượng học sinh nắm thuật toán và mô tả
thuật toán còn thấp, làm cho kết quả môn học không cao. Qua khảo sát ở khối lớp 8
năm học 2013-2014 khi chưa áp dụng những giải pháp sau khi học xong bài 5, với
đề kiểm tra 15 phút câu hỏi như sau:
Câu 1: Hãy chỉ ra INPUT và OUTPUT của các bài toán sau:
a) Xác định số học sinh trong lớp cùng mang họ Trần
b) Tìm số các số có giá trị nhỏ nhất trong n số đã cho
Câu 2: Hãy mô tả thuật toán tìm số lớn nhất trong ba số a, b, c

Kết quả số học sinh chưa nắm được thuật toán rất nhiều trong đó có những học
sinh nắm thuật toán một cách máy móc chứ chưa hiểu bản chất của vấn đề cụ thể:
Lớp

Số HS

Nắm vững thuật toán

Chưa nắm vững thuật toán

SL

%

SL

%

8A

43

15

34.8

28

65.2


8B

38

12

31.5

26

68.5

Từ thực trạng trên để học sinh nắm vững được thuật toán và mô tả thuật toán,
mà cụ thể là những thuật toán trong bài 5 “Từ bài toán đến chương trình” Tin học 8
tôi sử dụng một số giải pháp và đã có kết quả.
III. GIẢI PHÁP VÀ TỔ CHỨC THỰC HIỆN:
Để học sinh có thể nắm được thuật toán và mô tả thuật toán thì việc đầu tiên
giáo viên cần quan tâm là làm sao học sinh xác định được bài toán. Để dẫn dắt đến
khái niệm xác định bài toán, giáo viên có thể dựa vào giả thiết và kết luận của một
bài toán trong môn Toán để dẫn dắt học sinh xác định Input, Output của bài toán
trong Tin học. Trong môn Toán, thường trước khi bắt đầu giải một bài toán các em
đã quen với việc tìm giả thiết và kết luận của bài toán. Trong Tin học, phần giả
thiết là các điều kiện cho trước (Input), phần kết luận là kết quả cần thu được
(Output).
Có thể sử dụng một bài toán đơn giản, quen thuộc với học sinh để học sinh
dễ dàng tìm ra được điều kiện cho trước (giả thiết) và kết quả cần thu được (kết
luận) của bài toán này (không nhất thiết cứ phải lấy ví dụ trong SGK).
Sau đó giáo viên dẫn dắt học sinh đến khái niệm thuật toán và mô tả thuật
toán. Bước đầu để học sinh nắm được thuật toán chính là các bước để giải một bài
toán. Việc mô tả thuật toán có thể bằng cách liệt kê các bước hoặc mô tả bằng sơ

đồ khối. Nhưng vì các em bước đầu mới làm quen với thuật toán và mô tả thuật
3


toán, giáo viên không nên giới thiệu về cách mô tả bằng sơ đồ khối. Mà nên lựa
chọn mô tả thuật toán bằng cách liệt kê các bước để tránh phức tạp vấn đề và phù
hợp với trình độ lứa tuổi của các em.
Về cơ bản mô tả thuật toán bằng cách liệt kê gần gũi với cách suy nghĩ của
học sinh THCS hơn. Việc so sánh, đối chiếu giữa thuật toán được mô tả bằng cách
liệt kê và chương trình tương ứng có thể dễ dàng hơn với học sinh. Chính vì vậy
lựa chọn các bài toán gần gũi, quen thuộc với học sinh là giải pháp đầu tiên mà tôi
đưa ra áp dụng.
Giải pháp 1: Chọn thuật toán của bài toán là một công việc, một nhiệm
vụ gắn liền với cuộc sống hàng ngày:
Khái niệm bài toán và giải bài toán đã trở thành quen thuộc với học sinh
trong các môn học khác như Toán, Vật lí,... Tuy nhiên giáo viên cần giới thiệu bài
toán trong Tin học không chỉ là những bài toán trong lĩnh vực toán học mà còn có
thể là một nhiệm vụ, một công việc cần giải quyết trong cuộc sống thực tiễn (nhiều
khi chẳng liên quan gì đến toán học) như: tính điểm trung bình một môn học một
học kì, nấu một món ăn hay điều khiển rô-bốt nhặt rác chẳng hạn.
Để cho học sinh mở rộng nhận thức về khái niệm bài toán mà các em được
biết ở môn học khác, giáo viên có thể sử dụng ví dụ về các bài toán là một công
việc, một nhiệm vụ gắn liền với cuộc sống hàng ngày. Do quen thuộc nên việc tìm
ra điều kiện cho trước, kết quả thu được của bài toán và mô tả thuật toán sẽ dễ
dàng hơn với học sinh.
Ví dụ 1: Bài toán “Làm món trứng tráng”
Với ví dụ này giáo viên yêu cầu học sinh tìm Input (điều kiện cho trước),
Output (kết quả cần thu được) của bài toán sau đó yêu cầu các em liệt kê các
bước để “Làm món trứng tráng”.
INPUT: Trứng, dầu ăn, muối và hành

OUTPUT: Trứng tráng
Mô tả thuật toán:
Bước 1: Đập trứng, tách vỏ và cho trứng vào bát
Bước 2: Cho một chút muối và hành tươi thái nhỏ vào bát trứng. Dùng đũa
quấy mạnh cho đến khi đều.
Bước 3: Cho một thìa dầu ăn vào chảo, đung nóng đều rồi đổ trứng đun tiếp
trong khoảng 1 phút
Bước 4: Lật mặt trên của miếng trứng úp xuống dưới. Đun tiếp trong khoảng
1 phút
Bước 5: Lấy trứng ra đĩa
Rõ ràng, bất kì ai hiểu biết một chút về làm bếp theo đúng trình tự và chỉ dẫn
ở các bước trong thuật toán nêu trên đều có thể tự làm cho mình món trứng tráng.
Đối với học sinh đó là những bước làm khá quen thuộc, giáo viên hướng dẫn cho
học sinh những thao thác các em thực hiện lần lượt để “Làm món trứng tráng” đó
chính là thuật toán của bài toán mà chúng ta cần phải mô tả.
4


Ví dụ 2: Bài toán “Pha trà mời khách”
INPUT: Trà, nước sôi, ấm và chén
OUTPUT: Chén trà đã pha mời khách
Mô tả thuật toán:
Bước 1: Tráng ấm, chén bằng nước sôi
Bước 2: Cho trà vào ấm
Bước 3: Rót nước sôi vào ấm và đợi khoảng 3 đến 4 phút
Bước 4: Rót trà ra chén để mời khách
Từ Ví dụ 1 và Ví dụ 2 ta thấy những bài toán trên có thuật toán gần gũi,
quen thuộc với học sinh. Nên các em có thể dễ dàng liệt kê các bước như trên và đó
chính là cách thường dùng để mô tả thuật toán.Từ đó sẽ giúp các em dễ hiểu hơn về
cách tìm ra thuật toán và mô tả thuật toán cho bài toán được yêu cầu.Qua đó giáo

viên giới thiệu thêm cho học sinh, nếu không có mô tả gì khác trong thuật toán, các
bước của thuật toán được thực hiện tuần tự như đã được chỉ ra. Mặc dù không được
nêu rõ trong khái niệm thuật toán, song thuật toán phải được mô tả cụ thể để bất kì
đối tượng nào, với cùng khả năng và điều kiện như nhau, khi thực hiện thuật toán
cũng đều đạt được kết quả như nhau.
Như vậy học sinh đã nắm được thuật toán chính là dãy hữu hạn các thao tác
cần thực hiện theo một trình tự xác định để thu được kết qủa cần thiết từ những
điều kiện cho trước. Từ việc học sinh nắm vững được khái niệm bài toán, thuật
toán sẽ hình thành cho các em kĩ năng xác định bài toán (tìm Input, Output) và mô
tả thuật toán (tìm cách giải bài toán và diễn tả bằng các lệnh cần phải thực hiện)
đơn giản bằng liệt kê các bước ở các bài toán cụ thể.
Giải pháp 2: Sử dụng hình ảnh trực quan hướng dẫn học sinh nắm
thuật toán và mô tả thuật toán:
Để học sinh có thể hiểu rõ về thuật toán và biết cách mô tả trước một bài
toán cụ thể giáo viên có thể sử dụng các hình ảnh trực quan giúp học sinh tìm ra
thuật toán dễ dàng hơn.
Ví dụ 3: Một hình A được ghép từ một hình chữ nhật với chiều rộng 2a
chiều dài b và một hình bán nguyệt bán kính a. Tính diện tích hình A
b
2a

A

5


Rõ ràng với bài toán cụ thể này học sinh sẽ lúng túng tìm ra thuật toán và mô
tả thuật toán nếu không có sự gợi ý của giáo viên.
Trước tiên giáo viên yêu cầu học sinh xác định Input, Output của bài toán như sau:
INPUT: a là bán kính của hình bán nguyệt, 2a là chiều rộng của hình chữ

nhật, b là chiều dài của hình chữ nhật.
OUTPUT: Diện tích hình A
Để các em có thể hình dung ra thuật toán của bài toán này, giáo viên chuẩn
bị một hình chữ nhật, một hình bán nguyệt được cắt bằng giấy màu dán lên bảng
cho học sinh quan sát:
b
2a

2a

Học sinh quan sát và dễ dàng nhận thấy diện tích của hình A chính là diện
tích của hình chữ nhật cộng với diện tích của hình bán nguyệt.
Như vậy học sinh sẽ biết ngay tính diện tích hình chữ nhật, diện tích hình
bán nguyệt (diện tích hình tròn chia 2) bằng công thức đã học ở Toán học và đó
chính là thuật toán của bài toán này. Cụ thể giáo viên có thể sử dụng kí hiệu phép
gán trong ngôn ngữ lập trình Pascal để hướng dẫn học sinh mô tả thuật toán cụ thể
sau đó đưa ra dạng tổng quát.
S1:= 2ab { tính diện tích hình chữ nhật}
S2:= ∏a2/2 { tính diện tích bán nguyệt}
S:=S1 + S2 { tính diện tích hình A}
Mô tả thuật toán:
Bước 1: S1 ← 2ab { tính diện tích hình chữ nhật}
Bước 2: S2← ∏a2/2 { tính diện tích bán nguyệt}
Bước 3: S← S1 + S2 và kết thúc
Lưu ý: Trong biểu diễn thuật toán người ta thường dùng kí hiệu ← để chỉ
phép gán giá trị của một biểu thức cho một biến. Giáo viên có thể giới thiệu từ
ngôn ngữ lập trình cụ thể Pascal rồi khái quát lên thành những kiến thức, kĩ năng
lập trình nói chung. Cách tiếp cận từ cụ thể đến khái quát sẽ phù hợp hơn với phần
lớn học sinh THCS.
Ví dụ 4 : Đổi giá trị của hai biến x và y

Đây là bài toán yêu cầu hoán đổi giá trị của hai biến x và y. Giáo viên sử
dụng thuật toán dùng một biến phụ z để tráo đổi hai giá trị của x và y. Tuy nhiên
học sinh sẽ rất khó tưởng tượng ra thuật toán này. Giáo viên có thể lấy ví dụ minh
hoạ trực quan như việc muốn tráo đổi giữa hai cốc nước.
Giả sử có hai cốc nước, một cốc nước chứa nước màu đỏ, một cốc nước chứa
nước màu xanh. Làm thế nào để tráo đổi nước giữa hai cốc nước này?
6


?

Đương nhiên học sinh sẽ trả lời được là phải dùng cốc thứ ba làm trung gian
để thực hiện điều này.
Cụ thể: Giáo viên chuẩn bị ba chiếc cốc như hình dưới, giả sử cốc X chứa
nước màu đỏ, cốc Y chứa nước màu xanh và cốc Z là cốc trung gian, không chứa gì
cả. Các em hãy quan sát và nêu cách tráo đổi nước chứa trong cốc X và cốc Y?
Với hình ảnh trực quan như vậy học sinh sẽ biết ngay các thao tác để tráo đổi
nước giữa hai cốc.
- Đổ nước đỏ trong cốc X sang cốc Z;
- Đổ nước xanh trong cốc Y sang cốc X;
- Đổ nước đỏ trong cốc Z sang cốc Y.

Z

1

X

2


3

Y

X

Y

Sau khi thực hiện như trên nước trong hai cốc đã được tráo sang nhau.
Như vậy học sinh dễ dàng nhận thấy việc tráo đổi giá trị của hai biến cũng
tương tự, trong chương trình phải sử dụng biến z làm biến trung gian để lưu giữ giá
trị ban đầu của biến x. Cụ thể giáo viên có thể sử dụng kí hiệu phép gán trong ngôn
7


ngữ lập trình Pascal để hướng dẫn học sinh mô tả thuật toán cụ thể sau đó đưa ra
dạng tổng quát.
z:=x; {Lưu giá trị của biến x vào biến z}
x:=y; {Giá trị của biến x được thay bằng giá trị của biến y}
y:=z; { Giá trị của biến y được thay bằng giá trị của biến z, giá trị của biến z
lúc này chính bằng giá trị của biết x ban đầu}
Đây chính là thuật toán tráo đổi giá trị của hai biến x và y và lúc này việc mô tả
thuật toán là dễ dàng với học sinh vì thuật toán tráo đổi đã được học sinh nắm rất rõ:
INPUT: Hai biến có giá trị tương ứng là a và b
OUTPUT: Hai biến có giá trị tương ứng là b và a
Mô tả thuật toán:
Bước 1: z ← x { Sau bước này giá trị của z sẽ bằng a}
Bước 2: x ← y { Sau bước này giá trị của x sẽ bằng b}
Bước 3: y ← z { Sau bước này giá trị của y sẽ bằng giá trị của z, chính là a,
giá trị ban đầu của biến x}

Ví dụ 5: Tìm số lớn trong dãy A các số a1, a2, …, an cho trước
Ý tưởng xây dựng thuật toán này là ta sẽ dùng biến MAX để lưu giá trị phần
tử lớn nhất của dãy A. Việc xác định MAX có thể được thực hiện như sau: Đầu tiên
gán giá trị a1 cho biến MAX. Tiếp theo, lần lượt so sánh các số a 2, …, an của dãy A
với MAX. Nếu ai > MAX, ta gán ai cho MAX.
Tuy nhiên học sinh sẽ rât khó hình dung ra thuật toán. Với bài toán cụ thể này
giáo viên cần chuẩn bị bốn quả bóng to nhỏ khác nhau. (Nếu không có bóng giáo
viên có thể chuẩn bị bằng các hộp giấy, hay sử dụng các cốc nước…có hình dáng to
nhỏ khác nhau để học sinh quan sát được) và được đánh số từ 1 đến 4 để minh họa.

1

2
3

4

- Trước hết, ta giả sử quả bóng lớn nhất là quả bóng số 1, tức là MAX=1.
- So sánh MAX (quả bóng số 1) với quả bóng số 2. Vì quả bóng số 2 nhỏ
hơn quả bóng số 1, do đó MAX vẫn bằng 1.
- Tiếp theo, so sánh MAX (quả bóng số 1) với quả bóng số 3. Vì quả bóng
số 3 lớn hơn quả bóng số 1, do đó MAX được đặt lại bằng 3 (quả bóng số 3).
- Cuối cùng so sánh MAX (quả bóng số 3) với quả bóng số 4. Quả bóng số 3
lớn hơn quả bóng số 4, do đó MAX vẫn bằng 3 (quả bóng thứ 3). Kết quả, quả
bóng lớn nhất là quả bóng thứ 3.
8


Như vậy, việc minh họa thuật toán trên với trường hợp tìm ra quả bóng lớn
nhất trong bốn quả bóng, bằng cách lần lượt so sánh các quả bóng từ 1 đến 4 với

nhau, giúp học sinh tiếp thu thuật toán rất nhanh, dễ nhớ.
Thuật toán được mô tả như sau:
INPUT: Dãy A các số a1, a2, …, an (n>=1)
OUTPUT: giá trị MAX=max{ a1, a2, …, an}
Mô tả thuật toán:
Bước 1: MAX ← a1; i ← 1.
Bước 2: i ← i+1.
Bước 3: Nếu i>n, chuyển đến bước 5.
Bước 4: Nếu ai > MAX, MAX ← ai . Quay lại bước 2.
Bước 5: Kết thúc thuật toán.
Rõ ràng với việc dùng những hình ảnh trực quan để minh họa thuật toán,
học sinh có thể tiếp thu thuật toán nhanh và ghi nhớ thuật toán cũng dễ dàng và
sâu sắc hơn.
Giải pháp 3: Mô phỏng thuật toán với một bộ dữ liệu cụ thể
Sau khi xây dựng thuật toán, người ta thường “thực hiện bằng tay” để thử
thuật toán với các bộ dữ liệu INPUT khác nhau. Sau mỗi lần “thực hiện”, kiểm tra
kết quả thu được với yêu cầu của đề bài xem có thỏa mãn không. Quá trình như vậy
được gọi là mô phỏng thuật toán. Để học sinh có thể hiểu và ghi nhớ sâu hơn thuật
toán của bài toán, giáo viên có thể chọn ra những thuật toán mà học sinh còn khó
hiểu, khó nhớ để mô phỏng lại với những bộ dữ liệu cụ thể.
Ví dụ 6: Tính tổng của 100 số tự nhiên đầu tiên
Ý tưởng của giải bài toán trên là dùng một biến SUM để lưu giá trị của tổng.
Việc tính SUM có thể được thực hiện như sau: Đầu tiên gán cho SUM giá trị bằng
0. Tiếp theo lần lượt thêm các giá trị 1, 2, 3,…, 100 vào SUM.
Với thuật toán này giáo viên mô phỏng bộ dữ liệu N=10 (10 số tự nhiên đầu
tiên) cho học sinh quan sát.
+ Mô phỏng thuật toán tính tổng N số tự nhiên đầu tiên, với N = 10 (trong
SGK, N= 100).
Bước
I

i≤ N

1
1
Đúng

2
2
Đúng

3
3
Đúng

4
4
Đúng

5
5
Đúng

6
6
Đúng

7
7
Đúng


8
8
Đúng

9
9
Đúng

10
10
Đúng

SUM
(Tổng)

1

3

6

10

15

21

28

36


45

55

11
Sai
Kết
thúc

Như vậy với việc mô phỏng bằng số liệu thực tế học sinh sẽ được củng cố
thêm về thuật toán vừa học.

9


Ví dụ 7: Tìm số lớn nhất trong dãy số N cho trước:
Ý tưởng của thuật toán này là ta sẽ dùng biến MAX để lưu giá trị phần tử lớn
nhất của dãy A.
Việc xác định MAX có thể được thực hiện như sau: Đầu tiên gán giá trị a 1
cho biến MAX. Tiếp theo, lần lượt so sánh các số a 2, …, an của dãy A với MAX.
Nếu ai > MAX, ta gán ai cho MAX.
Với thuật toán này giáo viên “thực hiện bằng tay” để thử bộ dữ liệu dãy số có
N=3 ta sẽ thực hiện thuật toán với ba số (3, 5, 7) rồi kiểm tra kết quả MAX nhận
được ở bước 5 có phải là số lớn nhất trong ba số không.
Bước

a

b


c

Số lớn nhất

1
2
3
4
5

3
3
3
3
3

5
5
5
5
5

7
7
7
7
7

3

5
7
7

Từ đó giáo viên có thể yêu cầu học sinh thực hiện với các bộ dữ liệu khác nhau:
Em hãy mô phỏng quá trình thực hiện thuật toán với các bộ dữ liệu thử khác
nhau (ví dụ: (3, 6, 10); (6, 3, 10); (10, 6, 3);…) bằng cách điền vào bảng dưới đây:
Bước

a

b

c

Số lớn nhất

1
2
3
4
5
Sau khi học sinh đã nắm vững được thuật toán tìm MAX giáo viên sẽ luyện
thêm cho các em bằng cách yêu cầu mô phỏng thuật toán tìm số lớn nhất với N lớn
hơn (có thể N=9 hoặc 10)
Lưu ý: Giáo viên nên chọn dãy số với N tối đa bằng 10 để học sinh kiểm tra
bằng tay cho dễ dàng tránh trường hợp làm phức tạp thêm vấn đề sẽ làm học sinh
lúng túng.
10



+ Mô phỏng thuật toán tìm số lớn nhất trong dãy số cho trước:
Dãy số
i
i>n

5
1
Sai

ai> MAX

MAX

5

3
2
Sai

4
3
Sai

7
4
Sai

6
5

Sai

3
6
Sai

15
7
Sai

9
8
Sai

11
9
Sai

Sai

Sai

Đúng

Sai

Sai

Đúng


Đúng

Đúng

5

5

7

7

7

15

15

15

10
Đúng

Như vậy với việc mô phỏng trực tiếp bằng bộ dữ liệu cụ thể không chỉ làm
cho học sinh được củng cố, hiểu rõ hơn về nội dung lí thuyết vừa học mà còn tạo
hứng thú, củng cố niềm tin cho học sinh để các em tự tin viết chương trình.
Tất cả các thuật toán nêu trên và trong phần câu hỏi và bài tập của Bài 5 đều
được sử dụng làm ví dụ minh họa hoặc để giải các câu hỏi và bài tập trong các bài
học sau. Do vậy việc rèn luyện kĩ với các ví dụ này và giải một số bài tập sẽ tạo
điều kiện thuận lợi để học sinh tiếp thu các nội dung trong các bài học tiếp theo.

IV. KIỂM NGHIỆM
Qua các năm giảng dạy thử nghiệm với các giải pháp đã nêu tôi thấy:
Hầu hết các em đã biết cách tìm ra thuật toán và mô tả thuật toán bằng cách
liệt kê các bước theo chuẩn kiến thức và kĩ năng.
Những thuật toán trong các bài toán ở bài 5 đều là những thuật toán cơ bản
đa số các em đã hiểu rõ bản chất và nắm rất vững cách giải các bài toán. Các em đã
biết vận dụng các câu lệnh rẽ nhánh, câu lệnh lặp để viết một chương trình hoàn
thiện và cho kết quả.
Năm học 2014-2015 tôi áp dụng các giải pháp trên. Sau khi học sinh học
xong bài 5 tôi đã khảo sát 15 phút với câu hỏi của năm học trước như sau:
Câu 1: Hãy chỉ ra INPUT và OUTPUT của các bài toán sau:
c) Xác định số học sinh trong lớp cùng mang họ Trần
d) Tìm số các số có giá trị nhỏ nhất trong n số đã cho
Câu 2: Hãy mô tả thuật toán tìm số lớn nhất trong ba số a, b, c
Tỉ lệ học sinh nắm vững thuật toán tăng lên nhiều so với năm trước, số học
sinh nắm chưa vững các thuật toán giới thiệu trong bài 5 giảm rõ rệt.
Cụ thể như sau:
Lớp

Số HS

8A
8B

34
33

Nắm vững thuật toán
SL
%

30
88.2
29
87.9

Chưa nắm vững thuật toán
SL
%
4
11.8
5
12.1

11


C. KẾT LUẬN VÀ ĐỀ XUẤT
1. Kết luận:
Mục tiêu của các giải pháp trên là rèn luyện kĩ năng xác định Input, Ouput và
mô tả thuật toán bằng cách liệt kê các bước cùng với việc giới thiệu thuật toán. Các
thuật toán này là những thuật toán cơ bản học sinh cần tiếp thu. Trong đó, thuật
toán tìm số lớn nhất của dãy số là thuật toán được yêu cầu cụ thể trong chuẩn kiến
thức kĩ năng. Hơn nữa, các thuật toán trên còn đề cập đến những thuật toán liên
quan đến các cấu trúc rẽ nhánh, cấu trúc lặp và một số bài toán ở các bài sau.
Sau khi áp dụng các giải pháp để giảng dạy trong bài 5 tôi nhận thấy:
Đa số học sinh đã hiểu và nắm rõ được khái niệm bài toán, thuật toán, biết cách
xác định bài toán và mô tả thuật toán bằng phương pháp liệt kê một cách thành thạo.
Học sinh được tiếp cận thuật toán với các bài toán cụ thể bằng việc quan sát
các hình ảnh trực quan không những các em tìm ra thuật toán dễ dàng mà còn nhớ
lâu về các thuật toán vừa được học ví dụ: nhắc đến thuật toán tráo đổi các em hình

dung ra cách tráo đổi hai cốc nước nhờ cốc trung gian thứ ba, hay thuật toán tìm giá
trị lớn nhất các em nhớ ngay đến xác định quả bóng lớn nhất…
Việc được mô phỏng thuật toán vừa học với các bộ dữ liệu khác nhau và
kiểm tra kết quả có đúng với yêu cầu của bài toán hay không, đã làm cho các em
một lần nữa được củng cố, hiểu rõ hơn về các thuật toán được học trong bài 5. Điều
này sẽ giúp tạo hứng thú, củng cố niềm tin, gắn kết tốt hơn giữa việc nắm vững
thuật toán và viết chương trình.
Do được rèn luyện kĩ với các thuật toán trong bài học và giải các bài tập liên
quan nên đa số học sinh tiếp thu các nội dung ở các bài sau rất tốt.
2. Đề xuất:
2.1. Đối với Bộ GD&ĐT:
Để học sinh có thể học tốt hơn môn lập trình đề nghị các cấp có liên quan
nên nghiên cứu các ví dụ về bài toán trong sách giáo chỉnh lí phù hợp hơn với trình
độ của học sinh lớp 8.
2.2. Đối với các nhà trường THCS:
- Mua bổ sung tài liệu về học tập môn lập trình Pascal cho các trường để các
em có điều kiện tham khảo.
Các giải pháp trên tôi đã áp dụng và đã cho hiệu quả rất khả quan, tuy nhiên
sáng kiến kinh nghiệm này vẫn không thể tránh khỏi những thiếu sót. Rất mong sự
góp ý của các đồng nghiệp để sáng kiến kinh nghiệm được hoàn chỉnh hơn.
XÁC NHẬN CỦA HIỆU TRƯỞNG Nga Sơn, ngày 15 tháng 04 năm 2015
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 viết
Mai Thị Thủy
12


13




×