Trong học kỳ I, bài số 4 – Bài toán và thuật toán là một bài khó dạy và học sinh khó có thể hiểu được các thuật toán mà sách giáo khoa (SGK) đã đưa ra.Với thời lượng là 6 tiết (5 tiết lý thuyết + 1 tiết bài tập), giáo viên rất khó để truyền tải được toàn bộ các thuật toán ở trong SGK. Vậy thì có thể bỏ bớt một vài thuật toán hay không? Tất nhiên là có thể, bởi vì bản thân người viết sách cũng không yêu cầu phải truyền đạt hết tất cả những gì có trong sách. Tuy nhiên, theo nhận định của cá nhân tôi thì những thuật toán mà người viết sách đưa ra là rất hay và có áp dụng vào học lập trình ở tin học 11, vấn đề còn lại là làm thế nào để học sinh có thể hiểu được các thuật toán này? Có lẽ là quý thầy cô sẽ có cùng ý kiến với tôi là: Hãy minh họa thuật toán với các ví dụ trực quan sinh động và thực tế hơn.
Trang 1I: ĐẶT VẤN ĐÊ
Kính thưa quý thầy cô giáo!
Nếu quý thầy cô đã và đang dạy bộ môn Tin học 10 thì hẳn thầy cô se
có nhận xét ngay rằng: Trong học kỳ I, bài số 4 – Bài toán và thuật toán là
một bài khó dạy và học sinh khó có thể hiểu được các thuật toán mà sáchgiáo khoa (SGK) đã đưa ra
Với thời lượng là 6 tiết (5 tiết lý thuyết + 1 tiết bài tập), giáo viên rấtkhó để truyền tải được toàn bộ các thuật toán ở trong SGK Vậy thì có thể
bỏ bớt một vài thuật toán hay không? Tất nhiên là có thể, bởi vì bản thânngười viết sách cũng không yêu cầu phải truyền đạt hết tất cả những gì cótrong sách Tuy nhiên, theo nhận định của cá nhân tôi thì những thuật toánmà người viết sách đưa ra là rất hay và có áp dụng vào học lập trình ở tinhọc 11, vấn đề còn lại là làm thế nào để học sinh có thể hiểu được các thuậttoán này? Có le là quý thầy cô se có cùng ý kiến với tôi là: Hãy minh họathuật toán với các ví dụ trực quan sinh động và thực tế hơn
Xuất phát từ thực tế giảng dạy và từ trong nội dung chương trình Tinhọc phổ thông Toàn bộ chương trình Tin học 11 đều nghiên cứu về lậptrình là kiến thức có liên quan mật thiết với các thuật toán Đó cũng chính
là lý do để tôi viết đề tài “Một số phương pháp giảng dạy thuật toán”.
Tôi rất mong được sự góp ý của quý thầy cô để đề tài ngày càng đượchoàn thiện hơn
Xin chân thành cảm ơn!
Trang 2Phần 2: NHỮNG BIỆN PHÁP GIẢI QUYẾT VẤN ĐÊ
I CƠ SỞ LÝ LUẬN CỦA VẤN ĐÊ:
Như ta đã biết Tin học là một bộ môn mới được đưa vào giảng dạychính thức trong nhà trường phổ thông năm học 2006-2007 Đối với các emhọc sinh, có thể nói đây là một “hành trang” để giúp các em vững bước đitới tương lai, như trong SGK tin hoc 10 có câu “Nếu không có hiểu biếtnhất định về tin học thì khó có thể hòa nhập vào cuộc sống hiện đại” Tuynhiên, với các em học sinh nói chung và các em học sinh ở vùng miền núinói riêng, việc tiếp cận với bộ môn Tin học còn nhiều hạn chế Một mặt dễhiểu đó là vì hầu hết các em chưa có điều kiện tiếp xúc với máy tính nhiều,cũng như lĩnh vực công nghệ thông tin vấn còn khá mới mẻ! Mặt khác ởđịa bàn huyện KBang hầu hết các học sinh tốt nghiệp THCS đều được vàothẳng lớp 10 – THPT mà không qua một khâu tuyển chọn đầu vào nào Vìvậy khả năng tư duy của các em trong các lớp cơ bản còn nhiều hạn chế
Do đó việc truyền tải các thuật toán trong SGK cho các em là một việckhông dễ
Xuất phát từ thực tiễn như vậy, tôi đã đưa ra một số phương pháp giúpcho việc truyền tải kiến thức tới các em một cách dễ dàng hơn:
- Sử dụng phương pháp thuyết trình kết hợp vấn đáp
- Đưa ra các ví dụ sát với thực tế như gọi 6 học sinh lên bảng đứnglàm mẫu khi cần biểu diễn thuật toán sắp xếp hay lấy 4 học sinhngồi bàn đầu để biểu diễn trong thuật toán tìm Max
- Sử dụng các tấm bìa cứng có ghi nội dung để mô phỏng ý tưởngcủa thuật toán
Trang 3II CÁC BIỆN PHÁP ĐÃ TIẾN HÀNH ĐỂ GIẢI QUYẾT VẤN ĐÊ:
1 BÀI TOÁN THỨ NHẤT: TÌM GIÁ TRỊ LỚN NHẤT CỦA MỘT DÃY SỐ NGUYÊN
a Xác định bài toán:
- Input: Số nguyên dương N và dãy N số nguyên a1, a2, , aN
- Output: Giá trị lớn nhất Max của dãy số.
b Ý tưởng của thuật toán:
- Theo ý tưởng của sách giáo khoa:
+ Khởi tạo giá trị Max=a1
+ Lần lượt với i từ 2 tới N, so sánh số hạng ai với Max, nếu Max<aithì Max nhận giá trị bằng ai
- Liên hệ thực tế: Lấy ví dụ một dãy bàn học đầu tiền gồm có 4 học sinhngồi, mỗi học sinh được gán cho một giá trị tương ứng với trọng lượng cơthể của học sinh đó Tìm học sinh có trọng lượng lớn nhất (Max)
(GV cắt một tấm bìa cứng và ghi lên tấm bìa chữ Max, HS nào mà Max đang mang giá trị của HS đó thì ghi giá trị cân nặng vào sau tấm bìa
và cầm tấm bìa đứng lên, 3 HS còn lại thì ngồi)
GV mô phỏng ý tưởng:
Qui ước thứ tự các học sinh ngồi trong bàn là 1, 2, 3, 4 tính từ trái qua.Đầu tiên đặt tấm bìa Max tại bạn học sinh ngồi vị trí số 1, ghi giá trị cânnặng của học sinh 1 vào mặt sau tấm bìa và nói học sinh đó cầm tấm bìađứng lên, sau đó ta so sánh giá trị Max hiện tại với giá trị bạn thứ 2, nếubạn thứ 2 có giá trị lớn hơn Max thì tấm bìa Max chuyển qua bạn bạn số 2,ghi lại giá trị mới và bạn số 2 cầm tấm bìa đứng lên, ngược lại thì vẫn giữnguyên giá trị và vị trí tấm bìa Max ở bạn số 1 Tiếp tục so sánh giá trị Maxhiện tại với giá trị của bạn số 3, nếu thấy Max lớn hơn thì giữ nguyên giá trịvà vị trí tấm bìa Max, còn nếu Max nhỏ hơn thì chuyển tấm bìa Max quabạn thứ 3, ghi lại giá trị mới và bạn thứ 3 cầm tấm bìa đứng lên Tiếp tụcnhư vậy ta so sánh giá trị Max với giá trị của bạn số 4, nếu thấy Max lớn
Trang 4hơn thì giữ nguyên giá trị và vị trí tấm bìa Max, còn nếu Max nhỏ hơn thìchuyển tấm bìa Max qua bạn thứ 4, ghi lại giá trị mới và bạn thứ 4 cầm tấmbìa đứng lên Sau khi so sánh với bạn số 4 xong thì đã so sánh hết, chúng takết thúc việc so sánh, bạn đang đứng và cầm tấm bìa Max chính là bạn cótrọng lượng lớn nhất cần tìm
c Ví dụ trên dãy số cụ thể:
Sử dụng 2 tấm bìa cứng có ghi sẵn nội dung như sau:
Tấm bìa được gắn cố định trên bảng, tấm bìa được giáo viên cầm trên tay
Giáo viên mô phỏng việc thực hiện thuật toán:
- Đầu tiên ta đặt tấm bìa Max tại vị trí a1:
- So sánh Max với a2 ta thấy Max>a2 nên ta giữ nguyên vị trí của Max
- So sánh Max với a3 ta thấy Max>a3 nên ta giữ nguyên vị trí của Max
- So sánh Max với a4 thấy Max<a4 ta di chuyển hình khối Max đến vị trí a4:
5 1 4 7 6 3
5 1 4 7 6 3
Ma x
Ma x
5 1 4 7 6 3
5 1 4 7 6 3
Ma x
Ma x
5 1 4 7 6 3
Ma x
5 1 4 7 6 3 Ma
x
Trang 5Sau khi so sánh với a6 thì đã hết dãy Cuới cùng ta thu được Max=a4(Max=7).
d Một số câu hỏi vấn đáp:
- GV: Đầu tiên Max nhận giá trị của phần tử thứ mấy trong dãy?
HS: Max đầu tiên nhận giá trị a1
- GV: Chúng ta đi so sánh Max lần lượt với các phần tử nào?
HS: Chúng ta so sánh Max hiện tại lần lượt với các phần tử từ thứ 2 cho
đến hết dãy
- GV: Nếu gặp trường hợp Max<ai thì chúng ta thực hiện thao tác gì?
HS: Nếu gặp Max<ai thì cập nhật lại Max (Max=ai)
e Mơ tả bằng liệt kê:
B1: Nhập N và dãy N sớ a1, a2, …, aN
B2: Maxa1, i2
B3: Nếu i>N thì đưa ra giá trị Max, kết thúc.
B4: Nếu Max<ai thì Max ai.
B5: ii+1, quay lại B3.
f Sơ đờ khối mơ tả thuật toán
Nhập N và dãy a1,
a2,…aNMaxa1, i2
MaxKết thúc
ii+1
Đ
ĐS
S
Trang 62 BÀI TOÁN THỨ HAI: SẮP XẾP DÃY SỐ THÀNH DÃY KHÔNG GIẢM:
a Xác định bài toán:
+ Input: Dãy A gồm N số nguyên a1, a2, …, aN.
+ Output: Dãy A là dãy tăng dần.
b Ý tưởng thuật toán:
- Ý tưởng sách giáo khoa: Với mỗi cặp số hạng đứng liền kề trong dãy nếusố trước lớn hơn số sau ta đổi chỗ chúng cho nhau Việc đó được lặp lại,cho đến khi không còn sự đổi chỗ nào xảy ra nữa
- Liên hệ thực tế: Gọi 6 em bất kỳ có chiều cao tương đối chênh lệc nhauđể mô phỏng ý tưởng thuật toán
Trong đó: Mỗi em mang một số tương ứng với chiều cao của em đó Tính
từ phải qua bạn thứ 1 mang giá trị 1.3m, bạn thứ 2 mang giá trị 1.6m, bạnthứ 3 mang giá trị 1.1m, bạn thứ 4 mang giá trị 1.4m, bạn thứ 5 mang giátrị 1.5m, bạn thứ 6 mang giá trị 1.2m
Giáo viên mô phỏng việc thực hiện thuật toán:
Lúc đầu 6 em đứng ngẫu nhiên như sau:
1.
3
1.
6 1.
2
Trang 7Lần duyệt thứ nhất (tính từ phải sang trái):
2
Trang 82
Trang 9
Lần duyệt 3:
Sau lần duyệt thứ 2 được bạn số
5, số 6 và số 1 đã đứng đúng vị
Trang 10
Lần duyệt 4:
Sau 4 vòng duyệt ta được một hàng theo đúng thứ tự như sau:
Bạn số 2 cao hơn bạn số 3 nênđổi chỗ, còn lại đã đúng vị trí
Trang 11c Ví dụ trên số cụ thể:
Ví dụ: Giã sử cho dãy A={6, 3, 5, 4, 2}.
Giáo viên trình chiếu bảng sau trên máy chiếu, với hiệu ứng xuất hiện từng bước để học sinh tiện theo dõi
Trong đĩ: N là sớ phần tử của dãy.
Sptcdsx là sớ phần tử cần được sắp xếp.
i là chỉ sớ.
d Một số câu hỏi vấn đáp:
- GV: Sớ phần tử cần được sắp xếp ban đầu là bao nhiêu?
HS: Sptcdsx ban đầu chính là N.
- GV: Khi sptcdsx còn lại bao nhiêu thì dừng thuật toán khơng duyệt nữa? HS: Khi sptcdsx còn lại ít hơn 2 phần tử thì dừng lại và đưa ra kết quả.
- GV: Chỉ sớ i ở mởi lần duyệt có giá trị chạy trong đoạn giá trị nào?
HS: Giá trị i trong mỗi lần duyệt chạy trong đoạn [1,sptcdsx].
- GV: Với mỗi giá trị của i Nếu ai>ai+1 thì thực hiện thao tác gì?
HS: Thực hiện thao tác đởi chỗ ai với ai+1
Trang 12- GV: Qua mợt lần duyệt sptcdsx tăng hay giảm bao nhiêu?
HS: Sau mỗi lần duyệt sptcdsx giảm ít nhất 1 phần tử.
- GV: Trong trường hợp xấu nhất, có nhiều nhất là mấy lần duyệt thì các
phần tử trong dãy đứng đúng vị trí?
HS: Nhiều nhất là N-1 lần duyệt thì các phần tử trong dãy đứng đúng vị
trí
e Mơ tả bằng liệt kê:
B1: Nhập N và dãy a1, a2, …, aN
B7: Nếu i < Sptcsx thì quay lại B5.
B8: SptcsxSptcsx-1 và quay lại B3.
f Mơ tả bằng sơ đờ khối:
Nhập N và dãy a1, a2,
…, aNSptcsxN
Sptcsx<2 đưa ra dãy A và kết
thúci1
Đ
ĐS
Trang 133 BÀI TOÁN THỨ BA: THUẬT TOÁN TÌM KIẾM TUẦN
TỰ
a Xác định bài toán:
- Input: Dãy A gồm N sớ hạng a1, a2, …, aN và khóa K
- Ouput: Chỉ sớ i mà ai=K hoặc thơng báo khơng tìm thấy khóa K
b Ý tưởng của thuật toán:
Tìm kiếm tuần tự được thực hiện mợt cách tự nhiên, lần lượt từ sớ hạngthứ nhất, ta so sánh sớ hạng đang xét với khóa cho đến khi hoặc gặp sớhạng bằng khóa hoặc dãy được xét hết và khơng có giá trị nào bằng khóa
c Sử dụng các tấm bìa giấy cứng cĩ ghi nội dung để mơ phong ý tưởng thuật toán:
10 tấm bìa ghi Dãy A: (Mợt mặt ghi kí hiệu ai, mặt kia ghi giá trị của
ai)
Mặt trước:
Mặt sau:
02 tấm bìa ghi Khóa K:
10 tấm bìa ghi nội dung dãy A được gắn úp mặt giá trị vào bảng sao cho
HS phía dưới khơng thấy được giá trị của a i , cịn tấm bìa ghi nội dung khĩa K thì được giáo viên cầm trên tay.
Gọi mợt học sinh lên bảng và đưa cho học sinh đó tấm bìa khóa K, yêucầu học sinh đi tìm mợt tấm bìa úp trên bảng có giá trị bằng K theo ý tưởngtìm kiếm tuần tự
- Với dãy A gồm N=10 phần tử như trên và K=2:
Học sinh lần lượt lật từng tấm bìa mợt theo trình tự từ trái qua phải và sosánh giá trị với khóa K Đầu tiên lật tấm bìa a1 ta thấy giá trị của K khác giátrị a1,
nên ta tiếp tục lật tiệp tấm bìa tiếp theo, tấm bìa a ta thấy K khác a,
K=2 K=6
a1= 5
a2= 7
a3= 1
a4= 4
a5= 2
a6= 9
a7= 8
a8=1 1
a9=2 5
a10=5 1
K=2
a1= 5
a2 a3 a4 a5 a6 a7 a8 a9 a10
a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
Trang 14nên tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a3 ta cũng thấy K khác a3,
tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a4 ta thấy K khác a4,
tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a5 ta thấy K=a5,
nên dừng công việc tìm kiếm và thông báo chỉ số cần tìm là i=5
- Với dãy A gồm N=10 phần tử như trên và K=6:
Học sinh lần lượt lật từng tấm bìa một theo trình tự từ trái qua phải và sosánh giá trị với khóa K Đầu tiên lật tấm bìa a1 ta thấy giá trị của K khác giátrị a1,
nên ta tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a2 ta thấy K khác a2,
nên tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a3 ta cũng thấy K khác a3,
K=2
a1 a2= 7
a2 a3 a4 a5 a6 a7 a8 a9 a10
K=6
a1 a2= 7
a3 a4 a5 a6 a7 a8 a9 a10
K=6
Trang 15tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a6 ta thấy K khác a6,
tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a7 ta thấy K khác a7,
tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a8 ta thấy K khác a8,
tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a9 ta thấy K khác a9,
tiếp tục lật tiếp tấm bìa tiếp theo, tấm bìa a10 ta thấy K khác a10,
tiếp tục lật tiếp tấm bìa tiếp theo, nhưng không còn tấm bìa nào chưa đượclật qua một lần, tức là đã hết dãy (i=11) Đưa ra kết luận “không tìm thấy sốhạng nào trong dãy bằng khóa K”
d Một số câu hỏi vấn đáp:
- GV: Chúng ta đi tìm kiếm giá trị ai trong dãy A theo cách nào?
HS: Tìm kiếm theo tuần tự bắt đầu từ phần tử đầu tiên của dãy.
- GV: Công việc tìm kiếm se kết thúc khi nào?
HS: Tìm kiếm se kết thúc khi tìm thấy ai=K hoặc khi đã tìm hết dãy
Trang 16- GV: Khi gặp trường hợp ai=K thì ta đưa ra thông báo gì và trường hợpkhi tìm hết dãy không có giá trị bằng K thi đưa ra thông báo gì?
HS: Gặp trường hợp ai=K thì đưa ra thông báo chỉ số i; gặp trường hợp
hết dãy thì đưa ra thông báo “Trong dãy không có giá trị nào bằng khóa”
- GV: Điều kiện để kiểm tra hết dãy hay chưa là gì?
HS: Điều kiện hết dãy là i>N, ngược lại thì chưa hết dãy.
e Mô tả bằng liệt kê:
B1: Nhập N và dãy a1, a2, …, aN và khoá K
Trang 174 BÀI TOÁN THỨ TƯ: THUẬT TOÁN TÌM KIẾM NHỊ
PHÂN
a Xác định bài toán:
- Input: Dãy A là dãy tăng gồm N sớ hạng a1, a2, …, aN và khóa K
- Ouput: Chỉ sớ i mà ai=K hoặc thơng báo khơng tìm thấy khóa K
b Ý tưởng của thuật toán:
Sử dụng tính chất dãy A là dãy tăng, ta chia đơi dãy thành hai dãy con, phạm vi tìm kiếm se được thu hẹp sau mỗi lần so sánh khóa với sớ hạng được chọn Ta chọn sớ hạng aGiua để so sánh với k, trong đó:
12
Khi đó, chỉ xảy ra mợt trong ba trường hợp sau:
- Nếu aGiua = k thì đưa ra Giua, rồi kết thúc.
- Nếu aGiua > k thì phạm vi tìm kiếm được thu hẹp lại trên nữa dãy đầu so
với dãy ban đầu.
- Nếu aGiua < k thì phạm vi tìm kiếm được thu hẹp lại trên nữa dãy sau so
với dãy ban đầu.
Quá trình trên se được lặp lại mợt sớ lần cho đến khi hoặc tìm thấykhóa k trong dãy A hoặc phạm vi tìm kiếm bằng rỗng
c) Liên hệ thực tế:
Giáo viên đưa ra mợt bài toán với học sinh như sau: Em hãy chọnmợt sớ nguyên dương trong phạm vi từ 1 đến 100 (giữ kín con sớ này) Emhãy trả lời các câu hỏi sau, thầy se đoán đúng sớ mà em đã chọn
(Giả sử học sinh chọn số 45, vậy khĩa tìm kiếm là K=45)
Câu hỏi 1: Sớ đó có lớn hơn 50 khơng? Học sinh trả lời khơng
Câu hỏi 2: Sớ đó có lớn hơn 25 khơng? Học sinh trả lời có
Câu hỏi 3: Sớ đó có lớn hơn 37 khơng? Học sinh trả lời có
Câu hỏi 4: Sớ đó có lớn hơn 43 khơng? Học sinh trả lời có
Trang 18Câu hỏi 5: Số đó có lớn hơn 46 không? Học sinh trả lời không.
Câu hỏi 6: Số đó có lớn hơn 44 không? Học sinh trả lời có
Câu hỏi 7: Số đó có lớn hơn 45 không? Học sinh trả lời không
Vậy số mà em lựa chọn là số 45
Tại sao thầy có thể đoán đúng chỉ sau 7 lần kiểm tra giá trị Khóa vớisố cần tìm? Là vì sau mỗi câu hỏi thầy đã thu hẹp phạm vi tìm kiếm các sốchỉ còn một nữa Sau câu hỏi thứ nhất phạm vi các số chỉ còn 50 số, saucâu hỏi thứ 2 phạm vi các số chỉ còn 25 số đến câu hỏi số 7 phạm vi cácsố chỉ còn duy nhất 1 số Do vậy chỉ cần so sánh với 7 số tương ứng trong
7 câu hỏi thầy đã đưa ra được con số các em đã lựa chọn mà không cầnkiểm tra hết 100 số Đó là ý tưởng của thuật toán tìm kiếm nhị phân
d Sử dụng các tấm bìa giấy cứng có ghi nội dung để mô phong ý tưởng thuật toán:
10 tấm bìa ghi Dãy A: (Một mặt ghi kí hiệu ai, mặt kia ghi giá trị của
ai)
Mặt trước:
Mặt sau:
02 tấm bìa ghi Khóa K:
10 tấm bìa ghi nội dung dãy A được gắn úp mặt giá trị vào bảng sao cho HS phía dưới không thấy được giá trị của a i , còn tấm bìa ghi nội dung khóa K thì được giáo viên cầm trên tay.
Gọi một học sinh lên bảng và đưa cho học sinh đó tấm bìa khóa K, yêucầu học sinh đi tìm một tấm bìa úp trên bảng có giá trị bằng K theo ý tưởngtìm kiếm nhị phân
a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 a 10
K=1
7 K=12