Trong phạm vi đề tài này tôi xin phép được trình bày đề tài: SỬ DỤNG CẤU TRÚC LẶP BIỂU MỘT SỐ THUẬT TOÁN BẰNG SƠ ĐỒ KHỐI “BÀI 4: BÀI TOÁN VÀ THUẬT TOÁN” TIN HỌC 10 Mong các thầy cô góp
Trang 11 MỞ ĐẦU
1.1 Lí do chọn đề tài.
Từ năm học 2022-2023 thực hiện hiện chương trình giáo dục phổ thông 2018, chương trình Tin học 10 sẽ có những thay đổi để phù hợp với yêu cầu mới Nhưng thiết nghĩ nội dung kiến thức bài 4 “Bài toán và thuật toán” của sách giáo khoa (SGK) hiện hành cũng rất cần thiết Nội dung bài 4 “Bài toán và thuật toán” có nhiều nội dung phức tạp nên ban đầu nhiều học sinh vẫn còn khó khăn trong tiếp nhận kiến thức Biểu diễn thuật toán bằng phương pháp liệt kê hay sơ đồ khối đều
có thể giải quyết bằng cách sử dụng các cấu trúc tuần tự, rẽ nhánh và cấu trúc lặp Những bài toán đơn giản, ít bước có thể chỉ cần cấu trúc tuần tự, rẽ nhánh nhưng chủ yếu các bài toán đều phải sử dụng thêm cả cấu trúc lặp
Sơ đồ khối là một công cụ trực quan để diễn đạt thuật toán, biểu diễn thuật toán bằng sơ đồ khối sẽ giúp người đọc theo dõi được sự phân cấp các trường hợp, quá trình xử lý của thuật toán Trong rất nhiều các tài liệu để biểu diễn quy trình làm việc hay bài toán nào đó, có rất nhiều lần ta thường gặp cách biểu diễn bằng sơ
đồ khối Hay trong chương trình Tin học 11, phần hoạt động các câu lệnh điều khiển chúng ta thường thấy mô tả hoạt động bằng sơ đồ khối … Điều đó chứng tỏ rằng nếu học sinh nắm chắc được kiến thức biểu diễn thuật toán bằng sơ đồ khối không những giúp các em biểu diễn thuật toán bằng phương pháp sơ đồ khối hiệu quả mà còn giúp các em đọc được nhiều tài liệu hơn
Số lượng các ví dụ mẫu, bài tập trong sách giáo khoa (SGK) còn hạn chế, nhiều thuật toán phức tạp trong khi các em phải đầu tư nhiều thời gian vào các môn học khác nên không có nhiều thời gian để tìm tòi, tìm hiểu thêm trong các tài liệu khác Vậy làm sao để thu hút các em được trong bài giảng, giúp các em tiếp cận đơn giản, rõ ràng mạch lạc hơn
Để có thêm các bài tập luyện viết thuật toán, bổ trợ cho các thuật toán trong SGK, trong quá trình dạy trên lớp tôi có soạn thêm một số bài tập và dần chọn lọc
ra để giao thêm cho các em về nhà làm và nghiên cứu thêm Các bài tập này đi sâu vào cấu trúc lặp của thuật toán để các hiểu rõ hơn về lặp tại bước nào, có những câu lệnh nào lặp Trong phạm vi đề tài này tôi xin phép được trình bày đề tài:
SỬ DỤNG CẤU TRÚC LẶP BIỂU MỘT SỐ THUẬT TOÁN BẰNG SƠ ĐỒ
KHỐI “BÀI 4: BÀI TOÁN VÀ THUẬT TOÁN” TIN HỌC 10
Mong các thầy cô góp ý để đề tài tôi được hoàn thiện hơn và đưa vào thực tiễn được hiệu quả hơn
Trong phạm vi sáng kiến kinh nghệm (SKKN) này tôi có sắp xếp các bài tập theo các mức độ tăng dần và chia làm 2 mức độ: Vận dụng cơ bản và vận dụng cao mức độ khá và khá giỏi Trong đó:
Vận dụng cơ bản: Là các bài toán cơ bản thường gặp, có các phép toán số học, quan hệ nhằm làm rõ câu lệnh lặp
Trang 2Vận dụng cao: Là các thuật toán cơ bản trong tin học, cần thêm tư duy và biểu diễn thuật toán mức độ khá, giỏi, có nhiều câu lệnh lặp và cấu trúc lặp
1.2 Mục đích nghiên cứu.
Tập hợp một số bài toán cơ bản để làm rõ cấu trúc lặp phù hợp với học sinh khi học bài 4 “Bài toán và thuật toán” tin học 10
Củng cố thêm kiến thức của bài 4: khái niệm thuật toán, tính chất thuật toán, cấu trúc câu lệnh điều khiển để bổ trợ các bài toán trong SGK
Tạo động lực cho các em học sinh hiểu biết, vận dụng và yêu thích kiến thức bộ môn tin học, tự tin trong khi học và làm bài, đồng thời thôi thúc học sinh tự sáng tạo, tìm
ra những thuật toán hay, giải quyết triệt để bài toán.
1.3 Đối tượng nghiên cứu.
Cấu trúc lặp trong một số bài toán cơ bản bổ trợ bài 4 “Bài toán và thuật toán” tin học 10
1.4 Phương pháp nghiên cứu.
Vận dụng kiến thức tổng hợp để xác định và biểu diễn thuật toán
Tổng hợp, thu thập ý kiến phản hồi của giáo viên, học sinh sau khi học bài
Thống kê, tổng hợp, so sánh kết quả học sinh
2 NỘI DUNG SÁNG KIẾN KINH NGHIỆM
2.1 Cơ sở lí luận của sáng kiến kinh nghiệm
2.1.1 Khái niệm thuật toán
Thuật toán để giải một bài toán là:
- Dãy hữu hạn các thao tác
- Được sắp xếp theo một trình tự nhất định
- Thu được output từ input của bài toán
2.1.2 Tính chất thuật toán
- Tính dừng: Thuật toán phải kết thúc sau một số hữu hạn lần thực hiện các thao tác
- Tính xác định: Sau khi thực hiện một số thao tác thì hoặc là thuật toán kết thúc hoặc là có đúng một thao tác xác định để được thực hiện tiếp theo
- Tính đúng đắn: Sau khi thuật toán kết thúc, ta phải nhận được output cần tìm
2.1.3 Biểu diễn thuật toán
Thuật toán biểu diễn bằng sơ đồ khối, người ta dùng một số khối, đường có mũi tên với:
- Hình ô van:
Thể hiện các thao tác nhập/ xuất dữ thường là điểm khởi đầu hoặc kết thúc thuật toán
Ví dụ: Nhập a,b,c
Trang 3- Hình chữ nhật:
Thể hiện các thao tác tính toán
Ví dụ: Tăng i lên 1 đơn vị
+ Hình thoi:
Thể hiện các thao tác so sánh
Ví dụ:
+ Mũi tên:
Thể hiện trình tự thực hiện các thao tác
Chú ý:
Trong biểu diễn thuật toán ngoài các phép toán thông thường: +, -, x, :, div, mod được sử dụng bình thường như trong toán học Ngoài ra ký hiệu mũi tên ← trong thuật toán trên được hiểu là gán giá trị của biểu thức bên phải cho biến ở bên trái mũi tên Ví dụ: i ← i + 1 được hiểu là đặt cho biến giá trị mới bằng giá trị trước đó tăng thêm 1 đơn vị
2.1.4 Cấu trúc điều khiển
- Cấu trúc tuần tự:
Ví dụ:
Hai bước liên tiếp nhau được nối bằng một đường mũi tên, thứ tự thực hiện lần lượt là bước là bước 1, bước 2
- Cấu trúc rẽ nhánh:
Khi thực hiện các thao tác so sánh (kiểm tra điều kiện): là kết quả của phép toán quan hệ cho kết quả “đúng” hoặc “sai” tương ứng 2 mũi ra, một ứng với kết quả so sánh là đúng, trường hợp còn lại ứng với kết quả so sánh sai
Ví dụ:
-Cấu trúc lặp:
Kiểm tra điều kiện, nếu điều kiện đúng thì thực hiện các phép toán, sau đó lại quay lại kiểm tra điều kiện, nếu điều kiện đúng lại tiếp tục thực hiện các phép toán Quá trình này lặp lại cho đến khi điều kiện sai thi thoát khỏi lặp lặp
Ví dụ:
Đ
i ← i+1
Có 2 nghiệm phân biệt x1, x2
PT có nghiệm kép x1=x2
PT vô nghiệm
S
S Đ
D>0
Bước 1 Bước 2
Trang 4Khi mô tả về cấu trúc lặp giáo viên mô tả cụ thể hơn về:
+ Điều kiện để lặp
+ Khi nào thì kết thúc việc lặp
+ Câu lệnh nào sẽ thực hiện lặp, viết biểu thức đó
Ví dụ: Bài toán tính tổng các số chẵn nhỏ hơn 100
Xác định đây là bài toán lặp đi lặp lại việc tính tổng S
+ Câu lệnh lặp: S ← S+i;
+ Điều kiện lặp: i chia hết cho 2
+ Điều kiện kết thúc vòng lặp: i lớn hơn 100
2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm.
- Thực tế Tin học là môn học không nằm trong chương trình thi Tốt nghiệp THPT, cũng không nằm trong tổ hợp xét tuyển Đại học, cao đẳng nào nên đa số học sinh không đầu tư nhiều thời gian cho học bộ môn này Việc học tập của học sinh phụ thuộc khá nhiều vào khả năng thu hút của giáo viên giảng dạy và mục tiêu học Tin học của học sinh
- Khi tiến hành dạy bài 4 “Bài toán và thuật toán” mặc dù đã hướng dẫn rất chi tiết cho học sinh về khái niệm, tính chất của thuật toán, biểu diễn thuật toán nhưng khi vận dụng vào các bài tập cụ thể thì các em gặp rất nhiều khó khăn mà nguyên nhân chủ yếu các em không ôn bài và làm bài tập ở nhà Về mặt toán học thì các em giải bình thường nhưng không biểu diễn được thuật toán, đặc biệt với phương pháp sơ
đồ khối Một số lỗi khi các em biểu diễn như:
+ Thuật toán không kết thúc: HS chưa xác định được điều kiện dừng thuật toán
Ví dụ:
+ Chưa xác định được câu lệnh nào sẽ lặp, khi nào sẽ kết thúc việc lặp
+ Sự sắp xếp các bước không đúng trình tự:
Ví dụ: trong bài toán nên đặt du ← N mod 10 trước hay N ← n div 10 trước
Đ ĐK
S
Các phép toán
In ra S và kết thúc
Trang 5+ Không có kết quả output
+ Điểm vào và điểm ra của mỗi bước trong thuật toán đặt không đúng trí …
- Khi dạy sang chương trình Tin học 11, với một số bài toán đơn giản yêu cầu các
em nêu ý tưởng rồi biểu diễn thuật toán bằng phương pháp sơ đồ khối nhưng rất nhiều em không nhớ cách biểu diễn
2.3 Các giải pháp đã sử dụng để giải quyết vấn đề.
2.3.1 Bài tập vận dụng cơ bản
Đây là nhóm bài tập chỉ thực hiện các thao tác nhập/ xuất dữ liệu, thực hiện một số thao tác tính toán, có sử dụng cấu trúc lặp đơn giản để học sinh xác định được câu lệnh nào lặp, cấu trúc nào lặp
Mục tiêu:
- Kiến thức: HS xác định được câu lệnh nào lặp
- Kỹ năng: Biết sử dụng các khối hình để mô tả được câu lệnh lặp
- Thái độ: Học sinh thích thú, tham gia nhiệt tình vào bài học Không chủ quan khi
thực hiện các thao tác
Một số bài tập minh hoạ:
Viết thuật toán giải các bài toán sau:
Bài 1.1: Tính tổng S = 1 + 2 + 3 + 4 + 5 + … + 100
Bài 1.2: Tính tổng S = 1 + 2 + 3 + 4 + 5 + … + n
Bài 1.3: Tính tổng S = 2022 + 1 + 1/3 + 1/5 + 1/7 + … + 1/(2n +1)
Bài 1.4: Tính tổng S = 1+ 1/2! + 1/3! + 1/4! + 1/5! + … + 1/n!
Trong đó: n! = 1*2*3*4*5* … * (n -1) * n
Bài 1.5: 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, hỏi mỗi loại có mấy con”.
Bài 1.6: Cho số nguyên dương N (10 < N <109 ) Tìm số đảo ngược của N Ví dụ:
- Số 2015 có số đảo ngược là 5102
- Số 1986 có số đảo ngược là 6891
Bài 1.7: Tìm ước chung lớn nhất, bội chung nhỏ nhất của 2 số nguyên dương m, n được
nhập vào từ bàn phím
Thuật toán đề xuất:
HS nắm một số nội dung:
- Giá trị ban đầu (tổng S ban đầu) trước khi thực hiện lặp GV lấy ví dụ để giải thích tại
sao phải gán giá trị ban đầu cho các biến.
Trang 6- Giá trị tăng thêm sau mỗi lần thực hiện lặp
- Điều kiện kết thúc vòng lặp.
- Số lần thực hiên lặp
- Câu lệnh được lặp
Bài 1.1 Tính tổng S = 1 + 2 + 3 + 4 + 5 + … + 100
Giáo viên cần làm rõ:
- Giá trị ban đầu của tổng S: S = 0, khi đó biến điều khiển vòng lặp chạy từ 1 Thường
các bài toán tính tổng cho S ban đầu bằng 0, nhưng có thể cho S ban đầu bằng 1 thì sau này phép lặp điều chỉnh chạy từ 2 Tuỳ từng bài toán, ví dụ bài 1.3 thì S ban đầu gán bằng 2022.
- Giá trị tăng thêm sau mỗi lần tính tổng là: i (i chạy từ 1 đến 100) Rất nhiều HS nhầm
tưởng giá trị tăng thêm ở đây là 1 GV phân tích:
S = 0
S = 1
S = 1 + 2
S = 1 + 2 + 3
S = 1 + 2 + 3 + 4
S = 1 + 2 + 3 + 4 + 5
S = 1 + 2 + 3 + 4 + 5 + … + 100
- Rút ra công thức để tính: S bằng S nhận giá trị trước đó cộng với giá trị tăng thêm
sau mỗi lần tính tổng S ← S + i
- Điều kiện kết thúc lặp: i tăng đến 100 thì kết thúc
- Số lần lặp: 100 lần
Đến cấu trúc lặp GV có thể hướng dẫn HS 2 cách:
+ Kiểm tra điều kiện i ≤ 100 trước rồi tính tổng sau (như dạng lặp for, while – do sau này)
+ Tính tổng trước, sau đó kiểm tra điều kiện sau (lặp repeat – until sau này)
Đ
S
i ≤ 100
Bắt đầu
S ← 0; i ← 0
i ← i + 1
S ← S + i
In ra S và kết thúc Đ
Trang 7Với mỗi một dạng GV đưa ra tình huống để HS thay đổi giá trị gán của S, i ban đầu và sắp xếp các câu lệnh i ← i + 1 lên trước hay S ← S +1 lên trước
Lỗi sai với một số HS khi mới làm những bài toán này gồm:
+ Gán i ← 1 và tăng i lên 1 luôn Như vậy khi tính tổng bỏ qua tính giá trị 1
+ Vòng lặp đặt sai vị trí Chỉ gán giá trị S và i nhận giá trị ban đầu một lần, vòng lặp chỉ thực hiện với i tăng lên 1, kiểm tra i với 100, nếu thoã mãn i thì tính tổng S
Bài 1.2 Tính tổng S = 1 + 2 + 3 + 4 + 5 + … + n
Tương tự như bài 1.1, lưu ý:
- Nhập thêm giá trị nguyên dương n
- Điều kiện kết thúc vòng lặp: i > n
- Số lần thực hiện lặp: n lần
Bài 1.3: Tương tự như bài 1.1, lưu ý:
+ Gán giá trị ban đầu S=2022
+ Giá trị tăng thêm sau mỗi lần tính tổng: 1/(2*i+1)
+ Điều kiện kết thúc vòng lặp: i > n
+ Công thức tính tổng S ← S + 1/(2*i+1)
Bài 1.4: Tính tổng S = 1+ 1/2! + 1/3! + 1/4! + 1/5! + … + 1/n!
- Hướng dẫn HS tính n! và đặt nó trong vòng lặp: gọi giá trị n! là gt, ta có công thức tính của n! là gt ← gt *i, trong đó i là biến điều khiển mỗi lần tăng lên 1.giá trị ban đầu của gt là 1 (thường gán tổng ban đầu bằng 0, tích ban đầu là 1)
- Các thao tác thực bài toán như bài 1.2:
Với i tăng lên 1 đơn vị thì kiểm tra điều kiện với n, nếu đúng thì tiếp tục tính
gt và tính S Nếu trường hợp sai thì in ra S và kết thúc Như vậy:
+ Điều kiện để kết thúc vòng lặp là i>n
+ Số lần lặp n lần
S Đ
Nhập N
S ← 0; i ← 0; gt ← 1
i ← i + 1
thúc
gt ← gt * i
S ← S + 1/gt
Trang 8+ Câu lệnh lặp: gt ← gt * i và S ← S + 1/gt
Bài 1.5: 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, hỏi mỗi loại có mấy con”.
- HS thường lập hệ để giải như các lớp dưới các em đã học sau rồi trình bày thuật toán mà không viết thuật toán giải hệ phương trình bậc nhất 2 ẩn
- Định hướng HS: giới hạn số chó tối đa (hoặc số gà tối đa) Chọn số chó tối đa để
số lượng phép toán ít (trong khái niệm thuật toán tối ưu bài 6 sách giáo khoa: Các bước giải một toán các em sẽ học) Thử với từng giá trị của chó, sau đó tính số gà tương ứng và số chân tương ứng Nếu thoã mãn in kết quả ra
Giáo viên có thể tăng mức độ phức tạp của bài toán này thông qua bài toán cổ: “Trăm trâu trăm cỏ, trâu đứng ăn năm, trâu nằm ăn ba, lọm khọm trâu già, ba con ăn một Hỏi mỗi loại mấy trâu”
Bài 1.6:
Ý tưởng: Tính tổng các số là ước của số nguyên dương N nhập vào từ bàn phím, gọi tổng đó là S So sánh S với N, nếu S=N thì N là số hoàn hảo, ngược lại N không phải là số hoàn hảo
Muốn tính tổng các số là ước của N, thường HS cho biến điều khiển i chạy từ
1 đến n-1 Để tối ưu bài toán định hướng HS cho biến i chạy từ 1 đến n div 2 Từ
S
Đ
Start
Cho <
25
Cho ← 0
Cho ← cho +1
4*cho+2*(36-cho)
=100 ga←36-cho
In ra cho, ga
end S
Đ
Trang 9những bài toán nhỏ GV định hướng để HS hiểu và áp dụng cho các bài toán lớn hơn về tối ưu phép toán
Bài 1.7:
Đây là bài toán quen thuộc với HS lớp 10, nhưng để biểu diễn thành thuật toán qua nhiều lớp tôi thấy cũng rất ít HS làm tốt Một số sai sót khi các em làm bài này:
+ Sử dụng phép lặp N div 10 nhưng không lặp phép toán N mod 10, và tạo giá trị
số đảo ngược ←dao*10+du
+ Không gán giá trị ban đầu cho biến dao
+ Không lưu kết quả của phép toán N mod 10 là du và dao*10+du là dao
+ Việc sắp xếp vị trí của các phép toán gồm: du ← du mod 10;
dao ← dao*10 + du; N ← N div 10 chưa hợp lý
Trong bài toán này cần lưu ý HS: Khi kiểm tra N=0 thì nếu đúng thuật toán sẽ
in ra số dao và kết thúc (lặp cho đến khi N không còn chữ số nào) Các câu lệnh lặp thực hiện lần lượt khi kiểm tra điều kiện với N
Trên đây là các bài toán chủ yếu tập trung vào lặp với số lần lặp biết trước Kết quả:
- 100% HS xác định đúng yêu cầu thuật toán
- Nhiều học sinh tiếp nhận đúng yêu cầu và bắt tay ngay vào việc viết thuật toán
- Hầu hết HS làm được bài, còn một số ít chưa tự tin trong tiếp nhận bài toán nên làm chậm, chờ đợi thầy cô và bạn làm
Nhập N
N=0 dao ← 0
du←N mod 10 dao←dao*10+du N←N div 10
In ra dao và
kết thúc S
Đ
Trang 10- Nhiều HS hăng hái, tự tin trình bày, trao đổi ý kiến, quan điểm của cá nhân trong bài toán
- 100 % HS hiểu bài và làm lại được bài sau khi GV đã sửa
Bài 1.8: Tìm ước chung lớn nhất, bội chung nhỏ nhất của 2 số nguyên dương m, n được
nhập vào từ bàn phím
Là bài toán lặp với số lần lặp chưa biết trước, thuật toán tìm ước chung lớn nhất của 2 số nguyên dương m, n đã có trong bài 6 SGK
Trước khi tìm thuật toán GV có thể định hướng học sinh tìm ước chung lớn nhất bằng phương pháp Eler như trong SGK bài 6 trình bầy bằng việc lấy 2 số nguyên dương bất kỳ
Khi tìm BCNN cần lưu ý HS lưu giá trị m, n ban đầu để sau sử dụng giá trị m,
n vì m,n trong quá trình tìm UCLN bị thay đổi
2.3.2 Bài tập vận dụng cao
Đây là nhóm bài tập mức độ khá, giỏi yêu cầu: xác định đúng yêu cầu bài toán, xây dựng được ý tưởng giải quyết, lựa chọn được thuật toán tối ưu Sử dụng linh hoạt các cấu trúc điều khiển để mô tả thuật toán
Mục tiêu:
- Kiến thức: Xác định, đánh giá, phân tích đúng yêu cầu và mức độ bài toán Lựa
chọn được thuật toán phù hợp Nâng cao năng lực tư duy về các cấu trúc điều khiển trong tin học
- Kỹ năng:
+ Sử dụng linh hoạt các khối hình để biểu diễn thuật toán
+ Sử dụng linh hoạt cấu trúc rẽ nhánh, cấu trúc lặp
- Thái độ: Học sinh thích thú, tham gia nhiệt tình vào bài học Không chủ quan, ỷ
lại Chủ động khám phá thêm cách giải mới
Một số bài tập minh hoạ - Trích đề thi chọn HSG trường THPT Hậu Lộc I các năm 2021-2022:
Viết thuật toán giải các bài toán sau:
Bài 2.1:
Khi học về các hệ đếm, Tôm thực hiện chuyển đổi hệ thập phân sang hệ nhị phân bằng cách chia số đó liên tiếp cho 2, khi nào thương bằng 0 thì dừng lại, mã nhị phân tương ứng được viết theo chiều ngược lại của các số dư
Ví dụ cho N=120 10 Biểu diễn N dạng nhị phân tương ứng: 120 10 =111000 2 Nhưng khi biểu diễn bằng thuật toán thì Tôm loay hoay mãi vẫn chưa làm xong.
Là học sinh tham gia thi chọn học sinh giỏi tin học, em hãy giúp Tôm nhé Cụ thể bài toán như sau: Cho số nguyên dương N ở dạng số thập phân, viết thuật toán biểu diễn số N thành mã nhị phân tương ứng.