SKKN: Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal cho học sinh lớp 11
lượt xem 11
download
Đề tài “Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal cho học sinh lớp 11” nhằm cung cấp cho học sinh những kiến thức khái quát hơn về cấu trúc lặp và rèn luyện kỹ năng lập trình cho học sinh thông qua một số bài toán cụ thể.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: SKKN: Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal cho học sinh lớp 11
- Trang 1
- DANH MỤC CÁC CHỮ VIẾT TẮT 1. THPT: Trung học phổ thông 2. HSG: Học sinh giỏi 3. HS: Học sinh 4. SKKN: Sáng kiến kinh nghiệm 5. NXB: Nhà xuất bản 6. SGK: Sách giáo khoa Trang 2
- MỤC LỤC Trang 3
- BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN 1. LỜI GIỚI THIỆU Một trong những yếu tố quan trọng và không thể thiếu của một trương trình là “việc điều khiển”, cụ thể là các cấu trúc điều khiển, cũng là thành tố kết hợp đồng thời giữa dữ liệu và tác vụ. Cấu trúc điều khiển là một trong các đặc trưng cơ bản của phương pháp lập trình cấu trúc. Trong đó người ta sử dụng ba cấu trúc điều khiển để tạo nên logic của chương trình. Mọi vấn đề về logic đều được giải quyết bằng cách sử dụng linh hoạt ba cấu trúc điều khiển là: Cấu trúc tuần tự Cấu trúc rẽ nhánh Cấu trúc lặp Trong chương trình tin học lớp 11, các em học sinh đã được làm quen với lập trình có cấu trúc trong đó có cấu trúc lặp nhưng trong quá trình học tập và rèn luyện học sinh vẫn gặp phải một số khó khăn trong lập trình, chưa biết cách tối ưu hóa thuật toán, thậm chí còn mắc sai lầm khi lập trình giải các bài toán có sử dụng cấu trúc lặp. Vì những lý do trên tôi chọn đề tài “Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal cho học sinh lớp 11” nhằm cung cấp cho học sinh những kiến thức khái quát hơn về cấu trúc lặp và rèn luyện kỹ năng lập trình cho học sinh thông qua một số bài toán cụ thể. 2. TÊN SÁNG KIẾN “Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal cho học sinh lớp 11” 3. TÁC GIẢ SÁNG KIẾN Họ tên: Nguyễn Thị Nụ Địa chỉ: Trường THPT Yên Lạc 2 – Huyện Yên Lạc – Tỉnh Vĩnh Phúc Số điện thoại: 0965170380 E_mail: nunguyen1101@gmail.com 4. CHỦ ĐẦU TƯ SÁNG TẠO RA SÁNG KIẾN Họ tên: Nguyễn Thị Nụ Trình độ chuyên môn: Cử nhân Tin Học Đơn vị công tác: Trường THPT Yên Lạc 2 – Huyện Yên Lạc – Tỉnh Vĩnh Phúc Trang 4
- 5. LĨNH VỰC ÁP DỤNG SÁNG KIẾN Rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal giảng dạy môn Tin học lớp 11 và bồi dưỡng học sinh tham gia kì thi chọn học sinh giỏi các cấp môn Tin học. 6. NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG Từ ngày 01/08/2019 7. MÔ TẢ BẢN CHẤT CỦA SÁNG KIẾN 7.1. Tổng quan các vấn đề nghiên cứu 7.1.1. Mục đích nghiên cứu Góp phần đổi mới phương pháp dạy học sinh giỏi môn Tin học theo hướng phát huy tính tích cực, chủ động và sáng tạo của học sinh giúp học sinh tiếp thu tri thức một cách có hiệu quả. Góp phần gây hứng thú học tập môn Tin học cho học sinh tham gia thi chọn học sinh giỏi, tránh việc học thụ động, học vẹt. Giúp học sinh lĩnh hội tri thức một cách khoa học, củng cố và khắc sâu kiến thức. Qua đề tài này tôi mong muốn cung cấp cho học sinh một những vấn đề mà các em đang gặp phải về kĩ năng sử dụng cấu trúc lặp trong khi lập trình giúp các em chủ động hơn trong học tập, tích luỹ kiến thức, kỹ năng lập trình. 7.1.2. Bản chất đối tượng nghiên cứu Đưa ra hệ thống lý thuyết về cấu trúc lặp và ứng dụng cấu trúc lặp giải các bài tập trong ngôn ngữ lập trình Pascal giúp học sinh lĩnh hội tri thức, giúp các em tích cực, chủ động tích lũy kiến thức. Qua đó, học sinh phát triển được tư duy logic thông qua hệ thống bài tập giúp các em rèn luyện được tính tự giác, tính kỉ luật, thói quen tự học đó là những đức tính rèn luyện tốt của học sinh. 7.1.3. Đối tượng, phạm vi nghiên cứu Đối tượng: Cấu trúc lặp trong lập trình Phạm vi: Các vấn đề về cấu trúc lặp trong chương trình tin học lập trình trên ngôn ngữ Pascal. 7.1.4. Phương pháp nghiên cứu Phương pháp Nghiên cứu lí luận chung. Khảo sát điều tra thực tế dạy học. Tổng hợp đúc rút kinh nghiệm. Trang 5
- Cách thực hiện Trao đổi với đồng nghiệp, tham khảo ý kiến giáo viên cùng bộ môn. Liên hệ thực tế trong nhà trường, áp dụng và đúc rút kinh nghiệm qua quá trình giảng dạy. Thông qua việc giảng dạy trực tiếp học sinh lớp 11 và học sinh tham gia thi chọn học sinh giỏi môn Tin học khối 10 tại trường THPT Yên Lạc 2 năm học 2019 2020. 7.1.5. Giới hạn về không gian của phương pháp nghiên cứu Đề tài được đề cập với đồng nghiệp và thực nghiệm sư phạm qua các em học sinh lớp 11A2 và các em học sinh tham gia dự kì thi chọn học sinh giỏi môn Tin học lớp 10 năm học 20192020 7.1.6. Phạm vi nghiên cứu Tôi đã nghiên cứu đề tài này trong suốt quá trình giảng dạy và thực nghiệm đề tài này trong năm học 20192020. 7.2. Phần nội dung 7.2.1. Cơ sở lý luận Cấu trúc lặp là là một trong ba cấu trúc cơ bản trong lập trình có cấu trúc. Tuy nhiên trước một bài toán lập trình tin học có các thao tác lặp đi lặp lại nhiều học sinh thường lúng túng, không biết nên lựa chọn và sử dụng câu lệnh lặp nào cho phù hợp với yêu cầu bài toán và tối ưu hóa thuật toán? Một số học sinh khá, giỏi có thể sử dụng cấu trúc lặp để mô tả nhưng đa số chưa biết tối ưu hóa thuật toán để giảm số lần lặp và điều đó gây tâm lý chán nản cho các em. Với tình hình ấy để giúp học sinh có kĩ năng tốt hơn trong việc sử dụng cấu trúc lặp để mô tả thuật toán, thì người giáo viên cần tăng cường rèn luyện cho học sinh kĩ năng sử dụng cấu trúc lặp từ các các bài toán cơ bản quen thuộc mà các em đã biết, khai thác các yếu tố đặc trưng của một số bài toán cơ bản để tìm thuật toán cho các bài toán mới, dựa vào đặc điểm cụ thể của từng bài toán để tối ưu hóa thuật toán. Việc rèn luyện kĩ năng lập trình cho học sinh từ những bài toán cơ bản để xây dựng thuật toán cho các bài toán tương tự hoặc các bài toán mở rộng từ các bài toán cơ bản đó là một quá trình giúp học sinh rèn luyện kỹ năng lập trình. 7.2.2. Cơ sở thực tiễn Trường THPT Yên lạc 2 là ngôi trường ở vùng nông thôn nằm dưới chân đê dải sông Hồng nên đa số học sinh chưa có cơ hội, điều kiện tiếp xúc với công nghệ và máy tính. Vì vậy, tin học là một môn học tương đối lạ lẫm và khó đối với học sinh trường tôi. Đặc biệt là chương trình tin học 11, với các em học lập trình còn khó hơn học toán, lí, hóa, .. vì điều kiện cơ sở vật chất của trường còn nhiều khó khăn, học sinh chỉ học chính khóa trên lớp về nhà lại không có máy tính để thực Trang 6
- hành. Điều này dẫn đến ý thức tự giác của học sinh chưa cao, đặc biệt là các em học để thi học sinh giỏi lại càng khó. Với đội tuyển học sinh giỏi 10, hầu hết các em đều chưa có bất kì kiến thức cơ bản nào liên quan đến lập trình, gia đình chưa có máy tính để các em thực hành. Vì vậy giáo viên dạy đội tuyển phải bắt đầu rèn luyện cho các em từ những câu lệnh cơ bản nhất. Cơ sở trên đã giúp tôi áp dụng đề tài rèn luyện kĩ năng sử dụng cấu trúc lặp trong lập trình Pascal giảng dạy cho học sinh khối 11 và áp dụng cho học sinh tham dự kì thi chọn học sinh giỏi Tin học 10 tại trường THPT Yên Lạc 2. 7.2.3. Nội dung cụ thể Tất cả các nội dung, các ví dụ, bài tập trong đề tài này được xây dựng trên ngôn ngữ lập trình Pascal 8. Lặp Xét 2 bài toán sau đây: Bài toán 1: Tính và đưa kết quả ra màn hình tổng S = 1+2+3+…+100 Bài toán 2: Tính và đưa kết quả ra màn hình tổng S = 1+2+3+..+n+… cho đến khi S > 105 Với cả 2 bài toán trên, dễ thấy cách để tính tổng S có nhiều điểm tương tự: Xuất phát, S được gán giá trị 0; Tiếp theo công vào tổng S một giá trị i với i = 1,2,3,4,5,…. Việc cộng này được lặp lại một số lần. Đối với bài toán 1, số lần lặp là 100 và việc cộng vào tổng S sẽ kết thúc khi thực hiện cồn việc 100 lần. Đối với bài toán 2, số lần lặp chưa biết trước nhưng việc cộng vào tổng S sẽ kết thúc khi điều kiện S > 105 được thỏa mãn. Nói chung, ta thấy trong một số thuật toán có những thao tác phải lặp đi lặp lại nhiều lần. Cấu trúc lặp mô tả thao tác lặp được phân biệt 2 loại là lặp với số lần biết trước và lặp với số lần chưa biết trước. Các ngôn ngữ lập trình đều có các câu lệnh để mô tả cấu trúc lặp. 9. Lặp với số lần biết trước và câu lệnh FOR – DO 10. Cú pháp và hoạt động của câu lệnh For – do Có 2 thuật toán tong1a và tong1b để giải bài toán 1 như sau: Thuật toán tong1a Bước 1: S ← 0; i ← 0; Trang 7
- Bước 2: i ← i+1; Bước 3: Nếu i 100 thì chuyển đến bước 5; Bước 4: S ← S+i rồi quay lại bước 2; Bước 5: Đưa S ra màn hình rồi kết thúc. Trong thuật toán tong1a, giá trị i khi bắt đầu tham gia vòng lặp là 1 và sau mỗi lần lặp i tăng lên 1 đơn vị cho đến khi i > 100 thì kết thúc lặp (thực hiện 100 lần). Trong thuật toán tong1b giá trị i khi bắt đầu tham gia vòng lặp là 100 và sau mỗi lần lặp giảm đi 1 cho đến khi i
- + Giá trị biến đếm được điều khiển tự động vì vậy câu lệnh sau do không được thay đổi giá trị biến đếm; + Không giống với các ngôn ngữ khác pascal không kiểm tra > trong câu lệnh for –todo để kết thúc vòng lặp mà kiểm tra = để thực hiện lần lặp cuối cùng. Vì lẽ đó việc can thiệp vào biến đếm có thể gây ra sự cố “vòng lặp vô tận”. Ngay cả khi biến đã duyệt hết phạm vi của kiể dữ liệu thì biến lại quay lại giá trị 0 và mọi thứ lại tiếp tục… trừ khi gõ CTRL+ Break; + Trong câu lệnh for , được tính từ khi bắt đầu vòng lặp để tính số lần lặp, nên trong vòng lặp dù có câu lệnh thay đổi , thì số lần lặp vẫn không thay đổi. Sử dụng cấu trúc lặp dạng tiến và dạng lùi như trên để mô tả quá trình lặp trong thuật toán tong1a và tong1b chương trình có thể được cài đặt như sau: Program tong1a; Var S, i: longint; Begin S:=0; For i:= 1 to 100 do S:= S+i; Write (‘Tong S la: ‘, S); Readln; End. Program tong1b; Var S, i: longint; Begin S:=0; For i:= 100 downto 1 do S:= S+i; Write (‘Tong S la: ‘, S); Readln; Trang 9
- End. 11. Một số ví dụ Ví dụ 1: Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n (0
- Uses crt; var i, dem: integer; Begin Clrscr; dem:=0; For i:=20 to 100 do if i mod 2 0 then inc(dem); write(‘Co ‘,dem,’ so le trong doan tu 20 den 100’); readln end. Ví dụ 3: Viết chương trình đếm xem có bao nhiêu số chẵn, bao nhiêu số lẻ trong khoảng từ n đến m (0
- if i mod 2 0 then inc(d_le) else inc(d_chan); Writeln(‘Co ‘,d_chan,’ so chan trong khoang tu ‘,n,’ den ‘,m); Writeln(‘Co ‘,d_le,’ so le trong khoang tu ‘,n,’ den ‘,m); readln end. Ví dụ 4: Một số có tổng các ước thực sự (là các ước không kể chính nó) bằng chính nó được gọi là số hoàn chỉnh. Ví dụ: Số nguyên 6 có các ước thực sự là 1, 2, 3. Tổng là 1 + 2 + 3 = 6. Viết chương trình xét xem một số n (n
- readln end. c. Nhận xét Ước lớn nhất của số nguyên N không kể chính nó luôn
- Program Tim_uoc_2; uses crt; Var S, n, i, j: longint; Begin clrscr; Write('Nhap so n ='); readln(n); For i:=1 to n1 do Begin S:=0; For j:=1 to i div 2 do if i mod j = 0 then S:=S+j; if S = i then write(i,', '); end; readln end. Ví dụ 6: Viết chương trình xét xem một số n có phải là số nguyên tố không (0
- Program Nguyen_to_1; uses crt; var n, i: integer; ok: boolean; begin ok:=true; write('Nhap n: ');readln(n); for i:= 2 to n1 do if n mod i = 0 then ok :=false; if ok then write(n,' la so nguyen to') else write(n, ' khong la so nguyen to'); readln end. c. Nhận xét + Ở đây ta sử dụng biến có kiểu logic (Đúng, sai). Chỉ cần một lần n mod i = 0 thì sau khi thực hiện xong vòng lặp ok có giá trị là false. + Mọi số nguyên N nếu có ước khác 1 và chính nó thì chắc chắn có ước trong đoạn từ 2 đến phần nguyên căn bậc 2 của N. Vì vậy thay vì kiểm tra n có chia hết cho số nào trong đoạn từ 2 đến n 1 hay không, ta chỉ cần kiểm tra n có chia hết cho số nào trong đoạn từ 2 đến trunc(sqrt(n)) hay không, việc làm này sẽ giúp giảm đáng kể số lần lặp, giúp tiết kiệm thời gian thực hiện chương trình. Giá trị của N Các ước của N ( Khác 1 và N) Trunc(sqrt(n)) 2 1 3 1 4 2 2 5 2 6 2, 3 2 7 2 8 2, 4 2 Trang 15
- 9 3 3 10 2, 5 3 11 3 12 2,3, 4,6 3 13 3 14 2, 7 3 15 3, 5 3 16 2,4, 8 4 17 4 18 2, 6,9 4 Chương trình trên có thể được viết lại như sau: Program Nguyen_to_2; uses crt; var n, i: integer; ok: boolean; begin ok:=true; write('Nhap n: ');readln(n); for i:= 2 to trunc(sqrt(n)) do if n mod i = 0 then ok :=false; if ok then write(n,' la so nguyen to') else write(n, ' khong la so nguyen to'); readln end. + Trong chương trình Nguyen_to_2 nếu đã phát hiện n chia hết cho 1 số trong đoạn từ 2 đến trunc(sqrt(n)) rồi (thuật toán có thể kết thúc và thông báo kết quả) nhưng vòng lặp vẫn tiếp tục kiểm tra các số tiếp theo. Điều này làm thời gian thực hiện chương trình chưa được tối ưu Trang 16
- Để khắc phục nhược điểm này ta sử dụng thủ tục Break, cho phép thoát khỏi vòng lặp gần nhất chứa nó. Chương trình có thể viết lại: Program Nguyen_to_3; uses crt; var n, i: integer; ok: boolean; begin ok:=true; write('Nhap n: ');readln(n); for i:= 2 to trunc(sqrt(n)) do if n mod i = 0 then begin ok :=false; break; end; if ok then write(n,' la so nguyen to') else write(n, ' khong la so nguyen to'); readln end. Ví dụ 7: Lập trình tính giai thừa của số nguyên n (n
- Writeln(‘Nhap n: ‘); Readln(n); gt:=1; For i:= 1 to n do gt:= gt*1; Writeln(‘n! = ‘, gt); Readln End. Ví dụ 8: Dãy số fibonaci được định nghĩa như sau: Viết chương trình in ra số fibonaci thứ n (n
- f:=f1+f2; f1:=f2; f2:=f; End; Write(‘So fibonaci thu ‘,n,’ la: ‘,f); End; Readln End. Ví dụ 9: Lập trình tính tổng sau: (SGK Tin học 11 – Trang 51) a. Ý tưởng Với bài toán trên có thể sử dụng cấu trúc lặp với số lần biết trước dạng tiến hay lùi đều được. Nếu sử dụng cấu trúc lặp For …downto … do ta có thể xây dựng công thức truy hồi để tính giá trị Y như sau: Với n từ 50 giảm dần về 1 Việc cộng vào tổng Y được lặp lại 50 lần, giá trị n khi tham gia vòng lặp là 50 và sau mỗi lần lặp n giảm đi 1 cho đến khi n =1 thì dừng. Như vậy số lần lặp là biết trước, biến n được sử dụng là một biến đếm giảm từ 50 về 1, tổng cần tính là Y0 b. Code tham khảo var Y: real; n : integer; begin Y := 0; for n := 50 downto 1 do Y := Y + n/(n+1); writeln('Tong Y la: ',Y:10:4); readln; end. Trang 19
- Tuy nhiên trong một số trường hợp thì chỉ có thể dùng một cấu trúc, đặc biệt là khi tính các công thức truy hồi. Ta xét một ví dụ dùng for … downto … do thích hợp hơn: Ví dụ 10: Tính tổng S = với n là một số tự nhiên nhập từ bàn phím. a. Ý tưởng Đặt ta có công thức truy hồi sau: Tổng cần tính là si. Công thức truy hồi là truy hồi ngược (vì tính si qua si+1) nên dùng for … down … to là thích hợp nhất. b. Code tham khảo Var i,n : integer; s : real; begin write('Nhap mot so tu nhien n = '); readln(n); s:=0; for i := n downto 1 do s := sqrt (2 * i + s); writeln('Ket qua can tinh: s = ',s:10:5); readln; end. 12. Lặp với số lần chưa biết trước 1. Cú pháp và hoạt động của lệnh lặp với số lần chưa biết trước 13. Câu lệnh While – do Cú pháp: While do ; Trong đó: + Điều kiện là biểu thức logic Trang 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
SKKN: Một số biện pháp rèn luyện kỹ năng đọc cho học sinh lớp 2
10 p | 3667 | 364
-
SKKN: Hướng dẫn học sinh rèn luyện kỹ năng thực hành thí nghiệm trong giờ học Vật lý ở bậc THCS
21 p | 1058 | 145
-
SKKN: Rèn luyện kĩ năng sử dụng AtLat trong dạy Địa Lí 12
14 p | 781 | 138
-
SKKN: Rèn luyện kĩ năng giải toán cho học sinh lớp 7 phần Hình học
13 p | 681 | 106
-
SKKN: Một số biện pháp chỉ đạo thực hiện rèn kĩ năng sống cho học sinh trường tiểu học
36 p | 312 | 68
-
SKKN: Một số biện pháp rèn kĩ năng đọc cho học sinh dân tộc thiểu số lớp 3
27 p | 856 | 55
-
SKKN: Rèn luyện kĩ năng đọc diễn cảm cho học sinh trong giờ học Ngữ Văn
7 p | 526 | 53
-
SKKN: Các họat động ngoài giờ lên lớp nhằm rèn luyện kĩ năng làm việc nhóm cho HS
25 p | 179 | 39
-
SKKN: Một vài kinh nghiệm rèn luyện kĩ năng sử dụng, khai thác kiến thức từ kênh hình SGK Địa lí 8
23 p | 188 | 36
-
SKKN: Hệ thống câu hỏi rèn luyện kĩ năng đọc - hiểu tác phẩm tự sự cho học sinh lớp chuyên Ngữ Văn
26 p | 280 | 32
-
SKKN: Ghi bảng theo hướng phát huy tính tích cực, chủ động, sáng tạo của học sinh khi dạy những bài văn bản – tác phẩm Văn học trong chương trình Ngữ Văn THCS
8 p | 171 | 25
-
SKKN: Một số kinh nghiệm giúp học sinh phát triển tốt kĩ năng hợp tác trong môn Mĩ thuật lớp 5
20 p | 71 | 6
-
SKKN: Kinh nghiệm tư duy áp dụng để tìm con đường khai thông nhằm giải quyết bài toán một cách gọn gàng
22 p | 22 | 4
-
SKKN: Rèn luyện kĩ năng, phát triển tư duy sáng tạo cho học sinh THPT qua việc xây dựng một số bài toán trắc nghiệm nguyên hàm không sử dụng máy tính cầm tay
12 p | 56 | 4
-
SKKN: Rèn luyện kĩ năng sử dụng Atlat Địa lý Việt Nam trong bồi dưỡng học sinh giỏi môn Địa lý 8 ở trường trung học cơ sở
26 p | 91 | 3
-
SKKN: Khắc phục lỗi và rèn kĩ năng diễn tả thuật toán cho học sinh khối 10 thông qua luyện tập về thuật toán
22 p | 65 | 3
-
SKKN: Rèn luyện kĩ năng và tư duy sáng tạo cho học sinh khi sử dụng tính đơn điệu của hàm số để giải hệ phương trình
22 p | 65 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn