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 394 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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Vì lí do đó nên tôi chọn đề tài: “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” để nghiên cứu.. Mục đích nghiên cứu Nghiên cứu một số vấn đề lý thuyết và t

Trang 1

MỤC LỤC

1 Mở đầu……….1

1.1 Lý do chọn đề tài……… 1

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……… 1

2 Nội dung sáng kiến kinh nghiệm……….2

2.1 Cơ sở lí luận của sáng kiến kinh nghiệm……… 2

2.2 Thực trạng vấn đề trước khi áp dụng sáng kiến kinh nghiệm……… 2

2.3 Các giải pháp đã sử dụng để giải quyết vấn đề……… 3

2.3.1 Cung cấp lý thuyết về chuyên đề dãy con liên tiếp… ……… 3

2.3.2 Viết chương trình cho 4 bài tập cơ bản…… 4

2.3.3 Làm các bài tập thực tế để vận dụng, cải tiến, hiệu chỉnh và nâng cấp chương trình ………8

2.3.4 Giao bài tập về nhà……… 18

2.4 Hiệu quả của sáng kiến kinh nghiệm đối với hoạt động giáo dục, với bản thân, đồng nghiệp và nhà trường……… 19

3 Kết luận, kiến nghị 20

Trang 2

1 Mở đầu

1.1 Lý do chọn đề tài

Trong chương trình Tin học lớp 11, nội dung kiến thức về mảng một chiều trang bịcho học sinh chỉ bao gồm 2 tiết lí thuyết và 1 tiêt bài tập và 4 tiết thực hành Vìvậy, lượng kiến thức và thời lượng đó đó chưa đủ để học sinh có thể vận dụng vàogiải các bài tập liên quan đến các dãy con liên tiếp khi biểu diễn dãy bằng mảngmột chiều Rèn luyện tư duy , kỹ năng và tác phong lập trình có vai trò đặc biệttrong khi bỗi dưỡng học sinh giỏi môn tin học ở trường phổ thông Hiệu quả củaviệc rèn luyện tư duy, kỹ năng và tác phong lập trình là động lực giúp học sinhnắm vững kiến thức, phát triển tư duy, hình thành kỹ năng và kỹ xảo Từ đó cókhả năng thích ứng khi đứng trước một vấn đề cần giải quyết Học sinh cũng thấyđược mỗi thuật toán như là một quá trình suy luận, tư duy của học sinh mà phươngpháp tìm thuật toán không chỉ phụ thuộc vào đặc điểm của bài toán mà còn phụthuộc tố chất tâm lý của bản thân người xây dựng thuật toán

Thực tế cho thấy có những học sinh có tố chất tốt, xong do không nắm vững đượckhái niệm dãy con mà đề bài đưa ra và cách thức để bước đầu có thể xử lí bài toánthì cũng không giải quyết được bài toán Nhưng có những học sinh chỉ có tố chấtkhá, xong nắm vững được khái niệm và quy luật của dãy con, thêm vào đó mộtniềm đam mê môn học thì các em hoàn toàn vẫn có thể đạt được hiệu quả cao khigiải quyết các bài toán liên quan đến dãy con liên tiếp Vì lí do đó nên tôi chọn đề

tài: “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” để nghiên cứu.

1.2 Mục đích nghiên cứu

Nghiên cứu một số vấn đề lý thuyết và thực tiễn việc rèn luyện cho học sinhcác kỹ năng giải các bài toán về dãy con liên tiếp nhằm bồi dưỡng năng lực cũngnhư kỹ năng 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ônTin học ở trường phổ thông Hoằng Hóa 3

1.3 Đối tượng nghiên cứu

Đối tượng nghiên cứu: kỹ năng giải các bài toán về dãy con liên tiếp đối với môn

tin học 11 của 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 của

trường THPT Hoằng Hóa 3

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 các 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 của học sinh trong quá trìnhkhai thác các bài tập sách giáo khoa, sách bài tập và các đề thi học sinh giỏi

- Phương pháp thực nghiệm sư phạm

Trang 3

2 Nội dung sáng kiến kinh nghiệm

2.1 Cơ sở lí luận của sáng kiến kinh nghiệm

- Cơ sở tâm lý học:

+ Đặc điểm nhận thức của học sinh đối với môn Tin học:

Đối với khối THPT, hiện nay phần lớn học sinh coi bộ môn Tin học là mônhọc phụ, không quan tâm cho lắm, vẫn còn có một vài học sinh có hứng thú vớimôn Tin học Từ số lượng ít ỏi đó vẫn có cơ hội để người giáo viên tìm ra các họcsinh cho đội tuyển học sinh giỏi của mình

+ Tư duy của học sinh:

Thông thường những học sinh có kỹ năng lập trình khá, giỏi là những em có kiếnthức Toán học khá, giỏi, xong điều ngược lại thì chưa hẳn, lý do rất đơn giản là khảnăng vận dụng kiến thức vào để giải quyết vấn đề khi giải quyết bài toán Tin học.Chẳng hạn, khi học giải bài tập môn toán các em có thể học theo dạng 1, dạng 2…nhưng trong tin học thì một bài toán có thể là sự kết hợp của nhiều bài toán cơ bảnkhác nhau

Ở các em học sinh khối THPT thì môn lập trình Pascal các em bước đã làmquen nhưng không chú trọng nên khả năng tư duy vẫn còn hạn chế nên việc phântích để hiểu được bản chất của vấn đề là rất khó

2.2 Thực trạng vấn đề trước khi á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 hiện nay.

Thực tế đa số học sinh rất lúng túng về phương pháp cho loại toán này bởi vì trongsách giáo khoa hay sách bài tập không có nhiều bài tập loại này nhưng lại có trong

đề thi học sinh giỏi những năm gần đây khiến cho học sinh rất bối rối về phươngpháp Một số học sinh tham khảo một số code về các bài toán liên quan đến dãycon trên mạng nhưng học sinh cũng khó hiểu và dẫn đến có thói quen lập trình thụđộng, không tự nhiên Điều đó làm giảm đi hứng thú với môn học

Qua những năm gần đây khi bồi dưỡng học sinh giỏi môn Tin học tôi nhậnthấy mảng kiến thức về dãy con liên tiếp là loại bài tập khá thú vị Do đó tôi lựachọn đề tài này để nghiên cứu và trình bày Bởi việc giúp các em tìm ra các cáchgiải cho loại bài tập này giúp các em rất tốt trong quá trình học và rèn luyện kỹnăng lập trình

- Những thuận lợi và khó khăn:

- Môn tin học ít có cơ hội chọn được học sinh tốt nhất

- Phụ huynh học sinh cũng không thích cho con em mình vào đội tuyển monTin học vì sợ ảnh hưởng đến việc học và ôn thi Đại học

2.3 Các giải pháp đã sử dụng để giải quyết vấn đề

Trang 4

2.3.1 Cung cấp lý thuyết về chuyên đề dãy con liên tiếp

- Đưa ra khái niệm dãy con: Dãy con là dãy các phần tử liên tục thuộc một dãy

cho trước thỏa mãn một tính chất nào đó (ở đây ta cần hướng dẫn cho học sinh làdãy ta đang xét được lưu dưới dạng mảng một chiều) Tuy nhiên cần lưu ý với họcsinh là cần phải đọc kỹ đề khi đề bài yêu cầu xác định một dãy con nào đó vì có thể

đề bài đưa ra yêu cầu đưa ra một dãy con liên tiếp theo thứ tự xuất hiện (tức làkhông liền kề nnhau)

- Để quản lý dãy con ta cần: một chỉ số đầu(chỉ nơi bắt đầu dãy con) và độ dài củadãy hoặc chỉ số đầu và chỉ số cuối (chỉ nơi kết thúc dãy con)

- Dãy con có thể có 1, 2, … N phần tử (tuỳ vào định nghĩa dãy con và yêu cầu đềbài) Nếu dãy mẹ có N phần tử thì ta có 2n dãy con

- Để duyệt qua tất cả các dãy con của một dãy gồm n số ta dùng thuật toán vét cạngồm 3 vòng For như sau:

{1} Vòng for 1: Cho biết độ dài của dãy con có i phần tử;

{2} Vòng for 2: Cho biết dãy con bắt đầu từ vị trí j, vậy vị trí bắt đầu của dãy concuối cùng có độ dài i sẽ là n-i+1;

{3} Vòng for 3: Dùng để duyệt qua các phần tử của dãy con bắt đầu từ vị trí đầu là

Trang 5

2.3.2 Viết chương trình cho 4 bài tập cơ bản

Ở đây tôi đưa ra 4 loại bài tập cơ bản này để học sinh hiểu cách áp dụng lý thuyết

về dãy con đã cung cấp ở phần trên, với 4 bài tập cơ bản này giáo viên chưa cầnthiết đòi hỏi chương trình của học sinh làm ra phải chạy được bao nhiêu test mà chỉcần giải đúng được một vài trường hợp test nhỏ là được Nhưng yêu cầu đặt ra vớihọc sinh là phải làm thành thạo được 4 bài toán cơ bản này thì mới có đủ kiến thức

và kỹ năng để xử lý các bài dãy con khác một cách tốt nhất có thể

Bài cơ bản 1

Cho dãy A gồm N số nguyên Viết chương trình in ra các dãy con liên tiếp gồm 1phần tử, 2 phần tử, gồm N phần tử của dãy đã cho (dãy con liên tiếp là dãy gồmmột số phần tử liên tiếp của dãy đã cho có thể gồm 1 hoặc nhiều phần tử, bản thândãy đã cho cũng là 1 dãy con bằng có số phần tử bằng chính nó)

VD: N=6

Dãy A: 1 2 3 4 5 6

In ra:

Dc1: 1Dc2: 2Dc3: 3Dc4: 4Dc5: 5Dc6: 6Dc7: 1 2Dc8: 2 3Dc9 3 4Dc10 4 5Dc11 5 6Dc12 1 2 3Dc13 2 3 4Dc14 3 4 5Dc15 4 5 6Dc16 1 2 3 4Dc17 2 3 4 5Dc18 3 4 5 6Dc19 1 2 3 4 5Dc20 2 3 4 5 6Dc21 1 2 3 4 5 6Với bài tập này học sinh chỉ cần vận dụng lý thuyết đã được cung cấp để giải quyết,mục đích của bài tập này là để học sinh đưa ra được cũng như thấy được hình ảnh

cụ thể các dãy con của một dãy số cho trước

Chương trình tham khảo như sau:

Trang 6

VD: N=6

Dãy A: 1 2 3 4 5 6

In ra:

Dc1: 1 2 3 4 5 6Dc2: 1 2 3 4 5Dc3: 2 3 4 5 6Dc4: 1 2 3 4Dc5: 2 3 4 5Dc6: 3 4 5 6Dc7: 1 2 3Dc8: 2 3 4Dc9 3 4 5Dc10 4 5 6Dc11 1 2Dc12 2 3

Trang 7

Dc13 3 4Dc14 4 5Dc15 5 6Dc16 1Dc17 2Dc18 3Dc19 4Dc20 5Dc21 6Mục đích của bài tập 2 này là rèn luyện thêm kỹ năng chuyển đổi giữa câu lệnh Fortiến và For lùiviệc làm này có lợi khi giáo viên đưa ra yêu cầu tìm một dãy conngắn nhất hoặc dài nhất thỏa mãn một điều kiện nào đó, khi đó học sinh sẽ biết nênchọn câu lệnh for nào để khi tìm thấy một dãy con như vậy thì thoát luôn khôngcần tìm tiếp.

Chương trình tham khảo như sau:

Cho dãy A gồm N số nguyên Viết chương trình in ra các dãy con liên tiếp của dãy

đã cho (dãy con liên tiếp là dãy gồm một số phần tử liên tiếp của dãy đã cho có thểgồm 1 hoặc nhiều phần tử, bản thân dãy đã cho cũng là 1 dãy con bằng có số phần

tử bằng chính nó)

VD: N=6

Trang 8

Dãy A: 10 1 2 5 9 4

In ra:

Dc1: 10 1 2 5 9 4Dc2: 10 1 2 5 9Dc3: 10 1 2 5Dc4: 10 1 2Dc5: 10 1Dc6: 10Với bài tập này ta tập cho học sinh thói quen đọc kỹ đề bài và xem xét kỹ outputcủa bài toán để từ đó đưa ra những điều chỉnh trong cách duyệt để tìm đúng output,

vì đề bài cũng yêu cầu đưa ra các dãy con nhưng chỉ khác là các dãy con có độ dài

từ 1 đến N chỉ được đưa ra đúng một lần và các dãy con đó đều bắt đầu từ phần tửthứ 1 của dãy

Từ đó có thể tự phân tích được cách làm, nếu học sinh còn lúng túng giáo viên cóthể hướng dẫn học sinh để đưa ra nhận xét sau:

- Có N lần duyệt, vậy ta dùng biến i là biến duyệt số lần, với i chạy từ 1 đến N

- Với mỗi lần duyệt i, ta in ra các dãy con từ 1 đến N-i+1

Vậy khi đó chỉ cần có 2 vòng for là đủ để in ra các dãy con này, vậy so với thuậttoán vét cạn đã được giới thiệu ở phần lý thuyết thì ta bỏ bớt đi vòng lặp thứ 3 Chương trình tham khảo như sau:

Trang 9

Tương tự như vậy giáo viên có thể thay đổi cách in các dãy con để học sinh rènluyện thêm kỹ năng, chẳng hạn thay đổi thành bài toán cơ bản 4 sau đây:

Bài cơ bản 4

Cho dãy A gồm N số nguyên Viết chương trình in ra các dãy con liên tiếp của dãy

đã cho (dãy con liên tiếp là dãy gồm một số phần tử liên tiếp của dãy đã cho có thểgồm 1 hoặc nhiều phần tử, bản thân dãy đã cho cũng là 1 dãy con bằng có số phần

tử bằng chính nó)

VD: N=6 ;Dãy A: 10 1 2 5 9 4

In ra:

Dc1: 10Dc2: 10 1Dc3: 10 1 2Dc4: 10 1 2 5Dc5: 10 1 2 5 9Dc6: 10 1 2 5 9 4Với bài này thì học sinh tự sửa lại chương trình của bài tâp cơ bản 3 ở trên là xong

2.3.3 Làm các bài tập thực tế để vận dụng, cải tiến, hiệu chỉnh và nâng cấp chương trình

Đối với phần này khi làm bài tập giáo viên có thể đưa ra 3 mức độ để học sinh rènluyện và nâng cao kỹ năng lập trình:

Mức độ 1: Yêu cầu học sinh cải tiến chương trình đã viết nếu có thể

Ở mức độ này giáo viên nên yêu cầu học sinh bám sát vào các đặc điểm của dữliệu, dữ kiện mà đê bài yêu cầu, tuy nhiên giáo viên chưa đặt ra yêu cầu là phảichạy được nhiều test Chỉ cần chạy được 1 đến 2 hoặc 3 test đúng là được

Mức độ 2: Hướng dẫn học sinh sử dụng các kỹ thuật lập trình khác để nâng cấp

chương trình chạy được nhanh hơn (nhiều test hơn)

Ở mức độ này dựa vào vào các đặc điểm của dữ liệu, dữ kiện mà đê bài yêu cầu,giáo viên có thể hướng dẫn thêm học sinh các kỹ thuật khác để giúp học sinh nângcấp chương trình nhưng chưa phải là chạy hết được các test Chẳng hạn kỹ thuậtdù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 năng lực tiếp thu của học sinh giáo viên có thể hướng dẫn học

sinh sử dụng các kỹ thuật lập trình khác để xử lý các bộ test lớn của bài toán.Chẳng hạn như quy hoạch động…

Dưới đây là một số bài tập tôi đã sử dụng để rèn luyện kỹ năng cho học sinh:

Bài tập 1: Cho một mảng số nguyên gồm n phần tử Tìm dãy con gồm m phần tử

(m n 1000) sao cho dãy con này có tổng lớn nhất (Dãy con là dãy các phần tửliên tiếp nhau trong mảng)

Ví dụ: nhập vào từ bàn phím

N=6

1 -3 2 -5 4 3

Trang 10

(xử lý dãy con bắt đầu từ vị trí j đến vị trí i+j-1);

Khi đó học sinh có thể viết chương trình như sau:

Type M1C=ARRAY[1 1000] Of Integer;

Max:=S; {Thay tổng mới}

vt:=j; { Thay vị trí đầu tiên của dãy con mới }

End;

Trang 11

End;

Writeln('Day con co tong lon nhat la:');

For i:=vt To vt+m-1 Do Write(A[i]:5);

Readln;

End

Sau khi đã viết được chương trình giáo viên có thể yêu cầu học sinh tự cải tiếnchương trình nếu có thể, nếu học sinh còn lúng túng thì giáo viên mới đưa ra nhậnxét để học sinh cải tiến chương trình của mình

Hướng dẫn cải tiến chương trình: Giống như trong bài toán tìm giá trị lớn nhất

của dãy số, ban đầu ta giả sử Max = A[1], thì ở đây ta cũng giả sử tổng Max banđầu là tổng các phần tử từ 1 đến M, các lần sau ta chỉ tìm và so sánh tổng Max vớicác dãy con bắt đầu từ vị trí thứ 2 trở đi, chương trình tham khảo như sau:

Type M1C=ARRAY[1 1000] Of Integer;

Write('Nhap so phan tu cua day con: m= '); Readln(m);

vt:=1; {Vị trí phần tử đầu tiên của dãy con}

{Giả sử m phần tử đầu tiên của mảng A là dãy con có tổng lớn nhất}

Max:=S; { Thay tổng mới }

vt:=j; { Thay vị trí đầu tiên của dãy con mới }

End;

End;

Writeln('Day con co tong lon nhat la:');

Trang 12

For i:=vt To vt+m-1 Do Write(A[i]:5);

Readln;

End

Khi chương trình đã chạy đúng được một vài test giáo viên có thể yêu cầuhọc sinh sửa lại chương trình để thực hiện việc đọc dữ liệu từ tệp và ghi kết quả ratệp, chạy chương trình với N=1000 nếu có thể

Kết quả: ghi ra file văn bản DAY.OUT gồm một dòng ghi giá trị K và chỉ số của

số hạng đầu tiên được lấy ra

Trang 13

tong:=tong+a[t];

if tong mod n =0 then

begin kmax:=i; jmax:=j; end;

Type m1c = array[1 10000] of integer;

for t:=j to j+i-1 do tong:=tong+a[t];

if tong mod n =0 then

begin kmax:=i; jmax:=j; thay:=true; end;

if thay then break;

Trang 14

Với bài này đề bài không cho giới hạn của N nên giáo viên cũng chưa cần yêu cầuchương trình của học sinh phải chạy được nhiều test.

Bài tập 3: Đoạn con

Cho dãy số nguyên a1, a2, , aN (|ai| < 109, N < 105) Một tập hợp khác rỗng các

số hạng liên tiếp {ai, ai+1, , ak} (i  k) gọi là một đoạn con của dãy đó Với mỗiđoạn con ta tính tổng tất cả các số hạng của nó

Yêu cầu: Tìm giá trị lớn nhất trong số các tổng của các đoạn con của dãy đã cho.

Dữ liệu vào: cho trong file SUBSEQ.INP:

Dòng đầu chứa số N, dòng thứ i trong N dòng tiếp theo chứa số ai

Dữ liệu ra: Ghi ra file SUBSEQ.OUT một số nguyên là giá trị tổng đoạn con lớn

4 -1 5-2

8

(Giải thích:

đoạn con tổng lớn nhất là:

4 – 1 + 5 = 8)

(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 bài này, vận dụng thuật toán vét cạn để duyệt dãy con học sinh có thể viếtchương trình như sau:

Type m1c = array[1 100000] of longint;

Trang 15

begin

tong:=0;

for t:=j to j+i-1 do tong:=tong+a[t];

if tong > kq then kq:=tong;

Mức độ 1: Dựa vào kỹ thuật quy hoạch động, ta hướng dẫn cải tiến như sau:

- Dùng mảng một chiều B để lưu tổng các dãy con cơ bản của dãy, với B[i] là tổngcủa i phần tử đầu tiên Khi đó muốn tìm tổng của dãy con từ vị trí i đến vị trí j tachỉ việc lấy b[j]-b[i-1] là được (với i<=j<=N)

- Thay vì đọc dữ liệu vào mảng sau đó mới xử lý thì ta đọc từng số vào biến, cộngdồn vào biến tong để lưu vào mảng tổng B

- Bổ sung thêm phần tử B[0] để làm mốc tính toán với B[0]=0, ví dụ muốn tínhtổng dãy con từ phần tử thứ 1 đến phần tử thứ 2 thì ta phải lấy B[2]-B[0]

- Vét cạn các khả năng để tìm dãy con có tổng lớn nhất bằng cách tìm hiệu cácB[j]-B[i-1] để so sánh với kq (giả sử là tổng lớn nhất cần tìm), với i chạy từ 1 đế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

🧩 Sản phẩm bạn có thể quan tâm

w