Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Trung học phổ thông Skkn tin học thpt xây dựng hệ thống bài tập khi dạy câu lệnh rẽ nhánh và cấu trú...

Tài liệu Skkn tin học thpt xây dựng hệ thống bài tập khi dạy câu lệnh rẽ nhánh và cấu trúc lặp

.DOC
20
151
116

Mô tả:

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HÓA TRƯỜNG THPT BA ĐÌNH NGA SƠN -------------- -------------- SÁNG KIẾN KINH NGHIỆM XÂY DỰNG HỆ THỐNG BÀI TẬP KHI DẠY CÂU LỆNH RẼ NHÁNH VÀ CẤU TRÚC LẶP Người thực hiện: Trần Ngọc Chiến Chức vụ: Giáo viên SKKN thuộc lĩnh vực (môn): Tin THANH HOÁ NĂM 2015 0 PHẦN A – ĐẶT VẤN ĐỀ Có thể nói dạy học là hoạt động đặc trưng chỉ có ở con người. Trải qua hàng nghìn năm, hoạt động dạy học không ngừng được cải tiến. Khó có thể nói đâu là điểm dừng hay đâu là đỉnh của việc cải tiến dạy học. Thế nhưng, thực tế cuộc sống cho thấy đến thời điểm hiện nay dạy học đã đạt được những thành tựu rất đáng nể. Đó chính là những thành tựu làm phát huy tối đa vai trò của người học, làm tối ưu hóa hoạt động của người dạy hướng về người học, là tổ chức hoạt động dạy học theo định hướng hiệu quả nhất trong những điều kiện tối ưu nhất. Lẽ đương nhiên, để có thể thực hiện những yêu cầu ấy, đạt được những thành tựu lý tưởng ấy đòi hỏi việc dạy học phải dựa trên những cơ sở khoa học nhất định mà các loại bài tập cho học sinh là điều không thể thiếu. Hoạt động dạy học là một dạng hoạt động đặc trưng của loài người nhằm truyền thụ lại những kinh nghiệm, những vốn kiến thức của xã hội loài người đã tích luỹ được từ thế hệ này cho thế hệ khác, biến chúng thành vốn liếng, kinh nghiệm, phẩm chất và năng lực tư duy sáng tạo của người học. Hoạt động dạy học gồm hai hoạt động: hoạt động dạy của giáo viên và hoạt động học của học sinh. Hai hoạt động này liên quan mật thiết với nhau, tác động qua lại lẫn nhau và có chung một mục đích cuối cùng là giúp cho người học lĩnh hội được nội dung học đồng thời phát triển được phẩm chất, nhân cách và năng lực tư duy sáng tạo của người học. Nói như vậy trong dạy học nói chung và dạy học môn Tin nói riêng không phải chỉ cần người học phát huy tính tích cực, tự giác chủ động sáng tạo của họ trong hoạt động học là đã đạt được mục tiêu của hoạt động dạy học mà người dạy cũng cần phải biết phân tích nội dung của hoạt động dạy thành những hoạt động thành phần rồi căn cứ vào mục tiêu của tiết học, trình độ của học sinh, trang thiết bị hiện có của nhà trường mà lựa chọn phương pháp giảng dạy, thời điểm đưa ra nội dung kiến thức của tiết học một cách phù hợp nhằm thực hiện những hoạt động tiềm tàng trong nội dung cần dạy để đạt được mục tiêu đặt ra một cách cao nhất, hiệu quả nhất. Ngày nay sự hiểu biết về tin học điều là không thể thiếu. Bởi nó đã xâm nhập vào rất nhiều ngành khoa học khác nhau với vai trò là một công cụ hữu ích để học tập, ứng dụng, nghiên cứu và phát minh. PHẦN B - GIẢI QUYẾT VẤN ĐỀ I – CƠ SỞ LÍ LUẬN CỦA VẤN ĐỀ . Việc lựa chọn và nghiên cứu đề tài này tôi dựa vào hai nguyên tắc cơ bản trong dạy học đó là: nguyên tắc đảm bảo sự thống nhất giữa tính vừa sức chung và vừa sức riêng và nguyên tắc đảm bảo sự thống nhất giữa tính tập thể và cá nhân . Phương pháp dạy học Tin học có liên quan mật thiết đến nhiều bộ môn khoa học như: Triết học duy vật biện chứng, Toán học, Giáo dục học, Tâm lý học, Lôgic học và những khoa học khác. 1 Cơ sở Toán học: Đó là tính chính xác, chặt chẽ và logic, tuần tự và khoa học trong dạy học. Cơ sở Giáo dục học: Căn cứ vào nguyên tắc đảm bảo sự thống nhất giữa tính vừa sức chung và vừa sức riêng trong dạy học, giữa tính tập thể và cá nhân trong dạy học. Cơ sở Triết học: Mâu thuẫn là động lực thúc đẩy quá trình phát triển. Một vấn đề được gợi ra cho học sinh học tập chính là một mâu thuẫn giữa yêu cầu nhiệm vụ nhận thức với tri thức và kinh nghiệm sẵn có. Cơ sở Tâm lý học: Sự nảy sinh, hình thành tâm lý về phương diện cá thể là quá trình chuyển đổi liên tục từ cấp độ này sang cấp độ khác đạt tới một chất lượng mới và diễn ra một quy luật đặc thù. Quy luật của quá trình nhận thức là từ trực quan sinh động đến tư duy trừu tượng, từ tư duy trừu tượng về thực tiễn. Trong quá trình nhận thức có đạt được hiệu quả hay không, có bền vững hay không còn phụ thuộc vào quá trình tích cực của hoạt động, sáng tạo của chủ thể. Trong các môn học nói chung và môn Tin học nói riêng, sự thống nhất giữa điều khiển của thầy và hoạt động học của trò có thực hiện bằng cách quán triệt, kích thích quan điểm hoạt động thực hiện dạy học trong hoạt động và bằng hoạt động. Dạy học theo phương pháp phải làm cho học sinh chủ động tư duy nhiều hơn, làm nhiều hơn, tham gia hoạt động nhiều hơn trong quá trình chiếm lĩnh tri thức, còn thầy đóng vai trò là người hướng dẫn. Dạy học là dạy cho học sinh phương pháp tư duy sáng tạo, dạy tin học là phải dạy suy nghĩ, dạy cho học sinh thành thạo các phương pháp tư duy, từ phân tích tổng hợp trừu tượng hóa, khái quát hóa… phải dạy cho học sinh có sự tìm tòi tự mình phát hiện và phát biểu vấn đề, dự đoán kết quả, tìm được hướng giải của bài toán khi làm bài tập tin học nói chung và bài tập Pascal, hướng viết giải thuật về một bài toán. Hình thành và phát triển tư duy tích cực, độc lập sáng tạo, có óc hoài nghi khoa học trong dạy học tin học cho học sinh là quá trình lâu dài, thông qua bài học và từng tiết học. II – THỰC TRẠNG CỦA VẤN ĐỀ CẦN NGHIÊN CỨU: 2.1. Thực trạng chung: Đối với bộ môn Tin học ở trường THPT nhất là ngôn ngữ lập trình Pascal. Đây là một nội dung khó đối với cả người dạy và người học. Một trong những nội dung khó đó là các bài tập với Câu lệnh rẽ nhánh và cấu trúc lặp ở chương trình Tin học 11. Mặt khác, như chúng ta đã biết xây dựng được hệ thống bài tập là một căn cứ cho việc điều khiển quá trình dạy học. Vì vậy giáo viên phải xác định được những mức độ yêu cầu thể hiện những hành động mà học sinh phải đạt được hoặc có thể đạt được để xây dựng hệ thống bài tập, hệ thống ví dụ hợp với bài dạy. 2 2.2 . Đối với giáo viên. Bản thân là một giáo viên đang trực tiếp giảng dạy Tin học, tôi mạnh dạn chọn đề tài: “Xây dựng hệ thống bài tập khi dạy câu lệnh rẽ nhánh và cấu trúc lặp”. Với đề tài này tôi hy vọng sẽ giúp cho bản thân vững vàng hơn, hiểu thêm về ngôn ngữ lập trình Pascal, để dạy học sinh của mình tiếp cận với ngôn ngữ lập trình Pascal, làm cho các em hiểu và thấy được ứng dụng rộng rãi của ngôn ngữ lập trình Pascal trong khoa học và trong đời sống. 2.3. Đối với học sinh Học sinh THPT còn coi tin học là môn học phụ, hầu hết các em chỉ tập trung vào học các môn thi vào các trường đại học và trung học chuyên nghiệp. Trường THPT Ba Đình là một trường chất lượng cao của huyện, do vậy các em cần phải được học và được rèn luyện, trang bị nhiều hơn trên mọi phương diện. Không những kỹ lưỡng về cơ bản mà còn phải nâng cao hơn yêu cầu SGK. Chính vì thế môn Tin học còn là hành trang để các em mang theo vào các trường đại học. III- GIẢI PHÁP VÀ TỔ CHỨC THỰC HIỆN: 3.1 – Phân tích những căn cứ xây dựng các bài tập. 3.1.1- Sự phức tạp của đối tượng hoạt động. Đối tượng hoạt động càng phức tạp thì hoạt động càng khó thực hiện. Vì vậy có thể dựa vào sự phức tạp của đối tượng để xây dựng các bài tập. Ví dụ 1: Khi cho học sinh luyện tập về câu lệnh rẽ nhánh có thể đưa ra các bài tập dựa vào sự phức tạp của biến số. Chẳng hạn: Viết chương trình cho máy nhận vào 3 số thực bất kỳ. Xét xem 3 số đó có làm thành 3 cạnh của một tam giác không? Ở ví dụ này học sinh có thể dễ dàng đưa ra thuật toán để viết được chương trình. Hay nói cách khác học sinh có thể dễ dàng xét tổng 2 cạnh của một tam giác bao giờ cũng lớn hơn cạnh còn lại. Thuật giải: Bước 1: Nhập vào 3 số a, b, c thực bất kỳ ứng với chiều dài của 3 cạnh của một tam giác; Bước 2: – Nếu (a < b + c) và (b < a + c) và (c < a + b) thì tiếp đến bước 3; – Nếu không thỏa mãn thì chuyển đến bước 4; Bước 3: Thông báo 3 số vừa nhập là ba cạnh của một tam giác; Bước 4: Thông báo 3 số vừa nhập không phải là ba cạnh của một tam giác; Bước 5 : Kết thúc. Dựa vào thuật toán trên học sinh dễ dàng viết được chương trình. Write (‘Hay nhap 3 so thuc tuy y’); readln(a,b,c); 3 If (a < b + c) and (b < a + c) and (c < a + b) then Write(‘Ba so vua nhap la ba canh cua mot tam giac’) Else Write (‘Ba so vua nhap khong phai la ba canh cua mot tam giac ’); Nhưng nếu như thêm yêu cầu nữa vào bài trên như: Nếu là tam giác thì tam giác đó là tam giác nhọn, tam giác vuông hay tam giác tù thì độ phức tạp lại càng tăng thêm rất nhiều. Các em không những phải so sánh tổng 2 hai cạnh với một cạnh mà các em không những lại phải so sánh một lần nữa mà còn phải sử dụng vòng lặp lồng nhau mới giải quyết được, do vậy giáo viên cần hướng dẫn cho các em thuật toán để giải quyết vấn đề này . Thuật toán : Bước 1: Nhập 3 số a, b, c tương ứng với ba cạnh của tam giác; Bước 2: Nếu (a < b + c) và (b < a + c) và (c < a + b) thì tiếp đến bước 3; Nếu không thỏa mãn điều kiện trên thì chuyển đến bước 10; Bước 3: Thông báo có là tam giác ; Bước 4: Đưa số lớn về c; Bước 5: a := a*a; b := b*b; c := c*c Bước 6: Nếu c < a + b thì chuyển đến bước 8; Nếu c = a + b thì chuyển sang bước 9; Nếu không thì chuyển đến bước 7; Bước 7: Thông báo là tam giác tù ; chuyển đến bước 11; Bước 8: Thông báo là tam giác nhọn ; chuyển đến bước 11; Bước 9: Thông báo là tam giác vuông ; chuyển đến bước 11; Bước 10: Thông báo không là tam giác ; Bước 11: Kết thúc. Giáo viên cần gợi ý cho các em khi đưa số lớn về c các em nên dùng một biến gọi là biến trung gian (tg). Begin Write (‘Hay nhap 3 so thuc tuy y’); Readln(a,b,c); If (a < b + c) and (b < a + c) and (c < a + b) then Begin Write( ‘Ba so vua nhap la ba canh cua mot tam giac’); {Dua so lon nhat ve c} If a > c then Begin tg := a; a := c; c := tg; End; If b > c then Begin tg := b; b := c; c := tg; End; {Moi so la binh phuong cua no} a:= a*a; b:= b*b; c := c*c; 4 If c < a + b then Writeln (‘Day la tam giac nhon’) Else If c = a + b then Writeln (‘Day la tam giac vuông ’) Else Writeln (‘Day la tam giac tu ’) End Else Writeln(‘Ba so vua nhap không phai la ba canh cua mot tam giac’); Readln; End. Tóm lại: Đối tượng hoạt động càng phức tạp thì hoạt động càng khó thực hiện khi gặp những bài toán dạng này, người giáo viên phải từ từ hướng dẫn học sinh đưa về dạng đơn giản nhất như khi có ít đối tượng tham gia hoạt động, từ đó học sinh dễ dàng lần lượt giải quyết được yêu cầu của bài tập. 3.1.2- Sự trừu tượng, khái quát của đối tượng hoạt động. Như chúng ta đã biết, tính chất của giải thuật là không giải một bài toán riêng lẻ nào cả mà giải cho một lớp bài toán có cùng cấu trúc nhưng khác nhau về mặt dữ liệu vào. Vì vậy, đối tượng hoạt động càng trừu tượng, khái quát có nghĩa là yêu cầu hoạt động càng cao. Do đó có thể coi mức độ trừu tượng, khái quát của đối tượng là căn cứ để xây dựng bài tập. Ví dụ2: Viết chương trình nhập vào một dãy số nguyên sau đó tính tổng các số âm và tính trung bình cộng của các số dương. a) Dãy đó có 10 phần tử. b) Số phần tử của dãy được nhận vào từ bàn phím trước khi vào từng phần tử của dãy. c) Số phần tử của dãy không được biết chính xác trước khi vào từng phần tử của dãy mà chỉ biết trong khoảng đó. Nó hoàn toàn xác định khi người ta vào dấu hiệu kết thúc dãy đó là nhận được số 0. Trường hợp a) số phần tử của dãy là một hằng số, các em chỉ cần bố trí vòng lặp For... là có thể thực hiện được, đoạn chương trình như sau: for i := 1 to 10 do Begin Write(‘Nhap so thu: ’,i,‘=’); Readln(a); If a < 0 then ta := ta + a Else Begin td := td + a; sd := sd + 1; End; End; Writeln(‘Tong cac so am la: ’, ta); Writeln(‘Trung binh cong cua cac so duong la: ’, (td/sd):8:2); Trường hợp b) hoạt động này được khái quát, giáo viên có thể gợi ý để học sinh có thể phát hiện ra và biết viết chương trình trong đó, ta cần một biến để nhận vào số phần tử của dãy trước khi thực hiện vòng lặp, biến đếm này phải chạy từ 1 đến n. Đoạn chương trình như sau: Write(‘Cho biet so phan tu cua day’); Readln(i); 5 For i :=1 to i do Begin Writeln(‘Nhap so thu: ’,i, ‘=’); Readln(a); If a < 0 then ta := ta + a Else Begin td := td + a; sd := sd + 1; End; Writeln(‘Tong cac so am la: ’, ta); Writeln(‘Trung binh cong cua cac so duong la: ’, (td/sd):8:2); End; Trường hợp c) hoạt động lại được khái quát một mức nữa bằng các thay một biến cụ thể bằng một điều kiện kết thúc của dãy số. Trong trường hợp này giáo viên có thể gợi ý cho các em để các em có thể tự đặt ra xem với yêu cầu này có gì khác với hai yêu cầu trước như: Dãy số có bao nhiêu phần tử? Đến lúc không muốn nhập nữa thì ta phải làm thế nào? Có thể dùng điều kiện gì để kết thúc dãy đó? Nên dùng vòng lặp như thế nào để nhập các số nguyên đó? Học sinh phải tìm cách trả lời được các câu hỏi đó. Giáo viên có thể gợi ý: Dùng một biến để xác định chỉ số phần tử của dãy và dùng vòng lặp với điều kiện sau để nhận vào phần tử của dãy số và điều kiện để kết thúc là nhận vào một số 0. Repeat i := 1; Write('Nhap so thu: ', i, '='); Readln(a); If a < 0 then ta := ta + a Else Begin td := td + a; sd := sd +1; End; Until a = 0; Writeln('Tong cac so am la: ',ta); Writeln('Trung binh cong cua cac so duong la: ',(td/sd):8:2); Như vậy: Hoạt động nhập vào một dãy số nguyên có thể được tiến hành ở ba bình diện khác nhau, trong đó tính trừu tượng và khái quát của đối tượng hoạt động ngày càng gia tăng tùy thuộc vào đối tượng học sinh. Ví dụ 3: Tính giá trị của biểu thức P như sau: a) P= 5  4  3  2  1 b) P= 5  15  ...  5n c) P= m 5  m 15  ...  m 5n Với m là một số nguyên lớn hơn 1 Trường hợp a) học sinh dễ dàng sử dụng vòng lặp For... để tính giá trị của P như sau: P := 0; For k := 1 to 5 do P := Sqrt(k + P); Write('Gia tri cua bieu thuc P la: ',P:8:2); Trường hợp b) sự khái quát hoá đã cao hơn học sinh phải biết tổ chức lặp như phần a) thì không giải quyết được yêu cầu bài. Vì vậy nhiệm vụ của người giáo viên phải hướng dẫn học sinh vòng lặp For... đi theo chiều Downto 6 từ n đến 1 để tính dần giá trị của P từ trong ra ngoài, còn nếu đi theo chiều to sẽ không giải quyết được bài toán. Repeat Write('Nhap gia tri cua n:'); Readln(n); Until n > 0; P := 0; For k := n downto 1 do P := Sqrt(5*k + P); Write('Gia tri cua bieu thuc P la: ',P:8:2); Trường hợp c) sự trừu tượng càng cao hơn, nhưng với ý thức khái quát hoá, học sinh sẽ đặt vấn đề n dấu căn bậc bất kỳ thì máy tính sẽ giải quyết bài toán như thế nào. Bây giờ các em suy nghĩ đến tính giá trị của biểu thức P có n dấu căn m. Để giúp học sinh không nản khi cảm thấy bài quá khó, nhiệm vụ của người thầy giáo nhắc lại cho học sinh biết căn bậc m của một số nào đó có số mũ là 1/m và để nhập được P lớn hơn 1 và n không âm thì phải tổ chức vòng lặp…để học sinh tính được P như sau: Repeat Write('Nhap gia tri cua n va m:'); Readln(n, m); Until (n > 0) and (m > 1); P := 0; For k := n downto 1 do P := Exp(1/m*Ln(5*k + P)); Write('Gia tri cua bieu thuc P la: ',P:8:2); Tóm lại việc xây dựng dược hệ thống bài tập như vậy sẽ giúp cho học sinh tăng khả năng tư duy, khả năng trừu tượng hoá, khái quát hoá. 3.1.3- Nội dung của hoạt động. Nội dung của hoạt động chủ yếu là những tri thức liên quan đến hoạt động và những điều kiện khác của hoạt động. Nội dung hoạt động càng gia tăng thì hoạt động càng khó thực hiện cho nên nội dung hoạt đông cũng là một căn cứ để phân loại bài tập. Ví dụ 4: Nhận vào m phần tử của một dãy số, in ra các số chia hết 5 và cho 9, tính tổng các số chia hết cho 9. Có thể phân loại bài tập dựa vào sự phức tạp của nội dung bằng những mức sau: a) Nhập vào m phần tử là số nguyên dương và in ra màn hình dãy vừa nhập. b) Nhập vào m phần tử là số nguyên, in ra màn hình các phần tử là số chia hết cho 9 và chia hết cho 5. Tính tổng các số chia hết cho 9. c) Nhập vào m phần tử là số nguyên lớn hơn 3 và nhỏ hơn 3000, in ra màn hình các phần tử là số chia hết cho 9 và chia hết cho 5. Tính tổng các số chia hết cho 9. Ở nội dung a) học sinh dễ dàng độc lập viết chương trình nhận vào số m và bố trí vòng lặp để nhận vào các số nguyên không âm như sau: Write('Nhap vao bao nhieu phan tu la nguyen duong? '); Readln(m); 7 i := 0; Repeat i := i + 1; Write('Nhap so thu ',i,' = '); Readln(So[i]); if So[i] < 0 then Begin Writeln('Moi nhap lai'); i := i - 1; Until i = m; Write('Day vua nhap la: '); For i := 1 to m do Write(So[i]:3); End; Ở nội dung b) thêm nội dung in ra các số hết cho 9 và chia hết cho 5, sau đó tính tổng các số chia hết cho 9, rất có thể các em sẽ lúng túng, các em có thể chưa nghĩ ra được ngay, Vì vậy, giáo viên cần hướng dẫn cho các em chỉ cần thêm điều kiện nhập được ở số sau Until, như vậy học sinh sẽ dễ dàng viết được lệnh đó: Write('Nhap vao bao nhieu phan tu la nguyen duong? '); Readln(m); i := 0; Repeat i := i + 1; Write('Nhap so thu ',i,' = '); Readln(So[i]); if So[i] < 0 then Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End; Until i = m; Write('So chia het cho 5 va 9 la: '); for i := 1 to m do Begin If (So[i] mod 5 = 0) and (So[i] mod 9 = 0) then Write(So[i]:5); End; Readln; For i := 1 to m do If So[i] mod 9 = 0 then s := s + So[i]; Write('Tong cac so chia het cho 9 la: ',s:3); Khi đến nội dung c) mặc dù thêm nội dung là các số đó lớn hơn 3 và nhỏ hơn 3000 nhưng đã được hướng dẫn theo tư duy ở ý b) các em dễ dàng làm được. Write('Nhap vao bao nhieu phan tu la nguyen duong? '); Readln(m); i := 0; s := 0; Repeat i := i + 1; Write('Nhap so thu ',i,' = '); Readln(So[i]); if (So[i] <= 3) or (So[i] >= 3000) then Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End; Until i = m; Write('So chia het cho 5 va 9 la: '); for i := 1 to m do Begin 8 If (So[i] mod 5 = 0) and (So[i] mod 9 = 0) then Write(So[i]:7); End; Readln; For i := 1 to m do If So[i] Mod 9 = 0 then s := s + So[i]; Write('Tong cac so chia het cho 9 la: ',s:3); Như vậy việc gia tăng thêm nội dung hoạt động khi hoạt động càng khó thực hiện, cho nên giáo viên trong trường hợp này phải hướng dẫn để cho học sinh vận dụng những kết quả của phần trước để suy nghĩ tìm cách giải quyết phần sau. 3.1.4 - Chất lượng của hoạt động. Chất lượng của hoạt động thường là tính độc lập hoặc độ thành thạo, cũng có thể lấy làm căn cứ để xây dựng bài tập. Ví dụ 5: Xây dựng chương trình, có thể xây dựng bài tập theo 3 mức độ sau: a) Hiểu chương trình. b) Trình bày lại dược việc xây dựng chương trình. c) Độc lập xây dựng chương trình. Ví dụ cụ thể như sau: Viết chương trình tính: S = 1 + 2 + 3 + … + n với n nhập từ bàn phím khi chạy chương trình. Trong ví dụ này học sinh phải hiểu được đây là phép tính tổng của một dãy số, vì vậy sẽ phải dùng vòng lặp có số lần định trước để viết thuật giải, đó là mức độ hiểu chương trình. Ở mức độ trình bày lại được việc xây dựng chương trình là bước đầu tiên nhập n, dùng vòng lặp For… cho biến chạy từ 1 đến n, sau đó cho cộng dồn ở sau do..., thoát khỏi vòng lặp thì in giá trị của tổng. Ở mức độ độc lập xây dựng chương trình người giáo viên phải dẫn dắt để học sinh biết xác định số biến phải dùng là 2 biến, một biến đếm thuộc kiểu số nguyên, một biến chứa giá trị của tổng thuộc kiểu số thực. Trước khi vào vòng lặp thì phải khởi tạo gán cho biến chứa tổng bằng 0. Xác định trong vòng lặp For… Thì phép tính cộng dồn ở sau do... phải là s := s + i, khi thông báo kết quả phải dùng lệnh Write và định dạng cho tổng s là số thực. Var i: integer; S: real; Begin Write(‘Nhap gia tri cua n=’); Readln(n); S := 0; For i := 1 to n do S := S + i Write(‘Tong cua day S = ’,S:8:2); Readln; End; Sau khi học sinh đã viết xong chương trình để kiểm tra độ thành thạo của học sinh bằng cách cho thêm ví dụ tương tự như sau: 9 Tính tổng S = 1 + 1/2 + 1/3 + 1/4 +…+ 1/n với n nhập khi chạy chương trình. Lúc này mức độ thành thạo của học sinh là việc khai báo biến, biến đếm thuộc kiểu nguyên, biến chứa tổng thuộc kiểu thực và trước khi vào vòng lặp là phải gán cho biến chứa giá trị của tổng bằng 0. Vì bài toán tương tự như bài tập đã được làm. Mức độ độc lập xây dựng chương trình là học sinh viết được lệnh cộng dồn ở sau Do là S := S + 1/i; và viết được toàn bộ chương trình. Var i: integer; S: real; Begin Write(‘Nhap gia tri cua n=’); Readln(n); S := 0; For i := 1 to n do S := S + 1/i Write(‘Tong cua day S = ’,S:8:2); Readln End; Để kiểm tra độ thành thạo của học sinh và rèn kỹ năng nắm cấu trúc của vòng lặp có số lần lặp không xác định giáo viên cũng có thể thêm một số ví dụ nhỏ sau: Em hãy cho biết 2 chương trình sau in ra giá trị nào của a 1) Program VonglapWhile; Var a: integer; Begin a := 13 While a <12 do Writeln(a); End. 2) Program VonglapRepeat; Var a: integer; Begin a := 13; Repeat Writeln(a); Until a < 12; End. Học sinh phải nắm vững cấu trúc của hai vòng lặp này thì mới phát hiện ra, ở vòng lặp While… điều kiện lặp là a < 12, mà a = 13 nên không đủ điều kiện, như vậy chương trình không in giá trị nào của a. Vòng lặp Repeat… điều kiện để dừng vòng lặp là a < 12, mà a = 13 không đủ điều kiện để dừng vòng lặp như vậy chương trình sẽ chạy mãi không dừng lại được và sẽ in ra vô số số13. 3.1.5- Phối hợp nhiều phương diện làm căn cứ xây dựng bài tập. Hoạt động nhận thức bao gồm hai quá trình: Nhận thức cảm tính và nhận thức lý tính. Nhận thức cảm tính là quá trình nhận thức cái bên ngoài của sự vật hiện tượng, đây chính là quá trình nhận thức bậc thấp của quá trình tư duy, ở bậc này học sinh chỉ có khả năng nhận thức được chính sự vật hiện tượng đó chưa có cái nhìn sâu sắc về bản chất, nguồn gốc sự vật hiện tượng của nó và mối quan hệ của nó về thế giới xung quanh. Nhận thức lý tính là bậc cao của quá trình tư duy, Ở bậc này học sinh có thể nhận thức cái bên trong, cái bản chất của sự vật hiện tượng học sinh mới có thể khái quát hoá và sáng tạo. Nếu phối hợp nhiều phương diện làm căn cứ tiến hành dạy học ở câu lệnh rẽ nhánh và lặp trong lập trình. Trong các bài tập ví dụ bài tập đưa ra ở phần trên được tiến hành đi từ dễ đến khó. Các bài tập từng bước tăng dần trong hoạt động nhận thức. Trong dạy 10 học lập trình, hoạt động này có thể kể như nhận dạng, thể hiện phân tích, so sánh, trừu tượng hoá, khái quát hoá. Các hoạt động này cũng được thực hiện tuần tự hoặc xen kẽ trong những bài tập đã cho ở trên. Hoặc ví dụ sau: Ví dụ 6: a) Nhận vào một dãy số gồm 20 số nguyên. b) Tìm giá trị nhỏ nhất trong dãy c) In ra các số còn lại trong dãy. d) In ra các số nguyên tố trong dãy. Nhìn vào yêu cầu của bài toán ta thấy nội dung hoạt động và mức độ độc lập của hoạt động. Ở phần a và b học sinh có thể tự làm (2) hoặc làm nhưng có sự gợi ý của giáo viên (1). Nếu học sinh không tự làm mà không cần gợi ý thì mức (2) đã cao hơn mức( 1) về mức độ độc lập của hoạt động. Phần a và b có thể làm như sau: i := 0; Repeat i := i + 1; Write('Nhap so thu ',i,' = '); Read(SO[i]); Until i = 10; Readln; NN := SO[1]; For i := 2 to 10 do If NN > SO[i] then NN := SO[i]; Writeln; Write('So nho nhat trong cac so la: ', NN); Readln; Writeln; Write('Cac so con lai la:'); For i := 1 to 10 do If SO[i] > NN then Write(SO[i]:5); Khi chuyển sang phần c) chúng ta mong muốn học sinh khá giỏi có thể viết được, nếu học sinh lúng túng giáo viên có thể gợi ý: Thế nào là số nguyên tố? Giáo viên thông báo: số nguyên tố không bao giờ có ước số từ 2 đến căn bậc hai của nó, hay không bao giờ có ước số từ 2 đến -1. i := 0; Repeat i := i + 1; Write(‘Nhap so thu ’, i, ‘ =’); Readln(so); If so >= 2 then Begin b := true; For u := 2 trunc((sqrt(so)) do If so mod u = 0 then Begin b := false; break end; 11 end else Until i = 20; Write(‘Nhap lai ’); Trong phần c) hoc sinh cũng có thể làm được từ (3) hoặc làm nhưng có sự gợi ý của giáo viên (2’). Nếu học sinh làm mà cần có sự gợi ý của giáo viên thì mức độ (2’) cũng chỉ hơn mức độ (1) ở sự phức hợp của hoạt động, nhưng lại thấp hơn mức đô (3) về tính độc lập của hoạt động, còn bậc (2) lại chỉ kém mức độ(3) về sự phức hợp của hoạt động. Tóm lại: Phối hợp nhiều phương diện hoạt động cũng là một căn cứ để người giáo viên phải lưu ý đến dạng bài tập này và chuẩn bị tốt những câu hỏi gợi ý học sinh để giải quyết tốt các vấn đề gặp phải. 3.2 . Hệ thống bài tập khi dạy câu lệnh rẽ nhánh và cấu trúc lặp. Bài 1: Viết chương trình cho máy nhận vào ba số. Xét xem ba số đó có là ba cạnh của một tam giác hay không? Nếu có thì ta giác đó là tam giác gì? (Vuông, nhọn hay tù). Chương trình: Program Tamgiac; Uses Crt; Var a, b, c, tg: Real; Begin Clrscr; Writeln(‘Cho ba so a, b, c’); Readln(a); Readln(b); Readln(c); If (a < b + c) and (b < a + c) and (c < a + b) then Begin Writeln(‘Ba so vua nhap la ba canh cua mot tam giac’); If a > c then Begin tg := a; a :=c; c: = tg; End; If b > c then Begin tg := b; b := c; c := tg; End; a := a*a; b := b*b; c := c*c; If c < a + b then Writeln(‘Day la tam giac nhon’) Else Writeln(‘Day la tam giac vuong’) Else Writeln(‘Day la tam giac tu’); End Else Writeln(‘Day khong phai la ba canh cua mot tam giac’); Readln; End. Bài 2: Viết chương trình nhập vào một dãy số nguyên sau đó tính tổng các số âm và tính trung bình cộng của các số dương. a) Dãy số có 10 phần tử. b) Số phần tử của dãy được nhập từ bàn phím trước khi vào từng phần tử của dãy. 12 c) Số phần tử của dãy không được biết chính xác trước khi vào từng phần tử của dãy mà chỉ biết tron khoảng nào đó. Nó hoàn toàn được xác định khi người ta nhập vào dấu hiệu kết thúc dãy đó là nhận được số 0. Chương trình: a) Program Tinh_tong; Uses Crt; Var i, a, sd, td, ta: Integer; Begin Clrscr; sd := 0; td := 0; ta := 0; for i := 1 to 10 do Begin Write(‘Nhap so thu: ’,i,‘=’); Readln(a); If a < 0 then ta := ta + a Else Begin td := td + a; sd := sd + 1; End; End; Writeln(‘Tong cac so am la: ’, ta); Writeln(‘Trung binh cong cua cac so duong la: ’, (td/sd):8:2); readln; End. b) Program TinhTong_va_TBCduong; Uses Crt; Var i, a, sd, td, ta: Integer; Begin Clrscr; sd := 0; td := 0; ta := 0; Write(‘Cho biet so phan tu cua day’); Readln(i); For i :=1 to i do Begin Writeln(‘Nhap so thu: ’, i, ‘=’); Readln(a); If a < 0 then ta := ta + a Else Begin td := td + a; sd := sd + 1; End; Writeln(‘Tong cac so am la: ’, ta); Writeln(‘Trung binh cong cua cac so duong la: ’, (td/sd):8:2); End; Readln; End. c) Program Tinhtong_va_TBCduong; Uses Crt; Var i, a, sd, td, ta: Integer; Begin Clrscr; sd := 0; td := 0; ta := 0; i := 0; Repeat i := 1; 13 Write('Nhap so thu: ', i, '='); Readln(a); If a < 0 then ta := ta + a Else Begin td := td + a; sd := sd +1; End; Until a = 0; Writeln('Tong cac so am la: ',ta); Writeln('Trung binh cong cua cac so duong la: ',(td/sd):8:2); Readln; End. Bài 3. Tính giá trị của biểu thức P như sau: a) P = 5  4  3  2  1 b) P = 5  15  ...  5n c) P = m 5  m 15  ...  m 5n Với m là một số nguyên lớn hơn 1. Chương trình: a) Program Tinh_GTTB_P; Uses Crt; Var k: Integer; P:Real; Begin Clrscr; P := 0; For k := 1 to 5 do P := Sqrt(k + P); Write('Gia tri cua bieu thuc P la: ',P:8:2); Readln; End. b) Program Tinh_GTBT_P(n); Uses Crt; Var k,n: Integer; P:Real; Begin Clrscr; Repeat Write('Nhap gia tri cua n:'); Readln(n); Until n > 0; P := 0; For k := n downto 1 do P := Sqrt(5*k + P); Write('Gia tri cua bieu thuc P la: ',P:8:2); Readln; End. c) Program Tinh_GTBT_P(m); Uses Crt; Var k,n,m: Integer; P:Real; Begin Clrscr; Repeat Write('Nhap gia tri cua n va m:'); 14 Readln(n, m); Until (n > 0) and (m > 1); P := 0; For k := n downto 1 do P := Exp(1/m*Ln(5*k + P)); Write('Gia tri cua bieu thuc P la: ',P:8:2); Readln; End. Bài 4: a) Nhập vào m phần tử là số nguyên dương và in ra màn hình dãy vừa nhập. b) Nhập vào m phần tử là số nguyên dương, in ra màn hình các phần tử là số chia hết cho 9 và chia hết cho 5. Tính tổng các số chia hết cho 9. c) Nhập vào m phần tử là số nguyên lớn hơn 3 và nhỏ hơn 3000, in ra màn hình các phần tử là số chia hết cho 9 và chia hết cho 5.Tính tổng các số chia hết cho 9. Chương trình: a) Program Nhap; Uses Crt; Var i, m :Integer; So: Array[1..20] of Integer; Begin Clrscr; Write('Nhap vao bao nhieu phan tu la nguyen duong? '); Readln(m); i := 0; Repeat i := i + 1; Write('Nhap so thu ',i,' = '); Readln(So[i]); if So[i] <= 0 then Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End; Until i = m; Write('Day vua nhap la: '); For i := 1 to m do Write(So[i]:5); Readln; End. b) Program Nhap; Uses Crt; Var i, m, s: Integer; So: Array[1..20] of integer; Begin Clrscr; Write('Nhap vao bao nhieu phan tu la nguyen duong? '); 15 Readln(m); i := 0; Repeat i := i + 1; Write('Nhap so thu ',i,' = '); Readln(So[i]); if So[i] <= 0 then Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End; Until i = m; Write('So chia het cho 5 va 9 la: '); for i := 1 to m do Begin If (So[i] mod 5 = 0) and (So[i] mod 9 = 0) then Write(So[i]:5); End; Readln; For i := 1 to m do If So[i] mod 9 = 0 then s := s + So[i]; Write('Tong cac so chia het cho 9 la: ',s:3); Readln; End. c) Program Nhap; Uses Crt; Var i,m,s :Integer; So :array[1..50] of integer; Begin Clrscr; Write('Nhap vao bao nhieu phan tu la nguyen duong? '); Readln(m); i := 0; s := 0; Repeat i := i + 1; Write('Nhap so thu ',i,' = '); Readln(So[i]); if (So[i] <= 3) or (So[i] >= 3000) then Begin Writeln('Moi nhap lai so thu ',i); i := i - 1; End; Until i = m; Write('So chia het cho 5 va 9 la: '); for i := 1 to m do Begin If (So[i] mod 5 = 0) and (So[i] mod 9 = 0) then Write(So[i]:7); End; Readln; For i := 1 to m do If So[i] Mod 9 = 0 then s := s + So[i]; Write('Tong cac so chia het cho 9 la: ',s:3); Readln; End. 16 Bài 5: a) Nhập vào một dãy số gồm 20 số nguyên. b) Tìm số có giá trị nhỏ nhất trong dãy. c) In ra các số còn lại trong dãy đó. d) In ra các số nguyên tố trong dãy đó. Chương trình: a, b, c) Program NHO_NHAT; Uses Crt; Var i, NN:Integer; SO:Array[1..10] of Integer; Begin Clrscr; i:=0; Repeat i:=i+1; Write('Nhap so thu ',i,' = '); Read(SO[i]); Until i = 10; Readln; NN := SO[1]; For i := 2 to 10 do If NN > SO[i] then NN := SO[i]; Writeln; Write('So nho nhat trong cac so la: ', NN); Readln; Writeln; Write('Cac so con lai la:'); For i := 1 to 10 do If SO[i] > NN then Write(SO[i]:5); Readln; End. d) Program IN_SNTO; Uses Crt; Var i,j:Integer;b:Boolean; SO:Array[1..20] of Integer; Begin Clrscr; i:=0; Repeat i:=i+1; Write('Nhap so thu ',i,' = '); Read(SO[i]); Until i = 20; Readln; Write('Cac so nguyen to cua day la: '); For i := 1 to 20 do If So[i] = 2 then Write(So[i]: 4) Else If SO[i] > 2 then Begin b := true; 17 for j := 2 to trunc(sqrt(So[i])) do If So[i] mod j = 0 then Begin b:=false; break; If b then Write(SO[i]:4); end; Readln; End; End. IV - KIỂM NGHIỆM Qua 2 năm áp dụng đề tài để giảng dạy tin học tại trường THPT Ba Đình bản thân nhận thấy kết quả giảng dạy được nâng lên hẳn cụ thể ở bảng dưới đây: Năm học 2012 -2013: Năm chưa áp dựng đề tài: Lớp 11A 11B 11D 11G 11H 11K X.loại Giỏi 18 3 7 16 9 13 Khá 8 11 5 19 12 13 TB 22 13 16 13 14 10 Yếu 5 1 2 1 Kém T.số HS 48 27 33 49 37 37 Năm học 2013 -2014 : Năm áp dụng đề tài Lớp 11A 11D 11G 11H 11K 11M X.loại Giỏi 17 22 10 23 13 9 Khá 31 24 36 24 22 26 TB 1 1 2 6 Yếu 1 1 Kém T.số HS 49 48 48 47 42 35 Năm học: 2014 -2015: Năm áp dụng đề tài Lớp 11A 11D 11G 11H 11K 11M X.loại Giỏi 34 9 24 15 26 14 Khá 10 30 21 29 5 28 TB 4 4 2 Yếu Kém T.số HS 44 43 45 44 35 44 11M 11N Tổng 11 12 13 18 7 13 95 87 114 9 36 38 305 11N 11P Tổng 11 25 3 23 6 5 3 39 37 128 194 18 5 0 345 11E Tổng 10 31 4 132 154 14 0 0 300 45 Qua bảng tổng hợp kết quả của 3 năm học mà tôi đã dạy, đã phần nào minh chứng cho kết quả của đề tài. 18 PHẦN C – KẾT LUẬN: Ngôn ngữ lập trình nói chung đóng vai trò rất quan trọng trong việc xây dựng các chương trình ứng dụng để phục vụ cho cuộc sống. Nhờ sự phát triển của tin học (trong đó các nhà lập trình chuyên nghiệp) mà hiện nay hầu hết các lĩnh vực trong xã hội đã ứng dụng được tin học để giải quyết công viêc nhanh, hiệu quả và chính xác hơn. Ngôn ngữ lập trình Pascal đã trở thành ngôn ngữ lập trình phổ biến nhất trên thế giới sử dụng trong lĩnh vực giảng dạy. Trong quá trình giảng dạy, người giáo viên nếu biết thực hiện tốt hoạt động dạy học của mình, hướng dẫn khéo léo hoạt động học của HS. Trong tiết học, làm cho học sinh chủ động để tìm tòi lại kiến thức đã học qua đó giải quyết được vấn đề do giáo viên đặt ra. Trong quá trình giải quyết vấn đề, giáo viên chỉ ra những sai lầm mà học sinh mắc phải do hiểu không rỏ vấn đề giúp cho các em hiểu rỏ hơn về câu lệnh, thì kết quả giáo dục mới đạt được, làm cho học sinh yêu thích môn học, ham học hỏi và tìm tòi sáng tạo. Trên đây là kinh nghiệm “Xây dựng hệ thống bài tập khi dạy câu lệnh rẽ nhánh và cấu trúc lặp” của cá nhân tôi xuất phát từ việc giảng dạy trong thực tế, nó còn có nhiều hạn chế vì điều kiện thời gian... Tôi mong được sự đóng góp ý kiến của đồng nghiệp để đề tài được hoàn thiện hơn. Xin chân thành cảm ơn ! Nga Sơn, ngày 05 tháng 05 năm 2015 XÁC NHẬN CỦA ĐƠN VỊ 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. Tác giả Trần Ngọc Chiến 19
- Xem thêm -

Tài liệu liên quan