Luôn trăn trở với các thế hệ học trò, mong muốn mang lại những gì tốt đẹp nhất đối với các em, tôi đã xây dựng đề tài: " Phát triển kỹ năng và tư duy lập trình cấu trúc câu lệnh rẽ nhánh
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ
TRƯỜNG THPT CHU VĂN AN
SÁNG KIẾN KINH NGHIỆM
PHÁT TRIỂN KỸ NĂNG VÀ TƯ DUY LẬP TRÌNH CẤU TRÚC CÂU LỆNH RẼ NHÁNH THÔNG QUA
Trang 2MỤC LỤC
A ĐẶT VẤN ĐỀ 1
I Lý do chọn đề tài 1
II Mục đích nghiên cứu 1
III Đối tượng và phạm vi nghiên cứu 2
1 Đối tượng nghiên cứu 2
2 Phạm vi nghiên cứu 2
IV Nhiệm vụ nghiên cứu 2
V Phương pháp nghiên cứu 2
1 Nghiên cứu lý thuyết 2
2 Thực nghiệm sư phạm 2
B GIẢI QUYẾT VẤN ĐỀ 3
I Cơ sở lý luận 3
II Cơ sở thực tiễn 4
* Thuận lợi: 4
* Khó khăn: 4
III Biện pháp tổ chức thực hiện 4
1 Hướng dẫn lý thuyết 4
2 Hệ thống bài tập rẽ nhánh cơ bản 5
3 Bài tập rèn luyện 16
IV Kết quả kiểm nghiệm 16
C KẾT LUẬN VÀ ĐỀ XUẤT 19
I Một số kết luận rút ra 19
II Đề xuất 19
Trang 3A ĐẶT VẤN ĐỀ
I Lý do chọn đề tài
Là một người giáo viên, khi bước lên bục giảng, chắc chắn rằng ai cũng
có những trăn trở như tôi, đó là: làm sao có thể truyền đạt đầy đủ kiến thức chohọc sinh của mình, làm sao cho học sinh cảm thấy bài học thật hữu ích, đem lại
sự hứng thú, say mê học tập cho các em Mỗi giáo viên phải có lòng yêu nghề,kiến thức, kỹ năng và phương pháp giảng dạy Tình yêu nghề phải được xácđịnh ngay từ khi chúng ta bước chân vào con đường sư phạm, và tình yêu đóngày càng được vun đắp thêm theo năm tháng, qua lớp lớp thế hệ học sinh Kiếnthức thì rộng lớn vô cùng, mỗi giáo viên phải học tập suốt đời, phải học thêm ởsách vở, ở đồng nghiệp, ở internet Kỹ năng được tôi luyện theo năm tháng, mỗingười có mỗi phương pháp, mỗi cách truyền đạt, sao cho học sinh hiểu bài và cóthể vận dụng để làm bài Kỹ năng và kiến thức sẽ dần trở thành kinh nghiệmgiảng dạy riêng của mỗi người Luôn trăn trở với các thế hệ học trò, mong muốn
mang lại những gì tốt đẹp nhất đối với các em, tôi đã xây dựng đề tài: " Phát triển
kỹ năng và tư duy lập trình cấu trúc câu lệnh rẽ nhánh thông qua hệ thống bài tập" , tôi rất mong nhận được nhiều sự đóng góp và phản hồi để đề tài ngày
càng được hoàn thiện hơn
Môn tin học là môn có những đặc thù rất riêng, là môn liên quan nhiềuđến cơ sở vật chất: máy tính, máy chiếu, nhưng không phải trường nào cũng đápứng được đầy đủ Vì vậy để gây được hứng thú cho các em khi học tin, mỗi giờ
lý thuyết trên lớp giáo viên phải cố gắng rất nhiều, từ bài bản đến cách thức bốtrí tiết học, để các em có thể nắm vững kiến thức, dẫn đến giờ thực hành mớihiệu quả Mặt khác, với nội dung chương trình lớp 11, lần đầu tiên các em đượclàm quen với ngôn ngữ lập trình, lần đầu tiên được biết máy tính giải các bàitoán như thế nào, nên các em còn nhiều bỡ ngỡ Ngoài việc phải tìm hiểu cấutrúc ngôn ngữ, nhớ câu lệnh, mà các em còn phải có tư duy về toán học, điềunày cũng gây một phần khó khăn đối với các em có lực học môn toán yếu
Chính vì lý do này, tôi suy nghĩ, và rút kinh nghiệm từ những năm dạytrước, khi dạy lập trình cho các em, tôi luôn hướng các em tới những cái gì đơngiản, dễ hiểu, gần gũi và quen thuộc nhất để các em nắm vững được kiến thức,lập trình giải quyết bài toán, để những tiết học lập trình không còn trừu tượng,căng thẳng đối với các em, thay vào đó là sự cụ thể, rõ ràng
II Mục đích nghiên cứu
Với chủ trương của giáo dục: lấy học sinh làm trung tâm, người thầy đóngvai trò dẫn dắt học sinh, hướng dẫn các em, và theo phương châm của tôi, phảidạy làm sao cho học sinh phải hiểu được và làm được Muốn học sinh hiểuđược, thì giáo viên phải nghiên cứu cách giảng dạy, làm sao truyền đạt đượcđúng, đủ kiến thức, nhưng phải dễ hiểu nhất, cụ thể nhất Giáo viên phải thật sựtận tâm, nhiệt huyết với bài dạy thì cũng mới truyền được cảm hứng học tập chocác em, tránh được sự mệt mỏi, buồn ngủ, nhàm chán của tiết học Khi học sinh
đã hiểu, nắm vững kiến thức của bài học, để học sinh có thể làm được bài tập,thực hành được thì giáo viên phải có một hệ thống bài tập cụ thể, từ dễ đến khó,
Trang 4từ đơn giản đến phức tạp, để nâng dần khả năng tư duy của các em, để các em
có thế lấy cái dễ áp dụng làm được cái khó Học sinh thường hay suy nghĩ theo
tư duy lối mòn, thụ động trong việc giải quyết các bài toán, vì vậy giáo viên cầnphải kích thích sự mày mò tìm hiểu, sáng tạo của các em, dẫn dắt, hướng dẫncác em tìm ra hướng giải chứ không giải cụ thể cho các em
Khi nghiên cứu đề tài này, mục đích chính của tôi là đưa ra hệ thống bàitập cụ thể, cách thức dạy, để học sinh có thể dễ hiểu nhất, nắm vững kiến thức
và làm được bài Học sinh không còn cảm thấy môn tin khó hiểu, trừu tượng bởingôn ngữ và cấu trúc lập trình Khi các em đã làm được một số bài, đã thực hành
và chạy được chương trình, các em sẽ rất yêu thích và hứng thú môn học
III Đối tượng và phạm vi nghiên cứu
1 Đối tượng nghiên cứu
- Nghiên cứu nội dung và kiến thức chương tình Tin học phổ thông, cụ thể
là tin học 11
- Nghiên cứu các tài liệu liên quan đến thuật toán và ngôn ngữ lập trình Pascal
- Nghiên cứu tâm sinh lý của học sinh THPT
- Nghiên cứu về kỹ năng, phương pháp dạy học, đổi mới theo hướng tíchcực, lấy học sinh làm trung tâm
2 Phạm vi nghiên cứu
Trong phạm vi đề tài này, tôi xin đưa ra một số kinh nghiệm và phươngpháp dạy học nội dung cấu trúc rẽ nhánh (bài 9- sgk tin học 11) thông qua hệthống bài tập cụ thể
IV Nhiệm vụ nghiên cứu
Để đạt được mục đích nghiên cứu đề ra, cần phải thực hiện những nhiệm
vụ sau:
- Nghiên cứu cơ sở lý luận dạy học
- Nghiên cứu cơ sở thực tiễn, thực trạng dạy và học ở trường THPT
- Nghiên cứu phương pháp truyền đạt, cách thức bố trí bài giảng để tạođược hứng thú cho học sinh, tạo cho các em sự say mê lập trình
- Xây dựng hệ thống bài tập đa dạng, phù hợp với năng lực của học sinh
V Phương pháp nghiên cứu
1 Nghiên cứu lý thuyết
- Nghiên cứu các tài liệu về ngôn ngữ lập trình Pascal, các tài liệu về phươngdạy học toán học, tư duy toán học, các tài liệu về giáo dục học, tâm lý học
- Nghiên cứu các công văn hướng dẫn của Bộ Giáo dục và Đào tạo, SởGiáo dục và Đào tạo về vấn đề đưa Tin học vào chương trình THPT cũng nhưcác vấn đề về yêu cầu chất lượng giáo dục
Trang 5- Kiểm chứng thông qua việc tiến hành giảng dạy trên 2 đối tượng: lớpthực nghiệm và lớp đối chứng để so sánh kết quả Lớp đối chứng là theo phươngpháp cũ, giáo viện dạy lý thuyết, có hướng dẫn một vài bài tập ví dụ Lớp thựcnghiệm áp dung phương pháp mới, lấy học sinh làm trung tâm, giáo viên dẫndắt, gợi động cơ, hướng dẫn học sinh giải quyết vấn đề, thực nghiệm đề tàinghiên cứu Cụ thể như sau:
Lớp đối chứng Lớp thực nghiệm
Lớp 11B1 Lớp 11B3 Lớp 11B2 Lớp 11B5
Số lượng 40 hs 42 hs 40 hs 41 hs Giỏi 5 hs 12.5% 3 hs 7.1% 4 hs 10% 3 hs 7.3%
Khá 19 hs 47.5% 12 hs 28.6% 20 hs 50% 10 hs 24.4%
Trung bình 14 hs 35% 21 hs 50% 13 hs 32.5% 22 hs 53.7%
Yếu 2 hs 5 % 6 hs 14.3% 3 hs 7.5% 6 hs 14.6%Kết quả nghiên cứu được kiểm chứng thông qua quá trình dạy thựcnghiệm, so sánh kiểm tra giữa các lớp có lực học, khả năng tiếp thu bài ngangnhau So sánh lớp 11B1 và 11B2, so sánh lớp 11B3 và 11B5
có thể giải quyết được những bài toán cụ thể Quá trình giải quyết bài toán chính
là thực hiện công việc: tìm hiểu bài toán, xác định thuật toán, và viết chươngtrình Cụ thể, khi đưa ra một bài toán, giáo viên sẽ hướng học sinh thực hiện 3bước như sau:
Bước 1: cũng giống như trong toán học, học sinh sẽ phải xác định bàitoán, chính là đi tìm Input và Output
- Input: là các thông tin đã có
- Output: Các thông tin cần tìm từ Input
Bước 2: Xác định thuật 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 thao tác ấy, từInput của bài toán, ta nhận được Output cần tìm
Bước 3: Viết chương trình (lập trình) Trước khi viết chương trình phảihiểu được ngôn ngữ lập trình là gì? Lập trình là đi làm công việc gì?
Ngôn ngữ lập trình là một hệ thống các kí hiệu tuân theo các quy ước về
ngữ pháp và ngữ nghĩa, dùng để xây dựng các chương trình cho máy tính
+ Ngữ pháp: Quy ước về quan hệ giữa các ký hiệu Ví dụ trong ngôn ngữ
Pascal: các ký hiệu Begin, end phải đi thành từng cặp, sau từ khóa if sẽ là một biểu thức điều kiện, sau đó là từ khóa then.
Trang 6+ Ngữ nghĩa: Quy ước về ý nghĩa của kí hiệu Ví dụ trong ngôn ngữ
Pascal: dấu + biểu thị cho phép cộng, dấu - biểu thị cho dấu trừ …Phát biểu if
… then … có nghĩa là “nếu … thì làm …”
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 của thuật toán
II Cơ sở thực tiễn
Một số thuận lợi và khó khăn khi thực hiện nghiên cứu đề tài:
- Một số học sinh yêu thích môn học tự nhiên, đam mê lập trình, nên các
em tỏ ra rất hứng thú và chăm chú trong tiết học lý thuyết, nhiệt tình say sưa giờthực hành, điều này mang lại niềm vui và sự động viên lớn cho giáo viên
Khi dạy lý thuyết về cấu trúc rẽ nhánh, đầu tiên giáo viên phải làm sáng rõ
rẽ nhánh là gì, thông qua những ví dụ cụ thể từ thực tiễn cuộc sống và trong toánhọc
Vd1: Nếu mai trời mưa thì đường sẽ rất trơn
Vd2: Nếu em học bài chăm chỉ thì em sẽ được điểm cao, không thì em sẽ
bị điểm kém
Vd3: Nếu n>0 thì n là số dương
Vd4: Nếu a>b thì giá trị lớn nhất là a, không thì giá trị lớn nhất là b
Giáo viên chỉ rõ cho học sinh thấy ở Vd1 và Vd3 là cách diễn đạt rẽ
nhánh dạng thiếu: Nếu thì Ở Vd2 và Vd4 là rẽ nhánh dạng đủ:
Nếu thì không thì ( hoặc có thể nói : Nếu thì , ngược lại thì )
Để diễn đạt những câu lệnh có dạng rẽ nhánh như trên, ngôn ngữ lập trình
Pascal sử dụng 2 dạng cấu trúc rẽ nhánh If- then
a) Dạng thiếu:
Trang 7If <điều kiện> then <câu lệnh>;
+ Hoạt động: Nếu biểu thức điều kiện đúng thì câu lệnh được thực hiện,điều kiện sai câu lệnh bị bỏ qua
Vd1: Nếu n>0 thì n là số dương
=> If n> 0 then write (' n la so duong ');
Vd2: Nếu tam giác có kích thước 3 cạnh a=b=c thì là tam giác đều
=> if (a=b) and (b=c) then write(' la tam giac deu');
b) Dạng đủ:
if < điều kiện> then < câu lệnh 1> else < câu lệnh 2>;
+ Hoạt động: Nếu biểu thức điều kiện đúng thì câu lệnh 1 được thực hiện,điều kiện sai câu lệnh 2 được thực hiện
vd1: if a>b then Max:=a else Max:=b;
vd2: Nếu a chia hết cho 2 thì a là số chẵn, không thì a là số lẻ
=> if a mod 2= 0 then write ('a la so chan') else write( ' a la so le ');
Hệ thống bài tập mà tôi đưa ra sẽ là từ những bài tập đơn giản và cơ bản
để học sinh có thể nắm vững kiến thức về rẽ nhánh là như thế nào, làm thế nào
để có thể chuyển từ ngôn ngữ toán học sang câu lệnh lập trình? Những bài toángắn liền với thực tế, và rất hay gặp trong toán học, để những em có kiến thứcyếu về môn toán cũng có thể hiểu rõ được bản chất toán học, hiểu rõ máy tính cóthể giải quyết các bài toán toán học thông qua chương trình như thế nào Quaquá trình dạy học và khảo sát ở những năm trước, tôi nhận thấy nhiều em còn
mơ hồ, lập trình là cái gì, nó để làm gì, nó có ứng dụng gì trong cuộc sống, có
Điều kiện
Câu lệnh 1
Sai
Trang 8thiết thực không Nhiều khi các em không hiểu rõ bản chất, ứng dụng của mônhọc, các em sẽ cảm thấy không cần thiết, sẽ không có niềm đam mê thật sự, dẫnđến tinh thần học rời rạc, không chú tâm Khi dạy lập trình, tôi thường nhấnmạnh vào ý nghĩa và ứng dụng thực tế của môn học, và ứng dụng đó chính là đigiải quyết các bài toán mà các em đã biết, đang học, và gắn liền với cuộc sống.
Từ đó sẽ đem lại sự hứng khởi cho môn học, ý thức học tập của các em cũngđược nâng cao
Khi đưa ra một bài toán, bao giờ việc đầu tiên tôi cũng yêu cầu HS xácđịnh bài toán, cụ thể là xác định Input và Output, công việc này các em đã thànhthạo trong chương trình lớp 10, nên việc xác định không gặp khó khăn Tiếptheo giáo viên hướng dẫn bài toán để các em có thể xác định được nội dung rẽnhánh của bài toán: "Nếu điều kiện xảy ra thì sẽ thực hiện gì, ngược lại điềukiện không xảy ra thì thực hiện gì?" Khi đã hiểu được nội dung rẽ nhánh củabài toán, giáo viên sẽ yêu cầu các em chuyển sang ngôn ngữ lập trình Pascal, cóthể những bài toán đầu các em còn gặp khó khăn, nhưng sau khi thực hiện một
số bài, các em sẽ quen dần với cách chuyển từ nội dung rẽ nhánh sang câu lệnh
rẽ nhánh, sẽ thành thạo hơn với các câu lệnh đã học Giáo viên sẽ hướng dẫn kỹ
những bài tập đầu để các em hiểu rõ nội dung sau từ khóa Else là đi với câu lệnh
If nào? để các em phân biệt được sự rẽ nhánh Đồng thời giáo viên cũng phải
rất chú ý cách trình bày viết câu lệnh, hướng dẫn các em cách viết câu lệnh,cách trình bày chương tình sao cho khoa học, dễ nhìn và dễ hiểu Mặt khác,trong quá trình dạy học ở những năm trước, tôi thấy nhìn chung khi học đếncâu lệnh ghép các em đang con rất mơ hồ, thường các em không biết khi nào
nên đặt cặp từ khóa begin end, hoặc là tại sao đoạn lệnh này lại có cặp từ khóa Begin End Do đó, khi dạy nội dung cấu trúc rẽ nhánh, tôi đã đưa một số
bài tập có nội dung câu lệnh ghép, và trong quá trình dạy, tôi hướng dẫn cụ thểcho các em nội dung này Sau khi đã biết chuyển từ nội dung rẽ nhánh sangcâu lệnh có nghĩa là học sinh đã nắm được cấu trúc rẽ nhánh của bài toán, nắmvững cấu trúc chương trình, các câu lệnh trong Pascal thì các em có thế viếtđược chương trình hoàn chỉnh
Bài toán 1: Nhập vào 2 số nguyên a, b Tìm giá trị lớn nhất của 2 số đó (Max)
* HS Xác định bài toán:
+ Input: 2 số nguyên a,b
+ Output: Giá trị Max (a, b)
Với bài toán này, giáo viên có thể hướng dẫn học sinh làm theo 2 cách đểlàm sáng tỏ câu lệnh rẽ nhánh dạng thiếu và dạng đủ:
a) Rẽ nhánh dạng thiếu:
* GV yêu cầu HS đưa ra ý tưởng bài toán
* GV hướng dẫn: việc tìm ra giá trị lớn nhất giữa 2 số thì thực tế rất đơn
giản, nhưng đối với máy tính thì giải quyết như thế nào? Đầu tiên ta có gán giátrị Max nhận một trong 2 giá trị a hoặc b Sau đó đem so sánh giá trị Max vớigiá trị còn lại, nếu Max nhỏ hơn giá trị còn lại thì Max sẽ thay đổi và nhận giá trị
Trang 9đó, ngược lại Max sẽ giữ nguyên giá trị ban đầu, và không cần phải thực hiệncông việc gì nữa.
* HS xác định nội dung (ND) rẽ nhánh:
Đầu tiên gán Max nhận giá trị là a: Max:=a;
Nếu Max<b thì Max:=b;
* HS viết câu lệnh rẽ nhánh:
If Max<b then Max:=b;
* GV hướng dẫn HS viết chương trình:
If Max<b then Max:=b;
Writeln( 'gia tri lon nhat la:', Max);
Readln;
End.
b) Rẽ nhánh dạng đủ:
* GV yêu cầu HS đưa ra ý tưởng bài toán
* GV hướng dẫn: So sánh 2 giá trị a và b, nếu giá trị a lớn hơn thì Max sẽ
nhận giá trị a, ngược lại Max nhận giá trị b
* Xác định nội dung (ND) rẽ nhánh:
Nếu a>b thì Max:=a, ngược lại thì Max:=b
* HS viết câu lệnh rẽ nhánh:
If a> b then Max:=a else Max:=b;
* GV hướng dẫn HS viết chương trình:
If a>b then Max:=a else Max:=b;
Writeln( 'gia tri lon nhat la:', Max);
Readln;
End.
* GV kiểm tra lại chương trình, nhắc lại ý nghĩa từng câu lệnh
Từ bài toán 1, giáo viên có thể vận dụng để học sinh xây dựng bài toántương tự: Tìm giá trị nhỏ nhất của 2 số a, b (Min) Có thể chỉ cần yêu cầu họcsinh lên viết câu lệnh rẽ nhánh, không cần viết chương trình
Bài toán 2: Phát triển bài toán 1 Tìm giá trị lớn nhất của 3 số nguyên a, b, c
Trang 10* Xác định bài toán:
+ Input: 3 số nguyên a, b, c
+Output: Max (a,b,c)
* GV yêu cầu HS đưa ra ý tưởng bài toán
* GV Hướng dẫn: Muốn tìm giá trị lớn nhất của 3 hoặc 4 số thì trước hết
chúng ta phải đi tìm giá trị lớn nhất của từng cặp 2 số, sau đó lấy kết quả lớnnhất đó đi so sánh với số còn lại Với bài toán này, giáo viên sẽ hướng các emtới dạng toán mà trong chương trình có nhiều hơn một lệnh rẽ nhánh, để các emlàm quen, hiểu rõ cấu trúc
* HS Xác định ND rẽ nhánh:
Nếu a>b thì Max:=a else Max:=b;
Nếu Max<c thì Max:=c
* Xác định câu lệnh rẽ nhánh
If a>b then Max:=a else Max:=b;
If Max<c then Max:=c;
If a>b then Max:=a else Max:=b;
If Max<c then Max:=c;
Writeln( 'gia tri lon nhat la:', Max);
Readln;
End.
* GV kiểm tra lại chương trình, nhắc lại ý nghĩa từng câu lệnh
Bài toán 3: Nhập vào từ bàn phím số tự nhiên a Kiểm tra xem a là số
- Trong ngôn ngữ lập trình Pascal, số chẵn được viết như thế nào?
GV nhắc lại kiến thức về phép toán Div và Mod
* HS xác định ND rẽ nhánh:
Nếu a chia hết cho 2 thì a là số chẵn, ngược lại thì a là số lẻ.
* HS viết câu lệnh rẽ nhánh:
If a mod 2=0 then write (a, ' la so chan ')
else write (a, ' la so le ');
* HS viết chương trình:
Trang 11If a mod 2 = 0 then write (a, ' la so chan ')
else write (a, ' la so le ');
Readln;
End.
* GV kiểm tra lại chương trình, nhắc lại ý nghĩa từng câu lệnh, nhắc học
sinh chú ý câu lệnh trước từ khóa Else không có dấu ";"
Tương tự bài toán 2, có thể cho học sinh thực hành, kiểm tra một số cóchia hết cho 3, hoặc cho 5, cho 10 Yêu cầu học sinh lên bảng viết câu lệnh rẽnhánh cho từng trường hợp
Bài toán 4:Viết chương trình giải phương trình bậc nhất: ax+b = 0
* Xác định bài toán:
+ Input: nhập vào 2 số a,b
+Output: Nghiệm x của phương trình
* Hướng dẫn: Để viết được chương trình, học sinh phải nhớ lại những
trường hợp nghiệm của chương trình bậc nhất 1 ẩn GV yêu cầu học sinh nhắclại cách biện luận giải phương trình bậc nhất
* HS xác định ND rẽ nhánh:
+ Nếu a = 0
- Nếu b = 0 thì phương trình vô số nghiệm
- ngược lại b<>0 thì phương trình vô nghiệm
+ Ngược lại nếu a<>0 thì phương trình có nghiệm duy nhất x=-b/a
* HS xác định câu lệnh rẽ nhánh:
+ HS có thể trình bày rẽ nhánh dạng thiếu:
If (a=0) and (b=0) then write (' pt vo so nghiem');
if (a=0) and( b<>0) then write (' pt vo nghiem');
if (a<>0) then write(' pt co nghiem duy nhat: x=',-b/a:5:2);
+ hoặc có thể trình bày rẽ nhánh dạng đủ (cấu trúc If lồng)
if a=0 then
if b=0 then write (' pt vo so nghiem')
else write(' pt vo nghiem')
else write(' pt co nghiem duy nhat x=',-b/a:5:2);
* Chú ý: giáo viên phải hướng dẫn cụ thể, làm sáng tỏ, câu lệnh else đi
với cấu trúc if nào, tránh để học sinh hiểu nhầm bản chất câu lệnh.
* HS viết chương trình:
Program Giai_pt_bac1;
Uses crt;
Var a, b: real;