SKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặpSKKN Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấu trúc rẽ nhánh và cấu trúc lặp
Trang 1Độc lập- Tự do- Hạnh phúc
THUYẾT MINH MÔ TẢ GIẢI PHÁP
VÀ KẾT QUẢ THỰC HIỆN SÁNG KIẾN
1 Tên sáng kiến: Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh quacấu trúc rẽ nhánh và cấu trúc lặp
2 Ngày sáng kiến được áp dụng lần đầu: 09/2019
3 Các thông tin cần bảo mật (nếu có): Không
4 Mô tả các giải pháp cũ thường làm: Trước khi áp dụng giải pháp này thì bản thân tôi chưa xây dựng được hệ thống bài tập phù hợp với nhiều đối tượng học sinh Hạn chế khi chưa áp dụng giải pháp là học sinh tiếp cận với việc lập trình chậm, mất nhiều thời gian hơn trong việc làm các bài tập và giải quyết các bài toán 1 cách khó khăn, học sinh không hứng thú khi học Tin học
Khi chưa áp dụng giải pháp học sinh thường lúng túng trong việc tìm kiếm các thuật toán phù hợp với bài toán cơ bản.
5 Sự cần thiết phải áp dụng giải pháp sáng kiến: Sau một thời gian áp dụng giảipháp này tôi nhận thấy kỹ năng lập trình của các em tăng lên đáng kể, có hứng thúhọc tập hơn Nhiều học sinh đã biết vận dụng các thuật toán của các bài toán cơ bản
đã biết để giải quyết các bài toán mở rộng Học sinh thấy yêu thích môn Tin học hơn
6 Mục đích của giải pháp sáng kiến: Sáng kiến này giúp học sinh có hứng thú trong học tập môn Tin học, đặc biệt là đối với việc rèn luyện kỹ năng lập trình để giải quyết các bài toán trong Tin học Ngoài ra khi được rèn luyện kỹ năng lập trình với các bài toán cơ bản, học sinh sẽ có hứng thú tiếp tục tìm hiểu và giải quyết các bài toán khác khó hơn.
Trang 2- Sáng kiến giúp cho giáo viên, cũng như học sinh có tư duy linh hoạt trong việc lựa chọn, tìm kiếm và rèn luyện kỹ năng lập trình để phát triển năng lực tư duy Sáng kiến còn giúp cho học sinh thấy yêu thích môn Tin học.
- Sáng kiến giúp cho giáo viên, học sinh có thêm hệ thống bài tập ở các chủ đề
về cấu trúc rẽ nhánh, cấu trúc lặp.
- Việc học sinh được rèn luyện kỹ năng lập trình ở các bài toán cơ bản sẽ phát triển được phẩm chất, năng lực của học sinh, giúp các em có tư duy tốt hơn khi học tập các môn khác như Toán học, khoa học tự nhiên Và giúp các em có được những kết quả cao hơn trong các kỳ kiểm tra, kỳ thi.
7 Nội dung:
7.1 Thuyết minh giải pháp mới hoặc cải tiến
Môn Tin học đã được đưa vào các trường THPT trong phạm vi cả nước là mộtmôn học bắt buộc Khi mới làm quen với môn Tin học, học sinh tỏ ra rất hào hứng vìđây là môn học rất bổ ích, hiện đại và mang tính thực tế cao Tuy nhiên, khi họcsang Tin học 11 thì học sinh lại có thái độ thờ ơ trong việc học cũng như vận dụngTin học vào cuôc sống hằng ngày vì khi làm quen với việc lập trình học sinh thấykhó khăn Xuất phát từ thực tế giảng dạy bộ môn Tin học ở trường THPT LạngGiang số 1 tôi luôn đặt ra câu hỏi tại sao một môn học có tính tư duy cao, mới mẻ,hấp dẫn vậy mà không thu hút được học sinh tiếp thu bài và vận dụng vào cuộcsống Tuy nhiên trong cùng một trường với các đối tượng học sinh khác nhau giáoviên có thể áp dụng nhiều biện pháp khác nhau để rèn luyện kỹ năng lập trình để đạtkết quả tốt Các giáo viên đều hướng dẫn cho học sinh biết một bài toán có thể giảiđược với nhiều thuật toán khác nhau và mỗi thuật toán chỉ giải được một bài toánhoặ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 tin học họcsinh 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,việc này có thể do nhiều nguyên nhân … Tuy nhiên khi cho một bài toán tin học códạng cơ bản nào đó trong sách giáo khoa, hoặc bài toán cơ bản nào đó mà các em
Trang 3biết thì các em có thể xây dựng vàg hứng thú để xây dựng thuật toán cho bài toán đặt
ra Vì vậy giáo viên có thể chọn các bài toán cơ bản để học sinh hứng thú, phát triển
để rèn luyện kỹ năng lập trình cho học sinh Dĩ nhiên cách làm này không mới vớigiáo viên nhưng cách chọn các bài toán cơ bản như thế nào để học sinh có thể vậndụng và rèn luyện kỹ năng lập trình đó lại là điều đáng quan tâm
Giải pháp “Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinh qua cấutrúc rẽ nhánh và cấu trúc lặp” tôi muốn trình bày kinh nghiệm trong việc rèn luyện
kỹ năng lập trình cơ bản cho học sinh khi học môn Tin học 11
7.2 Giải pháp:
- Tên giải pháp: Rèn luyện kỹ năng lập trình Môn Tin học 11 cho học sinhqua cấu trúc rẽ nhánh và cấu trúc lặp
- Nội dung:
A Các bước tiến hành thực hiện giải pháp
1 Xây dựng hệ thống bài tập để rèn luyện kỹ năng lập trình thông qua các buổi học,mỗi buổi học nên chọn một số bài toán cơ bản để học sinh tiếp xúc và làm quen vớiviệc lập trình
Bước 1: Chọn bài toán cơ bản hoặc bài toán quen thuộc với học sinh
Bước 2: Xây dựng thuật toán cơ bản (Chỉ cần học sinh lập trình được mà chưa cầnquan tâm đến các yếu tố như dữ liệu, phạm vi giá trị của biến, thời gian chạy chươngtrình …)
Bước 3: Xây dựng thuật toán ở mức cao hơn (Quan tâm đến các yếu tố như: Dữ liệu,phạm vi giá trị của biến, thời gian chạy chương trình …)
2 Tổ chức cho học sinh hình thành kỹ năng lập trình thông qua các buổi thực hành có
sự hướng dẫn của giáo viên tại phòng máy
3 Tổ chức kiểm tra để thu thập thông tin về khả năng rèn luyện kỹ năng lập trình củahọc sinh
Trang 4B Nội dung của sáng kiến này được triển khai thông qua các buổi học trực tiếp trên lớp
Trong chương trình Tin học lớp 11, chúng ta có thể sử dụng một số hệ thốngbài tập cơ bản sau để rèn luyện kỹ năng lập trình cho học sinh:
1 Các bài toán làm quen với câu lệnh gán
Cú pháp câu lệnh gán trong Pascal:
<tên biến>:= <Biểu thức>;
Trong đó: tên biến là tên của biến đơn, kiểu của giá trị biểu thức phải phù hợp với
kiểu của biến
Chức năng: đặt cho biến có tên ở vế trái dấu “:=” giá trị mới bằng giá trị của biểu
thức ở về phải
VD: x1:=(-b-sqrt(b*b-4*a*c))/(2*a);
Chú ý: biến kiểu thực có thể nhận giá trị kiểu nguyên và biến kiểu xâu có thể nhận
kiểu kí tự, ngược lại thì không.
Trước tiên cho học sinh thấy được cái hay trong phép gán của tin học, qua một số bài tập này chắc chắn ta sẽ phát huy được tính kích thích, hăng say của các học sinh mà chưa từng được học về tin lập trình:
Bài toán 1 Viết chương trình tráo đổi giá trị giữa hai biến a và b.
Trang 5Đoạn chương trình không dùng biến trung gian sau là sai vì giá trị ban đầu củabiến a bị mất, khi đó a = b và nhận giá trị ban đầu của b:
Trang 6b := a;
a := a*a; { ta có a2 }
a := a*a; { ta có a4 }
b := b*a; { ta có a5 }writeln(‘a mu 5= ’, b);
a := a*a*b; { ta có a13 }writeln(‘a mu 13= ’, a);
Bài toán 4 Cho a, viết chương trình tính a4 , a12 và a28 với yêu cầu không đượcdùng quá sáu phép toán
Trang 7Dạng thiếu
if <điều kiện> then <Câu lệnh1>;…
Nếu điều kiện đúng thì thực hiện <câu lệnh 1>;
Dạng đủ
if <điều kiện> then <Câu lệnh1> Else <Câu lệnh2>;
Nếu điều kiện đúng thì thực hiện <câu lệnh1> ngược lại thực hiện <câu lệnh2> ;
* Cú pháp câu lệnh lặp
· Trong lập trình, có những thao tác phải lặp lại nhiều lần, khi đó ta gọi là cấu trúc lặp.Lặp thường có 2 loại:
- Lặp với số lần biết trước
- Lặp với số lần chưa biết trước
Cấu trúc lặp với số lần biết trước và câu lệnh for-do.
· Lặp dạng tiến:
for <biến đếm> := <giá trị đầu>
to <giá trị cuối> do <câu lệnh> ;
· Lặp dạng lùi:
for <biến đếm> := <giá trị cuối>
downto <giá trị đầu> do <câu lệnh> ;
Trang 8Trong đó:
+ Biến đếm thường là biến kiểu nguyên.
+ Giá trị đầu, giá trị cuối là các biểu thức cùng kiểu với biến đếm Giá trị đầu phải nhỏ hơn hay bằng giá trị cuối.
+ Ở dạng lặp tiến: biến đếm tự tăng dần từ giá trị đầu đến giá trị cuối
+ Ở dạng lặp lùi: biến đếm tự giảm dần từ giá trị cuối đến giá trị đầu
+ Tương ứng với mỗi giá trị của biến đếm, câu lệnh sau do thực hiện 1 lần.
Cấu trúc lặp với số lần chưa biết trước và câu lệnh while-do.
Cú pháp:
while <điều kiện> do <câu lệnh> ;
Trong đó:
- Điều kiện là biểu thức quan hệ hoặc logic.
- Câu lệnh là một câu lệnh trong Pascal.
- Ý nghĩa: Khi điều kiện còn đúng thì còn thực hiện câu lệnh sau do, sau đó lại quay
lại kiểm tra điều kiện.
Qua nội dung lý thuyết về cấu trúc rẽ nhánh và cấu trúc lặp Giới thiệu với
học sinh định lí Bohn Jacopini: Mọi quá trình tính toán đều có thể mô tả và thực
hiện dựa trên ba cấu trúc cơ bản là cấu trúc tuần tự, cấu trúc rẽ nhánh và cấu trúc lặp Vậy qua đó học sinh sẽ cần nắm chắc việc sử dụng cấu trúc tuần tự, cấu trúc rẽ
nhánh và cấu trúc lặp để giải quyết các bài toán trong Tin học
Sau khi học sinh hiểu ý nghĩa và vận dụng thành thạo lệnh gán ta hình thành cho học sinh biết cách tư duy để giải và tối ưu các bài toán chỉ sử dụng hai cấu trúc cơ bản là: cấu trúc rẽ nhánh và lặp.
Bài toán 5 Cho hai số a, b Viết chương trình tìm số lớn nhất.
Phương pháp giải:
Cách 1: Sử dụng câu lệnh If Then dạng thiếu
Trang 9If a> b then writeln(‘a la so lon nhat’);
If b>a then writeln(‘b la so lon nhat’);
Cách 2: Sử dụng câu lệnh If then dạng đủ
If a>b then writeln(‘a la so lon nhat’)
Else writeln(‘b la so lon nhat’);
Khi sử dụng 2 cách trên học sinh sẽ biết được cách sử dụng cấu trúc lệnh rẽnhánh ở 2 dạng cơ bản: dạng thiếu và dạng đủ
Bài toán 6 Cho ba số a, b, c Viết chương trình tìm số lớn nhất và nhỏ nhất
trong ba số
Phương pháp giải:
Cách 1: Sẽ sử dụng các thông thường mà học sinh hay làm
If (a>b)and(a>c) then writeln(‘a la so lon nhat’);
If (a<b)and(a<c) then writeln(‘a la so nho nhat’);
If (b>a)and(b>c) then writeln(‘b la so lon nhat’);
If (b<a)and(b<c) then writeln(‘b la so nho nhat’);
If (c>b)and(c>a) then writeln(‘c la so lon nhat’);
If (c<b)and(c<a) then writeln(‘c la so nho nhat’);
Ở cách này học sinh sẽ hiểu về cấu trúc rẽ nhánh trong lập trình
Cách 2: Sử dụng thuật toán tối ưu hơn dùng biến Min và biến Max
Max: = a; Min:=a;
If b>Max then Max:= b;
Trang 10If c>Max then Max:=c;
If b<Min then Min:=b;
If c<Min then Min:=c;
Sau khi thực hiện cách 2 học sinh sẽ hiểu hơn về cách sử dụng cấu trúc rẽnhanh trong lập trình
Bài toán 7 Viết chương trình giải bất phương trình bậc 1 (ax + b >0)
Phương pháp giải: Dựa vào kiến thức giải phương trình bậc 1 trong toán học.
Học sinh có thể đưa ra thuật toán biện luận giải bài toán Bài toán này là bài toán cơbản giúp học sinh làm quen với cấu trúc rẽ nhánh
Bài toán 8 Viết chương trình giải phương trình (ax2 + bx + c =0)
Phương pháp giải: Sau khi học sinh rèn luyện khả năng lập trình với bài toán
giải phương trình bậc 1 Bài toán này sẽ là bài toán cơ bản phát triển khả năng lậptrình của học sinh với mức độ khó hơn Học sinh sẽ dùng câu lệnh rẽ nhánh dạng đủ
để giải quyết
If a=0 then
If b=0 then
If c=0 then
Trang 11Writeln('Phuong trinh co vo so nghiem')
Else Writeln('Phuong trinh vo nghiem')
Else Writeln('Phuong trinh co mot nghiem: x=',-c/b: 4: 2)
Else
Begin
d:=b*b-4*a*c;
If d=0 then Writeln('Phuong trinh co nghiem kep: x=',-b/(2*a): 4: 2) Else
if d<0 then Writeln(‘phuong trinh vo nghiem’)Else
Bài toán 9 Viết chương trình nhập ba số dương bất kỳ, kiểm tra ba số vừa nhập có
phải là ba cạnh của tam giác không? Nêu phải thì tính chu vi và diện tích của tam giácđó
Phương pháp giải: Trong Toán học học sinh đã biết điều kiện cần và đủ để ba
số là chiều dài ba cạnh của một tam giác, biết cách tính chu vi và diện tích của tamgiác khi biết chiều dài ba cạnh Qua bài toán này học sinh sẽ thực hiện tốt cấu trúc rẽnhánh vào lập trình
If(a+b>c) And(a+c>b) And(b+c>a) then
Trang 12Begin
Cv:=a+b+c; p:=c/2; s:=sqrt(p*(p-a)*(p-b)*(p-c));
Writeln(‘ba so vua nhap la ba canh cua tam giac’);
Writeln(‘ chu vi cua tam gia la’, cv: 4: 2, ‘ dien tich cua tam giac la’,s:6:2);
End
Else Writeln(‘ba so vua nhap khong phai la ba canh cua tam giac’);
Bài toán 10 Viết chương trình nhập vào số nguyên dương N từ bàn phím Sử dụng
câu lệnh lặp FOR tính tổng sau: S= 1+
Phương pháp giải: Đây là bài toán có trong sách giáo khoa và học sinh cũng
đã được làm quen thông qua các ví dụ nên dễ dàng lập trình được:
S:=0;
For i:=1 to N do S:=S + 1/i;
Writeln(‘Tong = ‘, S:10:2);
Từ bài toán này ta yêu cầu học sinh làm bài tập 2 như sau:
Bài tập 11: Sửa lại chương trình ở bài tập 1 nhưng sử dụng câu lệnh lặp WHILE tính
Trang 13biến không dùng đến (cách làm này rất tiết kiệm thời gian vì chương trình bài 2 mởrộng từ bài 1).
+ Ở bài này với học sinh khá, giỏi ở một số trường có chất lượng điểm đầu vào cao cóthể giải quyết đơn giản, còn học sinh ở một số trường có điểm đầu vào thấp thì họcsinh có thể băn khoăn ở việc tìm điều kiện của vòng lặp WHILE, đến đây giáo viên cóthể hướng dẫn cách chuyển đổi từ vòng lặp For–To-Do (Bài tập 1) sang vòng lặpWHILE , chẳng hạn:
For i:= <GTđầu> To <Gtcuối> Do
Học sinh sẽ tự mình hoàn thành được chương trình
Bài tập 12: Viết chương trình nhập từ bàn phím số nguyên dương N, tính tổng các
ước thực sự của N và in ra màn hình Ví dụ: N=6 thì tổng các ước là 1+2+3 =6; N=9thì tổng các ước là 1+ 3 =4
Phương pháp giải: Học sinh biết để kiểm tra xem số i có phải là ước của số N
hay không thì dùng phép toán Mod (N mod i = 0), giáo viên chỉ cần hướng dẫn họcsinh duyệt các số i đó trong khoảng từ 1 đến (N div 2) là học sinh có thể làm đượcnhanh chóng, ta sẽ có đáp án của bài này có thể như sau:
Tg:=0;
For i:=1 to N div 2 do
If n mod i =0 then tg:=tg+i;
Trang 14Writeln(‘Tong cac uoc la= ‘, tg:5);
Giáo viên có thể yêu cầu học sinh nhập một vài giá trị N để xem kết quả Sau đó yêucầu học sinh làm bài tập 13 như sau:
Bài tập 13: Số N được gọi là số hoàn hảo nếu tổng các ước thực sự của N bằng chính
nó Viết chương trình nhập từ bàn phím số nguyên dương N, thông báo ra màn hìnhDUNG nếu N là số hoàn hảo, ngược lại thì thông báo KHONG
Phương pháp giải: Học sinh dễ dàng nhận thấy cách làm bài 2 sẽ tương tự cách
làm bài 1, chỉ thêm một công việc đó là kiểm tra xem tổng các ước đó có bằng N haykhông? Học sinh sẽ nhanh chóng sao chép chương trình bài 12 và sửa lại để đượcchương trình bài 13 như sau:
Tg:=0;
For i:=1 to N div 2 do
If n mod i =0 then tg:=tg+i;
If tg=N then Writeln(‘DUNG’) else writeln(‘KHONG’);
Tương tự như vậy ta sẽ yêu cầu học sinh làm bài tập 14 như sau:
Bài tập 14: Viết chương trình in ra màn hình các số hoàn hảo trong khoảng từ a đến b
(với 1<a<b) Với a, b được nhập từ bàn phím
Phương pháp giải: Giáo viên để cho học sinh tự làm, nếu còn học sinh nào
còn lúng túng thì mới hướng dẫn Tuy nhiên thì với bài 2 đã biết cách làm thì học sinhcũng có thể nhanh chóng hoàn thiện được bài 3 có thể chưa kiểm tra được điều kiệnnhập a,b như sau:
For k:=a to b do
Begin
Trang 15For i:=1 to K div 2 do
If K mod i =0 then tg:=tg+i;
If tg=K then Writeln(k);
End;
Giáo viên yêu cầu học sinh test với một số bộ dữ liệu tương ứng với các giá trị của a,b
Bài tập 15: Viết chương trình nhập vào hai số nguyên dương a, b bất kỳ, hiển thị ước
chung lớn nhất của hai số và bội chung nhỏ nhất của hai số đó
Phương pháp giải: Học sinh dựa vào kiến thức ước chung lớn nhất và bội
chung nhỏ nhất của 2 số được học trong Toán học để giải bài toán
While (a<>b) do Begin
If a>b then a:=a-b else b:=b-a;
End;
uc:=a; bc:=(a*b)/uc;
Writeln(‘uoc chung lon nhat cua ‘,a,’ va ’,b,’ la ‘,uc);
Writeln(‘boi chung nho nhat cua ‘,a,’va ’,b,’ la ‘,bc);
Bài tập 16: Tính hàm lũy thừa an ở đây a thực và n tự nhiên được nhập vào từ bànphím
Phương pháp giải:
i:=1; giatri:=1;
While i <= n Do Begin