SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THPT NGUYỄN TRÃI
SÁNG KIẾN KINH NGHIỆM
MỘT SỐ KỸ NĂNG VẬN DỤNG THUẬT TOÁN ĐỂ GIẢI CÁC
BÀI TOÁN CƠ BẢN TRONG TIN HỌC 10
Người thực hiện: Lê Văn Hùng
Chức vụ: Giáo viên
SKKN thuộc lĩnh vực: Tin học
THANH HÓA, NĂM 2016
MỤC LỤC
A. MỞ ĐẦU
1. Lý do chọn đề tài
2. Mục đích nghiên cứu
3. Đối tượng nghiên cứu
4. Phương pháp nghiên cứu
B. NỘI DUNG
1. Cơ sở lí luận
2. Thực trạng của vấn đề trước khi áp dụng SKKN
3. Các giải pháp thực hiện
3.1. Các bước tiến hành
3.2. Các biện pháp để tổ chức thực hiện
a. Tìm hiểu và phân biệt "Bài toán" trong Tự nhiên và "Bài
1
1
sinh tại trường cũng còn nhiều hạn chế.
Các giáo viên trong quá trình giảng dạy đều hướng dẫn cho học sinh biết một
bài toán có thể được giải với nhiều cách (thuật toán) khác nhau và mỗi thuật toán
chỉ giải được một bài toán hoặc một lớp bài toán. Nhưng thực tế cho thấy đứng
trước một bài toán trong tin học học sinh thường lúng túng khi xác định thuật toán
hoặc không xác định được thuật toán. Từ đó dẫn đến khó khăn trong việc giải quyết
các bài toán, việc này cũng có thể do nhiều nguyên nhân, chẳng hạn do điều kiện
kinh tế gia đình chưa có máy vi tính để học, thực hành, vốn tiếng anh còn hạn chế,
1
một số phần trong chương trình của môn Tin học 10, 11 tương đối khó nên các em
chưa chú tâm, đầu tư học tập bộ môn…. Nên khi cho một bài toán tin học có dạng
tương tự một bài toán cơ bản có trong sách giáo khoa, thì các em học khá, giỏi có
thể hình dung và tìm được thuật toán cho bài toán, còn phần lớn các đối tượng học
sinh còn lại thì gặp khó khăn trong việc xác định thuật toán để giải quyết bài toán
đặt ra. Vì vậy việc vận dụng, hình thành kỹ năng xây dựng thuật toán là công việc
rất quan trọng để giải quyết các bài toán nói chung và trong tin học 10 nói riêng.
Đây là nội dung kiến thức có trong chương trình Tin học 10, liên hệ chặt chẽ và là
tiền đề để các em học tốt chương trình môn Tin học 11 và học lập trình sau này, vì
vậy việc giúp học sinh vận dụng và xây dựng được thuật toán để giải các bài toán
như thế nào để học sinh có sự đam mê, gây được hứng thú học tập là điều đáng
quan tâm, trăn trở và mặc dù có nhiều đề tài tương tự đề cập đến nhưng với tình
hình thực tế giảng dạy, chất lượng học sinh và cơ sở vật chất tại trường bản thân tôi
mạnh dạn lựa chọn đề tài “ Một số kỹ năng vận dụng thuật toán để giải các bài
toán cơ bản trong Tin học 10” với mong muốn có thể nâng cao chất lượng học tập
bộ môn Tin học trong nhà trường và cùng chia sẻ kinh nghiệm trong giảng dạy với
các đồng nghiệp đặc biệt là các đồng nghiệp ở những trường có điều kiện cơ sở vật
chất và chất lượng học sinh còn thấp.
2. Mục đích nghiên cứu
tình huống giải quyết bài toán trong tin học thì phần lớn học sinh thường lúng túng
và khó khăn trong việc tìm lời giải của bài toán từ đâu và bắt đầu như thế nào? điều
đó gây tâm lý chán nản, thiếu tự tin đối với môn học cho các em. Trên cơ sở đó để
giúp học sinh định hướng tốt trong quá trình vận dụng để lựa chọn và xây dựng
thuật toán thì thầy, cô giáo cần tạo cho học sinh thói quen tìm thuật toán cho bài
toán đặt ra từ các các bài toán cơ bản quen thuộc mà các em đã biết theo ngôn ngữ
tự nhiên hoặc các thuật toán tương tự đã có, khai thác các yếu tố đặc trưng của bài
toán để tìm thuật toán áp dụng cho các bài toán mới tương tự. Việc áp dụng thuật
toán của các bài toán để xây dựng thuật toán cho các bài toán tương tự là một quá
trình giúp học sinh rèn luyện kỹ năng xây dựng thuật toán để giải các bài toán trong
tin học 10, 11.
3. Các giải pháp thực hiện
3.1.
Các bước tiến hành
1. Lựa chọn và xây dựng hệ thống bài toán cơ bản, phù hợp để thực hiện và
rèn luyện kỹ năng xây dựng thuật toán thông qua các buổi học, mỗi buổi học nên
chọn một đến hai bài toán cơ bản để mở rộng và phát triển kỹ năng lựa chọn và xác
định thuật toán cho các bài toán khác.
3
2. Củng cố khái niệm Thuật toán và 2 phương pháp để diễn tả thuật toán đó là
Liệt kê và dùng Sơ đồ khối
Mỗi buổi học nên xây dựng hệ thống bài tập như sau:
- Trên cơ sở các nội dung trong SGK, lưa họn bài toán cơ bản hoặc bài toán
quen thuộc với học sinh để hướng dẫn học sinh lựa chọn và xác định thuật toán.
- Mở rộng bài toán tương tự vẫn giữ nguyên thuật toán ở của các ví dụ đã có
đến hai yếu tố: đưa vào máy thông tin gì (Input) và nhận được thông tin gì (Output).
Muốn máy tính làm được công việc này ta cần chỉ ra cho máy dãy các thao tác mà
máy có thể thực hiện được. Đó chính là thuật toán để giải bài toán.
“Thuật toán để 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 các thao tác ấy, từ
Input của bài toán ta nhận được Output cần tìm”.
Các tính chất của một thuật toán:
- Tính dừng
- Tính xác định
- Tính đúng đắn
Từ định nghĩa và tính chất của thuật toán ta thấy thuật toán có các đặc điểm:
- Dãy hữu hạn các thao tác;
- Sắp xếp có thứ tự;
- Từ Input cho ra Output.
Ví dụ: Đi học về để có cơm cho chúng ta ăn bố mẹ chúng ta phải làm những
công việc: Lấy gạo đem vo, cho vào nồi, đổ nước, cắm điện, bật công tắc... GV
(Giáo viên) có thể đặt ra câu hỏi? Trình tự các công việc này có thể thay đổi được
hay không?khi thay đổi có ảnh hướng gì đến các công việc còn lại? Với câu hỏi này
Hs sẽ khẳng định rằng thứ tự thự hiện các công việc trên là không thể thay đổi và
nếu thay đổi thì công việc thực hiện sẽ không hiệu quả hoặc không thể thực hiện
được. Từ đó GV nhấn mạnh tầm quan trọng của thuật toán đó là phải đảm bảo các
tính chất và có những đặc điểm như đã nêu.
GV cho Hs vận dụng để trả lời câu hỏi và bài tập số 2, SGK Tin học 10 Tr 44.
Dãy thao tác sau:
Bước 1: Xóa bảng;
Bước 2: Vẽ đường tròn;
Bước 3: Quay lại bước 1.
Có phải là thuật toán không? Tại sao?
5
6
TH1: Có nghiệm duy nhất khi a≠0.
TH2: Vô nghiệm khi a=0 và b≠0.
TH3: Vô số nghiệm khi a=0; b=0.
Từ đó GV đi đến hướng dẫn Hs diễn tả thuật toán của bài toán ứng với các
TH nêu trên.
Cách 1. Liệt kê các bước:
- Bước 1: Nhập vào 2 số a và b.
- Bước 2: Xét điều kiện a = 0 ?
- Đúng thì chuyển sang bước 3.
- Sai thì thông báo phương trình có nghiệm là x = - b/a và kết thúc;
- Bước 3: Xét điều kiện b = 0 ?
- Nếu b = 0, thì thông báo phương trình có vô số nghiệm và kết thúc;
- Nếu b ≠ 0, thì thông báo phương trình vô nghiệm và kết thúc;
Cách 2. Dùng sơ đồ khối:
Nhập a, b
S
a=0
?
Thông báo nghiệm
x=-b/a và kết thúc
Đ
S
toán học để giải như: đưa về hằng đẳng thức đáng nhớ, phân tích đa thức thành
nhân tử, tính delta.. nhưng ở dạng tổng quát thường các phương pháp trên Hs khó
áp dụng được ngoại trừ phương pháp tính delta.
Với ngôn ngữ toán học tự nhiên các em vừa học xong cấp 2 thì một phương
trình bậc 2 tổng quát với phương pháp tính delta học sinh có thể dễ dàng tìm ra
nghiệm của phương trình là một trong 3 trường hợp: Vô nghiệm hoặc có nghiệm
kép hoặc có 2 nghiệm phân biệt. Dựa vào tính chất này GV hướng dẫn học sinh
diễn tả thuật toán và nhấn mạnh thuật toán kết thúc khi 1 trong 3 trường hợp trên
xảy ra.
*. Phương pháp liệt kê:
- Bước 1: Nhập vào 3 hệ số a, b và c.
- Bước 2: Tính delta = b*b – 4*a*c.
- Bước 3: Xét điều kiện nếu delta < 0, thì thông báo phương trình vô nghiệm
và kết thúc.
- Bước 4: Nếu delta = 0, thì thông báo phương trình có nghiệm kép –b/(2*a)
và kết thúc.
8
- Bước 5: Ngược lại delta > 0, thì thông báo phương trình có hai nghiệm
phân biệt x1= (-b + sqrt(delta))/(2*a) và x2=(-b – sqrt(delta))/(2*a) và kết thúc.
*. Dùng sơ đồ khối như sau:
Nhập a, b, c (a≠ 0)
delta b2- 4ac
Đ
delta>
9
GV quay trở lại ví dụ Tìm giá trị lớn nhất của một dãy số nguyên SGK Tin
học 10 Trang 33 trong phần giới thiệu thuật toán (Trên màn chiếu) để học sinh quan
sát, tìm ra điểm giống và khác nhau của hai ví dụ này từ đó hình thành ý tưởng để
vận dụng xây dựng được thuật toán của bài toán. Với ví dụ này sau khi được quan
sát thuật toán tìm giá trị lớn nhất học sinh thường chủ quan rất dễ mắc sai lầm trong
việc áp dụng xây dựng thuật toán cho bài toàn tìm giá trị bé nhất vì cho rằng từ bài
toán tìm Max chỉ cần đổi các dấu lớn (>) thành dấu bé (
Ví dụ 4: Cho N và dãy số a 1,a2,…,an hãy sắp xếp dãy số đó thành dãy số
không tăng( Bài tập 6 SGK tin học 10 trang 44).
Bài toán sắp xếp là dạng bài toán rất phổ biến và quen thuộc trong cuộc sống
hàng ngày đặc biệt là lứa tuổi học sinh như: sắp xếp đội hình nghi thức thiếu nhi từ
11
thấp đếp cao, sắp xếp danh sách HS của lớp...theo một tiêu chí nào đó như tăng dần
hoặc giảm dần điểm trung bình chung các môn…
Đối với bài toán này yêu cầu sắp xếp dãy số theo thứ tự không tăng (giảm
dần) có nhiều ý tưởng khác nhau để diễn tả thuật toán này như sắp xếp chọn, sắp
xếp tuần tự, sắp xếp chèn…tuy nhiên để đa số HS có thể tiếp thu được nội dung
thuật toán GV cần cho Hs quan sát lại Ví dụ 2: Bài toán sắp xếp dãy tăng dần SGK
Tin học 10 trang 37 trên cơ sở đó hướng dẫn HS vận dụng xây dựng thuật toán sắp
xếp bằng tráo đổi hay gọi là sắp xếp nổi bọt (bubble sort) tương tự như Sgk.
Hs tìm ra sự khác biệt giữa 2 ví dụ này và mấu chốt của vấn đề để giải quyết
bài toán này, sẽ có nhiều HS nhầm lẫn hoặc chưa nắm kỹ thuật toán sửa các bước
thuật toán trên như ở bước 3 (M>2), bước 6 (iai+1 thành ai
dạng ( liệt kê các bước hay dùng sơ đồ) từ các bài toán tương tự.
- Yêu cầu học sinh mô phỏng thuật toán để hiểu rõ tính chất của thuật toán và
rút ra ưu điểm, nhược điểm của từng cách từ đó dần dần nhận ra tầm quan trọng của
việc lựa chọn hoặc thiết kế thuật toán để giải các bài toán trong Tin học 10 và 11.
4. Hiệu quả của SKKN đối với hoạt động giáo dục, với bản thân, đồng nghiệp
và nhà trường:
Trong quá trình giảng dạy tại trường THPT Hoằng Hóa 3 và hiện nay tại
Trường THPT Nguyễn Trãi những năm đầu dạy học theo phương pháp cũ là dạy lý
thuyết theo tài liệu sách giáo khoa đưa ra, sau đó cho học sinh thực hành kết quả thu
được của các lớp không đáp ứng được yêu cầu bài học và sự kỳ vọng của giáo viên
đa số học sinh không có hứng thú học vì cho rằng môn học khó quá, sau những băn
khoăn trăn trở cùng với việc tham khảo các tài liệu bộ môn đã có và ý kiến của
đồng nghiệp tôi đã có những ý tưởng như đã trình bày và áp dụng vào giảng dạy
trong những năm gần đây. Kết quả thu được cho thấy, đại đa số Hs các lớp đã hình
dung được các bước xây dựng thuật toán và tích cực phát biểu, có những ý tưởng
hay trong việc áp dụng để xây dựng thuật toán và khi được mô phỏng bằng những
giá trị cụ thể, được kiểm chứng bằng máy tính cầm tay các em thấy tự tin hơn với
những gì mình đã làm được và có hứng thú, say sưa với môn học hơn và kết quả
học tập được nâng lên rõ rệt. Điều đó cho thấy hiệu quả của cả quá trình rèn luyện
15
kỹ năng vận dụng thuật toán bằng việc mở rộng bài toán cơ bản tương tự. Thầy, cô
có thể áp dụng cách làm này với nhiều dạng bài tập khác nhau đặc biệt áp dụng đối
với đối tượng học sinh có học lực trung bình để thấy được hiệu quả.
Bên cạnh đó, những tiết dạy dự giờ, rút kinh nghiệm tôi được các đồng
nghiệp đóng góp nhiều ý kiến tích cực và chỉ ra những hạn chế tồn tại, tôi đã lắng
nghe chân thành và khắc phục sửa chữa để phương pháp ngày càng hoàn thiện hơn.
Với phạm vi chương trình và đối tượng nghiên cứu áp dụng đó là các em học
sinh có học lực trung bình nhằm mục đích giúp các em nắm các dạng bài cơ bản
năm
2016
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
Lê Văn Hùng
17
TÀI LIỆU THAM KHẢO
- Sách giáo khoa, sách giáo viên, sách bài tập Tin học 10 và 11.
- Cấu trúc và giải thuật tác giả Đỗ Xuân Lôi.
- Các tài liệu lập trình của các trường Đại học.
- Các SKKN bộ môn của các đồng nghiệp.
- Một số trang web để tìm kiếm tài liệu.
18