1. Trang chủ
  2. » Giáo án - Bài giảng

Hướng dẫn học sinh rèn luyện ký năng giải các bài toán về dãy con liên tiếp

21 393 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 203 KB

Nội dung

MỤC LỤC Mở đầu………………………………………………………………………….1 1.1 Lý chọn đề tài………………………………………………………… 1.2 Mục đich nghiên cứu……………………………………………………….1 1.3 Đối tượng nghiên cứu………………………………………………………1 1.4 Phương pháp nghiên cứu………………………………………………… Nội dung sáng kiến kinh nghiệm…………………………………………….2 2.1 Cơ sở lí luận sáng kiến kinh nghiệm………………………………… 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm…………… 2.3 Các giải pháp sử dụng để giải vấn đề……………… 2.3.1 Cung cấp lý thuyết chuyên đề dãy liên tiếp… …………… 2.3.2 Viết chương trình cho tập bản…… .4 2.3.3 Làm tập thực tế để vận dụng, cải tiến, hiệu chỉnh nâng cấp chương trình ……………………………………………………………………8 2.3.4 Giao tập nhà………………………………………………… 18 2.4 Hiệu sáng kiến kinh nghiệm hoạt động giáo dục, với thân, đồng nghiệp nhà trường………………………………………………… 19 Kết luận, kiến nghị .20 Mở đầu 1.1 Lý chọn đề tài Trong chương trình Tin học lớp 11, nội dung kiến thức mảng chiều trang bị cho học sinh bao gồm tiết lí thuyết tiêt tập tiết thực hành Vì vậy, lượng kiến thức thời lượng đó chưa đủ để học sinh vận dụng vào giải tập liên quan đến dãy liên tiếp biểu diễn dãy mảng chiều Rèn luyện tư , kỹ tác phong lập trình có vai trò đặc biệt bỗi dưỡng học sinh giỏi môn tin học trường phổ thông Hiệu việc rèn luyện tư duy, kỹ tác phong lập trình động lực giúp học sinh nắm vững kiến thức, phát triển tư duy, hình thành kỹ kỹ xảo T có khả thích ứng đứng trước vấn đề cần giải Học sinh thấy thuật toán trình suy luận, tư học sinh mà phương pháp tìm thuật toán không phụ thuộc vào đặc điểm toán mà phụ thuộc tố chất tâm lý thân người xây dựng thuật toán Thực tế cho thấy có học sinh có tố chất tốt, xong không nắm vững khái niệm dãy mà đề đưa cách thức để bước đầu xử lí toán không giải toán Nhưng có học sinh có tố chất khá, xong nắm vững khái niệm quy luật dãy con, thêm vào niềm đam mê môn học em hoàn toàn đạt hiệu cao giải toán liên quan đến dãy liên tiếp Vì lí nên chọn đề tài: “Hướng dẫn học sinh rèn luyện kỹ giải toán dãy liên tiếp” để nghiên cứu 1.2 Mục đích nghiên cứu Nghiên cứu số vấn đề lý thuyết thực tiễn việc rèn luyện cho học sinh kỹ giải toán dãy liên tiếp nhằm bồi dưỡng lực kỹ lập trình, góp phần nâng cao chất lượng bồi dưỡng học sinh giỏi môn Tin học trường phổ thông Hoằng Hóa 1.3 Đối tượng nghiên cứu Đối tượng nghiên cứu: kỹ giải toán dãy liên tiếp môn tin học 11 học sinh THPT Khách thể nghiên cứu: Học sinh thuộc đội tuyển học sinh giỏi môn Tin học trường THPT Hoằng Hóa 1.4 Phương pháp nghiên cứu - Phương pháp nghiên cứu lý luận: Nghiên cứu tài liệu, sách báo - Phương pháp điều tra thực tiễn: Quan sát việc học học sinh trình khai thác tập sách giáo khoa, sách tập đề thi học sinh giỏi - Phương pháp thực nghiệm sư phạm Trang 2 Nội dung sáng kiến kinh nghiệm 2.1 Cơ sở lí luận sáng kiến kinh nghiệm - Cơ sở tâm lý học: + Đặc điểm nhận thức học sinh môn Tin học: Đối với khối THPT, phần lớn học sinh coi môn Tin học môn học phụ, không quan tâm cho lắm, có vài học sinh có hứng thú với môn Tin học Từ số lượng ỏi có hội để người giáo viên tìm học sinh cho đội tuyển học sinh giỏi + Tư học sinh: Thông thường học sinhkỹ lập trình khá, giỏi em có kiến thức Toán học khá, giỏi, xong điều ngược lại chưa hẳn, lý đơn giản khả vận dụng kiến thức vào để giải vấn đề giải toán Tin học Chẳng hạn, học giải tập môn toán em học theo dạng 1, dạng 2… tin học toán kết hợp nhiều toán khác Ở em học sinh khối THPT môn lập trình Pascal em bước làm quen không trọng nên khả tư hạn chế nên việc phân tích để hiểu chất vấn đề khó 2.2 Thực trạng vấn đề trước áp dụng sáng kiến kinh nghiệm - Thực trạng công tác bồi dưỡng học sinh giỏi môn Tin học Thực tế đa số học sinh lúng túng phương pháp cho loại toán sách giáo khoa hay sách tập nhiều tập loại lại có đề thi học sinh giỏi năm gần khiến cho học sinh bối rối phương pháp Một số học sinh tham khảo số code toán liên quan đến dãy mạng học sinh khó hiểu dẫn đến có thói quen lập trình thụ động, không tự nhiên Điều làm giảm hứng thú với môn học Qua năm gần bồi dưỡng học sinh giỏi môn Tin học nhận thấy mảng kiến thức dãy liên tiếp loại tập thú vị Do lựa chọn đề tài để nghiên cứu trình bày Bởi việc giúp em tìm cách giải cho loại tập giúp em tốt trình học rèn luyện kỹ lập trình - Những thuận lợi khó khăn: + Thuận lợi: - Công tác bồi dưỡng học sinh giỏi môn Tin học nhà trường quan tâm đạo sát đặc biệt có phần thưởng có tính khích lệ giáo viên học sinh trước + Khó khăn: - Môn tin học có hội chọn học sinh tốt - Phụ huynh học sinh không thích cho em vào đội tuyển mon Tin học sợ ảnh hưởng đến việc học ôn thi Đại học 2.3 Các giải pháp sử dụng để giải vấn đề Trang 2.3.1 Cung cấp lý thuyết chuyên đề dãy liên tiếp - Đưa khái niệm dãy con: Dãy dãy phần tử liên tục thuộc dãy cho trước thỏa mãn tính chất (ở ta cần hướng dẫn cho học sinh dãy ta xét lưu dạng mảng chiều) Tuy nhiên cần lưu ý với học sinh cần phải đọc kỹ đề đề yêu cầu xác định dãy đề đưa yêu cầu đưa dãy liên thứ tự xuất (tức không liền kề nnhau) - Để quản lý dãy ta cần: số đầu(chỉ nơi bắt đầu dãy con) độ dài dãy số đầu số cuối (chỉ nơi kết thúc dãy con) - Dãy có 1, 2, … N phần tử (tuỳ vào định nghĩa dãy yêu cầu đề bài) Nếu dãy mẹ có N phần tử ta có 2n dãy - Để duyệt qua tất dãy dãy gồm n số ta dùng thuật toán vét cạn gồm vòng For sau: For i:=1 to N {1} For j:=1 to N-i+1 {2} For k:=j to i+j-1 {3} (xử lý dãy vị trí j đến vị trí i+j-1); {4} Giải thích: {1} Vòng for 1: Cho biết độ dài dãy có i phần tử; {2} Vòng for 2: Cho biết dãy vị trí j, vị trí bắt đầu dãy cuối có độ dài i n-i+1; {3} Vòng for 3: Dùng để duyệt qua phần tử dãy vị trí đầu j đến vị trí cuối i+j-1 để xử lý {4} Các thao tác xử lý là: Tính tổng dãy con; Kiểm tra tính tăng, giảm; Kiểm tra tính đối xứng; … * Nếu dãy xét cần lưu lại thì: Lưu lại độ dài, số đầu dãy Xác định lại độ dài, số đầu dãy * Nếu dãy xét không cần lưu thì: Xác định lại độ dài, số đầu dãy Khi dạy chuyên đề ta rèn luyện thêm cho học sinh cách viết sử dụng chương trình con, để chương trình tham gia vào nhiệm vụ xử lý phần xử lý {4}, ví dụ chương trình kiểm tra tính đối xứng đoạn từ j đến j+i-1, chương trình kiểm tra tính tăng, giảm đoạn con, chương trình kiểm tra xem đoạn có lập thành cấp số cộng hay không, … Trang 2.3.2 Viết chương trình cho tập Ở đưa loại tập để học sinh hiểu cách áp dụng lý thuyết dãy cung cấp phần trên, với tập giáo viên chưa cần thiết đòi hỏi chương trình học sinh làm phải chạy test mà cần giải vài trường hợp test nhỏ Nhưng yêu cầu đặt với học sinh phải làm thành thạo toán có đủ kiến thức kỹ để xử lý dãy khác cách tốt Bài Cho dãy A gồm N số nguyên Viết chương trình in dãy liên tiếp gồm phần tử, phần tử, gồm N phần tử dãy cho (dãy liên tiếp dãy gồm số phần tử liên tiếp dãy cho gồm nhiều phần tử, thân dãy cho dãy có số phần tử nó) VD: N=6 Dãy A: In ra: Dc1: Dc2: Dc3: Dc4: Dc5: Dc6: Dc7: Dc8: Dc9 Dc10 Dc11 Dc12 Dc13 Dc14 Dc15 Dc16 Dc17 Dc18 Dc19 Dc20 Dc21 Với tập học sinh cần vận dụng lý thuyết cung cấp để giải quyết, mục đích tập để học sinh đưa thấy hình ảnh cụ thể dãy dãy số cho trước Chương trình tham khảo sau: Trang CONST NMAX=100; VAR A: ARRAY[1 NMAX] OF INTEGER; N,I,J,T: INTEGER; BEGIN WRITELN('NHAP N= '); READLN(N); FOR I:=1 TO N DO BEGIN WRITE('NHAP PHAN TU THU ',I); READLN(A[I]); END; FOR I:=1 TO N DO FOR J:=1 TO N-I+1 DO {DUET CAC DAY CON CO DO DAI I BAT DAU TU J} BEGIN FOR T:= J TO J+I-1 DO WRITE(A[T],' '); WRITELN; END; READLN; END Bài Cho dãy A gồm N số nguyên Viết chương trình in dãy liên tiếp gồm phần tử, phần tử, gồm N phần tử dãy cho (dãy liên tiếp dãy gồm số phần tử liên tiếp dãy cho gồm nhiều phần tử, thân dãy cho dãy có số phần tử nó) VD: N=6 Dãy A: In ra: Dc1: Dc2: Dc3: Dc4: Dc5: Dc6: Dc7: Dc8: Dc9 Dc10 Dc11 Dc12 Trang Dc13 Dc14 Dc15 Dc16 Dc17 Dc18 Dc19 Dc20 Dc21 Mục đích tập rèn luyện thêm kỹ chuyển đổi câu lệnh For tiến For lùiviệc làm có lợi giáo viên đưa yêu cầu tìm dãy ngắn dài thỏa mãn điều kiện đó, học sinh biết nên chọn câu lệnh for để tìm thấy dãy thoát không cần tìm tiếp Chương trình tham khảo sau: CONST NMAX=100; VAR A: ARRAY[1 NMAX] OF INTEGER; N,I,J,T: INTEGER; BEGIN WRITELN('NHAP N= '); READLN(N); FOR I:=1 TO N DO BEGIN WRITE('NHAP PHAN TU THU ',I); READLN(A[I]); END; FOR I:=N DOWNTO DO FOR J:=1 TO N-I+1 DO BEGIN FOR T:= J TO J+I-1 DO WRITE(A[T],' '); WRITELN; END; READLN; END Bài Cho dãy A gồm N số nguyên Viết chương trình in dãy liên tiếp dãy cho (dãy liên tiếp dãy gồm số phần tử liên tiếp dãy cho gồm nhiều phần tử, thân dãy cho dãy có số phần tử nó) VD: N=6 Trang Dãy A: 10 In ra: Dc1: 10 Dc2: 10 Dc3: 10 Dc4: 10 Dc5: 10 Dc6: 10 Với tập ta tập cho học sinh thói quen đọc kỹ đề xem xét kỹ output toán để từ đưa điều chỉnh cách duyệt để tìm output, đề yêu cầu đưa dãy khác dãy có độ dài từ đến N đưa lần dãy phần tử thứ dãy Từ tự phân tích cách làm, học sinh lúng túng giáo viên hướng dẫn học sinh để đưa nhận xét sau: - Có N lần duyệt, ta dùng biến i biến duyệt số lần, với i chạy từ đến N - Với lần duyệt i, ta in dãy từ đến N-i+1 Vậy cần có vòng for đủ để in dãy này, so với thuật toán vét cạn giới thiệu phần lý thuyết ta bỏ bớt vòng lặp thứ Chương trình tham khảo sau: CONST NMAX=100; VAR A: ARRAY[1 NMAX] OF INTEGER; N,I,J,T: INTEGER; BEGIN WRITELN('NHAP N= '); READLN(N); FOR I:=1 TO N DO BEGIN WRITE('NHAP PHAN TU THU ',I); READLN(A[I]); END; FOR I:=1 TO N DO BEGIN FOR J:=1 TO N-I+1 DO WRITE(A[J],' '); WRITELN; END; READLN; END Trang Tương tự giáo viên thay đổi cách in dãy để học sinh rèn luyện thêm kỹ năng, chẳng hạn thay đổi thành toán sau đây: Bài Cho dãy A gồm N số nguyên Viết chương trình in dãy liên tiếp dãy cho (dãy liên tiếp dãy gồm số phần tử liên tiếp dãy cho gồm nhiều phần tử, thân dãy cho dãy có số phần tử nó) VD: N=6 ;Dãy A: 10 In ra: Dc1: 10 Dc2: 10 Dc3: 10 Dc4: 10 Dc5: 10 Dc6: 10 Với học sinh tự sửa lại chương trình tâp xong 2.3.3 Làm tập thực tế để vận dụng, cải tiến, hiệu chỉnh nâng cấp chương trình Đối với phần làm tập giáo viên đưa mức độ để học sinh rèn luyện nâng cao kỹ lập trình: Mức độ 1: Yêu cầu học sinh cải tiến chương trình viết Ở mức độ giáo viên nên yêu cầu học sinh bám sát vào đặc điểm liệu, kiện mà đê yêu cầu, nhiên giáo viên chưa đặt yêu cầu phải chạy nhiều test Chỉ cần chạy đến test Mức độ 2: Hướng dẫn học sinh sử dụng kỹ thuật lập trình khác để nâng cấp chương trình chạy nhanh (nhiều test hơn) Ở mức độ dựa vào vào đặc điểm liệu, kiện mà đê yêu cầu, giáo viên hướng dẫn thêm học sinh kỹ thuật khác để giúp học sinh nâng cấp chương trình chưa phải chạy hết test Chẳng hạn kỹ thuật dùng biến định vị (lính canh), kỹ thuật trượt cửa sổ, kỹ thuật đặ cờ hiệu… Mức độ 3: Tùy vào lực tiếp thu học sinh giáo viên hướng dẫn học sinh sử dụng kỹ thuật lập trình khác để xử lý test lớn toán Chẳng hạn quy hoạch động… Dưới số tập sử dụng để rèn luyện kỹ cho học sinh: Bài tập 1: Cho mảng số nguyên gồm n phần tử Tìm dãy gồm m phần tử (m≤ n ≤ 1000) cho dãy có tổng lớn (Dãy dãy phần tử liên tiếp mảng) Ví dụ: nhập vào từ bàn phím N=6 -3 -5 Trang M=4 In hình: -5 Khi làm tập này, dựa vào lý thuyết học sinh cung cấp thuật toán vét cạn: For i:=1 to N {1} For j:=1 to N-i+1 {2} For k:=j to i+j-1 {3} (xử lý dãy vị trí j đến vị trí i+j-1); {4} học sinh có nhận xét sau: - Vì số phần tử dãy m nên ta bỏ vòng lặp mà thay i vòng lặp m Mỗi lần xử lý dãy ta tính tổng dãy so sánh để tìm tổng lớn đồng thời lưu lại vị trí j dãy - Khi cần sử dụng vòng lặp For j:=1 to N-m+1 For k:=j to m+j-1 (xử lý dãy vị trí j đến vị trí i+j-1); Khi học sinh viết chương trình sau: Type M1C=ARRAY[1 1000] Of Integer; Var A:M1C; n,m,i,j,k,vt:integer; S,Max:longint; Begin Write('Nhap so phan tu cua mang: n= '); Readln(n); For i:=1 To n Do Begin Write('a[',i,']='); Readln(a[i]); End; Write('Nhap so phan tu cua day con: m= '); Readln(m); Max:=0; vt:=1; For j:=1 To n-m+1 Do Begin {Tính tổng dãy thứ j} S:=0; For k:=j To j+m-1 Do S:=S+A[k]; If S>Max Then { Nếu dãy tìm có tổng lớn dãy trước} Begin Max:=S; {Thay tổng mới} vt:=j; { Thay vị trí dãy } End; Trang 10 End; Writeln('Day co tong lon nhat la:'); For i:=vt To vt+m-1 Do Write(A[i]:5); Readln; End Sau viết chương trình giáo viên yêu cầu học sinh tự cải tiến chương trình có thể, học sinh lúng túng giáo viên đưa nhận xét để học sinh cải tiến chương trình Hướng dẫn cải tiến chương trình: Giống toán tìm giá trị lớn dãy số, ban đầu ta giả sử Max = A[1], ta giả sử tổng Max ban đầu tổng phần tử từ đến M, lần sau ta tìm so sánh tổng Max với dãy vị trí thứ trở đi, chương trình tham khảo sau: Type M1C=ARRAY[1 1000] Of Integer; Var A : M1C; n,m,i,j,k,vt:integer; S,Max:longint; Begin Write('Nhap so phan tu cua mang: n= '); Readln(n); For i:=1 To n Do Begin Write('a[',i,']='); Readln(a[i]); End; Write('Nhap so phan tu cua day con: m= '); Readln(m); vt:=1; {Vị trí phần tử dãy con} {Giả sử m phần tử mảng A dãy có tổng lớn nhất} Max:=0; For i:=1 To m Do Max:=Max+A[i]; {Tìm dãy khác} For j:=2 To n-m+1 Do Begin {Tính tổng dãy thứ j} S:=0; For k:=j To j+m-1 Do S:=S+A[k]; If S>Max Then { Nếu dãy tìm có tổng lớn dãy trước thì} Begin Max:=S; { Thay tổng } vt:=j; { Thay vị trí dãy } End; End; Writeln('Day co tong lon nhat la:'); Trang 11 For i:=vt To vt+m-1 Do Write(A[i]:5); Readln; End Khi chương trình chạy vài test giáo viên yêu cầu học sinh sửa lại chương trình để thực việc đọc liệu từ tệp ghi kết tệp, chạy chương trình với N=1000 Bài tập 2: Chia hết Cho dãy gồm N số nguyên dương A 1, A2, , AN Hãy lấy K số liên tiếp để tổng chúng chia hết cho N với K bé Dữ liệu: Đọc vào từ file văn DAY.INP: • Dòng đầu ghi N • Dòng tiếp ghi số A1, A2, , AN Kết quả: ghi file văn DAY.OUT gồm dòng ghi giá trị K số số hạng lấy Giới hạn: N Ai ≤ 32767 Ví dụ: DAY.INP DAY.OUT 24 12214 Khi làm tập với thuật toán vét cạn để đưa dãy cung cấp, học sinh viết chương trình mức độ chưa xác sau: program Bt2; Type m1c = array[1 10000] of integer; Var a:m1c; i, j, t,n, kmax,jmax:integer; tong:longint; thay:boolean; f1,f2:text; BEGIN Assign(f1,'DAY.INP'); Reset(f1); readln(f1,n); for i:= to n Read(f1,a[i]); Close(f1); Assign(f2,'DAY.OUT'); Rewrite(f2); {xu ly} for i:=1 to N for j:=1 to N- i+1 begin tong:=0; for t:=j to j+i-1 Trang 12 tong:=tong+a[t]; if tong mod n =0 then begin kmax:=i; jmax:=j; end; end; Write(f2,kmax, ' ', jmax); Close(f2); END Chương trình đưa dãy có tổng chia hết cho N dãy ngắn (k nhỏ nhất) Do giáo viên phải hướng dẫn học sinh thêm kỹ thuật đặt cờ hiệu để thoát vòng For tìm thấy dãy đầu tiên, ngắn thõa mãn có tổng chia hết cho N Chương trình tham khảo sau: program Bt2; Type m1c = array[1 10000] of integer; Var a:m1c; i, j, t,n, kmax,jmax:integer; tong:longint; thay:boolean; f1,f2:text; BEGIN Assign(f1,'DAY.INP'); Reset(f1); readln(f1,n); for i:= to n Read(f1,a[i]); Close(f1); Assign(f2,'DAY.OUT'); Rewrite(f2); for i:=1 to N begin thay:=false; for j:=1 to N- i+1 begin tong:=0; for t:=j to j+i-1 tong:=tong+a[t]; if tong mod n =0 then begin kmax:=i; jmax:=j; thay:=true; end; if thay then break; end; if thay then break; end; Write(f2,kmax, ' ', jmax); Close(f2); END Trang 13 Với đề không cho giới hạn N nên giáo viên chưa cần yêu cầu chương trình học sinh phải chạy nhiều test Bài tập 3: Đoạn Cho dãy số nguyên a1, a2, , aN (|ai| < 109, N < 105) Một tập hợp khác rỗng số hạng liên tiếp {ai, ai+1, , ak} (i ≤ k) gọi đoạn dãy Với đoạn ta tính tổng tất số hạng Yêu cầu: Tìm giá trị lớn số tổng đoạn dãy cho Dữ liệu vào: cho file SUBSEQ.INP: Dòng đầu chứa số N, dòng thứ i N dòng chứa số Dữ liệu ra: Ghi file SUBSEQ.OUT số nguyên giá trị tổng đoạn lớn tìm Ví dụ: SUBSEQ.INP SUBSEQ.OUT -2 (Giải thích: -1 đoạn tổng lớn là: -1 – + = 8) -2 (60% số test có N < 3000) (Trích đề thi Học sinh giỏi tỉnh Ninh bình 2010-20111 Vòng 1) Khi làm này, vận dụng thuật toán vét cạn để duyệt dãy học sinh viết chương trình sau: Type m1c = array[1 100000] of longint; Var a:m1c; i, j, t,n :longint; tong,kq:int64; f1,f2:text; BEGIN Assign(f1,'SUBSEQ.INP'); Reset(f1); readln(f1,n); for i:= to n Readln(f1,a[i]); Close(f1); Assign(f2,'SUBSEQ.OUT'); Rewrite(f2); {xu ly} kq:=-200000000000000000; for i:=1 to N for j:=1 to N- i+1 Trang 14 begin tong:=0; for t:=j to j+i-1 tong:=tong+a[t]; if tong > kq then kq:=tong; end; Write(f2,kq); Close(f2); END Tuy nhiên gáo viên cần cho học sinh chạy vài test sau thử chạy test lớn (theo đề N

Ngày đăng: 17/10/2017, 11:11

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w