intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Sáng kiến kinh nghiệm THPT: 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

Chia sẻ: _ _ | Ngày: | Loại File: DOCX | Số trang:25

4
lượt xem
1
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: Sáng kiến kinh nghiệm THPT: 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

  1. CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độ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 qua cấ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ải phá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.
  2. 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ột mô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ọc sang 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ụng Tin 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ấy khó khăn. Xuất phát từ thực tế giảng dạy bộ môn Tin học ở trường THPT Lạng Giang 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ộc số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áo viê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 để đạt kế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á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 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, 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 biế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
  3. 3 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ới giá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ận dụ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ấu trú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 sinh qua 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ới việ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ầ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 …) 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ủa học sinh. B. 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.
  4. 4 Trong chương trình Tin học lớp 11, chúng ta có thể sử dụng một số hệ thống bà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: := ; 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. Phương pháp giải: Cách 1: Dùng biến trung gian tg: tg := a; a := b; b := tg; Đoạn chương trình không dùng biến trung gian sau là sai vì giá trị ban đầu của biến a bị mất, khi đó a = b và nhận giá trị ban đầu của b: a := b; b := a; Cách 2: Không dùng biến trung gian:
  5. 5 a := a + b; b := a - b; a := a – b; Bài toán 2. Cho a, viết chương trình tính a10 và a3 với yêu cầu không được dùng quá bốn phép toán. Phương pháp giải: Dùng thêm biến b để nhận giá trị: b := a*a; a := a*b; writeln( ‘a mu 3= ’, a); a := a*b; a := a*a; writeln(‘a mu 10= ’, a) Bài toán 3. Cho a, viết chương trình tính a5 và a13 với yêu cầu không được dùng quá năm phép toán. Phương pháp giải: Dùng thêm biến b: b := 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 a 4 , a12 và a28 với yêu cầu không được dùng quá sáu phép toán. Phương pháp giải: Dùng thêm biến b:
  6. 6 a := a*a; { ta có a2 } a := a*a; writeln( ‘a mu 4= ’, a); b:=a; a := a*a*a; writeln( ‘a mu 12= ’, a); a := a*a; { ta có a2 } a := a*b; writeln(‘a mu 28= ’, a) 2. Các bài toán với cấu trúc rẽ nhánh và cấu trúc lặp * Cú pháp câu lệnh rẽ nhánh: Câu lệnh if – then Dạng thiếu if then ;… Nếu điều kiện đúng thì thực hiện ; Dạng đủ if then Else ; Nếu điều kiện đúng thì thực hiện ngược lại thực hiện ; * 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 := to do ; · Lặp dạng lùi: for := downto do ;
  7. 7 Trong đó: + 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 do ; 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:
  8. 8 Cách 1: Sử dụng câu lệnh If .. Then dạng thiếu If 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 (ac) then writeln(‘b la so lon nhat’); If (ba) then writeln(‘c la so lon nhat’); If (c
  9. 9 If c>Max then Max:=c; If b0 then Writeln('Bat phuong trinh co nghiem: x>=',-b/a: 4: 2) Else Writeln('Bat phuong trinh co nghiem: x
  10. 10 Writeln('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 dc) And(a+c>b) And(b+c>a) then
  11. 11 Begin 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= và đưa kết quả ra màn hình. 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 tổng sau: S= và đưa kết quả ra màn hình. Phương pháp giải: + Từ màn hình soạn thảo của Pascal yêu cầu học sinh vào File chọn Save As để lưu lại tên tệp với tên bài 2 sau đó sửa lại chương trình bài 1 để được bài 2, bỏ bớt các biế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).
  12. 12 + Ở 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ọc sinh 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ặp WHILE , chẳng hạn: i:= ; While i
  13. 13 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êu cầ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ình DUNG 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 hay không? Học sinh sẽ nhanh chóng sao chép chương trình bài 12 và sửa lại để được chươ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
  14. 14 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 (ab) 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àn phím. Phương pháp giải: i:=1; giatri:=1; While i
  15. 15 End; Writeln(' a mu n bang: ', giatri: 8: 2 ); Bài tập 17: Viết chương trình nhập vào từ bàn phím số nguyên N, Kiểm tra và thông báo ra màn hình N là số nguyên tố hoặc N không là số nguyên tố. Phương pháp giải: Bài toán này học sinh đã được tìm hiểu thuật toán từ lớp 10, nếu học sinh quên giáo viên có thể nêu lại thuật toán để học sinh nhớ lại. Ở đây ta chưa cần hướng dẫn cho học sinh thuật toán tốt để kiểm tra số nguyên tố. Chương trình có thể như sau: Program b17; Var i,n:integer; kq:boolean; begin write('N = ');readln(n); kq:=true;{Giả sử N là SNT, Gán kq bằng true} if n
  16. 16 end; if kq then writeln('So nguyen to') else write('Khong la so nguyen to'); readln; end. Bài tập 18: Viết chương trình nhập vào từ bàn phím số nguyên N (N>10), in ra màn hình các số nguyên tố trong khoảng từ 1 đến N. Phương pháp giải: Học sinh sẽ áp dụng thuật toán của bài 17 để giải quyết bài 18. Giáo viên nên để học sinh tự làm, nếu còn lúng túng thì mới hướng dẫn thuật toán. Sau khi áp dụng bài 17, sao chép và sửa lại chương trình bài 17 để có chương trình bài 18, chương trình có thể được học sinh viết như sau: Program b18; Var i,k,n:integer; kq:boolean; begin write('N = ');readln(n); For k:=1 to N do begin kq:=true;{Giả sử k là SNT, Gán kq bằng true} if K
  17. 17 begin kq:=false;{Gán kq=false} break;{thoát vòng lặp trong bằng lệnh Break} end; if kq then write(k:5); end; readln; end. Sau khi học sinh hoàn thành chương trình giáo viên nên đưa ra một số bộ test tương ứng với các giá trị của N để học sinh chạy thử và hoàn thiện điều khiện nhập dữ liệu cho chương trình. Bài tập 19: Cho số nguyên N(nhập từ bàn phím), lập chương trình phân tích N thành tổng 2 số nguyên tố. Nếu có in ra các cách phân tích. VD: 6 = 3+ 3 Phương pháp giải: Học sinh sẽ vận dụng thuật toán của bài 1 và 2 để giải quyết bài 3. Giáo viên nên để học sinh tự làm, nếu còn lúng túng thì mới hướng dẫn thuật toán. Chương trình có thể được học sinh viết như sau: program bai19; var N,i , j, k, m,d : longint; kq1, kq2:boolean; begin writeln(‘Nhap N= ‘); readln(N); for i:=2 to N-1 do {vong lap 1}
  18. 18 begin {kiem tra xem so i co phai la so nguyen to hay khong} kq1:=true; for k:=2 to trunc(sqrt( i )) do {vong lap 2} if i mod k =0 then begin kq1:=false;{do i chia het cho k nen i khong nguyen to} break; end; if kq1 then {neu so i la snto thi tim so j la so nto ma i+j=N} for j := i to N-1 do {vong lap 3} begin {kiem tra xem so j co phai la so nguyen to hay khong} kq2:=true; for m:=2 to trunc(sqrt( j )) do if j mod m=0 then begin kq2:=false;{Gan kq2=false, tuc j khong la so nto} break; end; if kq2 then if i+j = N then begin
  19. 19 writeln(N ,' = ', i, ' + ', j); d:=d+1; end; end; end; readln; End. Giáo viên giải thích cho học sinh tại sao ở {vong lap 1} biến i lại nhận giá trị bắt dầu từ 2? Tại sao không cần câu lệnh kiểm tra i=10), in các số hoàn hảo và và các ước của số tìm được ra màn hình. Giá trị của N được nhập từ bàn phím. Tương tự ta yêu cầu học sinh sao chép sửa lại chương trình bài tập 14 để được bài tập 15. Bài tập 21: Hai số a và b được gọi là bạn của nhau nếu tổng các ước của a bằng b và ngược lại tổng các ước của b bằng a. Viết chương trình tìm các số bè bạn như trên trong khoảng từ m đến n (m < n, m và n nhập từ bàn phím). Tương tự ta yêu cầu học sinh sao chép sửa lại chương trình bài tập 15 để được bài tập 16. Bài tập 22: (Bài tập về nhà)
  20. 20 Viết chương trình nhập vào 2 số a, b (1
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2