1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Hướng dẫn giải các bài toán về kiểu dữ liệu mảng trong đề thi học sinh giỏi

24 10 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 24
Dung lượng 182,5 KB

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

Nội dung

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ TRƯỜNG THPT TRIỆU SƠN 1 SÁNG KIẾN KINH NGHIỆM TÊN ĐỀ TÀI “ HƯỚNG DẪN GIẢI CÁC BÀI TOÁN CƠ BẢN VỀ KIỂU DỮ LIỆU MẢNG TRONG ĐỀ THI HỌC SINH GIỎI ” Người thự

Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO THANH HOÁ

TRƯỜNG THPT TRIỆU SƠN 1

SÁNG KIẾN KINH NGHIỆM

TÊN ĐỀ TÀI

“ HƯỚNG DẪN GIẢI CÁC BÀI TOÁN CƠ BẢN VỀ KIỂU

DỮ LIỆU MẢNG TRONG ĐỀ THI HỌC SINH GIỎI ”

Người thực hiện: NGUYỄN QUỐC THANH Chức vụ: Giáo viên

SKKN thuộc lĩnh vực (môn): TIN HỌC

Trang 2

4 1.3 Đối tượng và khách thể nghiên cứu 2

6 1.5 Những điểm mới của sáng kiến kinh nghiệm 2

10 2.3.1 Dạng bài tập 1 Các bài toán phát triển cơ bản. 4

11 2.3.2 Dạng bài tập 2 Bài toán tạo mảng phụ. 9

12 2.3.3 Dạng bài tập 3 Các bài toán sử dụng mảng 1 chiều 13

Trang 3

GD – ĐT Giáo dục và Đào tạo

Trang 4

“HƯỚNG DẪN GIẢI CÁC BÀI TOÁN CƠ BẢN VỀ KIỂU DỮ LIỆU

MẢNG TRONG ĐỀ THI HỌC SINH GIỎI”

ĐT còn chưa đáp ứng được yêu cầu ngày càng cao của xã hội Nhìn chung trình

độ kiến thức của học sinh, khả năng tư duy khoa học, khả năng thực hành cònchưa thích ứng được với thực tiễn xã hội, khả năng vận dụng kiến thức vào sảnxuất, đời sống còn hạn chế, nhất là trong lĩnh vực công nghệ thông tin và ứngdụng công nghệ thông tin trong việc dạy của giáo viên và việc học của học sinh

- Tin học là một môn mới được đưa vào học đại trà ở cấp THPT trên toànquốc, phần nội dung chương trình lớp 10 và 12 với các phần kiến thức cơ bảnchung về máy tính và khoa học máy tính, soạn thảo văn bản Microsoft Word,Microsoft Access hay các kiến thức về mạng máy tính đã được các em tiếp cận 1phần ở các chương trình học cấp THCS, các chương trình học nghề, hoặc quasách báo, các chương trình trên truyền hình nên các em có thể từng bước nắmđược bài và không gặp nhiều khó khăn trong quá trình học Chương trình họclớp 11 về khái niệm lập trình và viết các chương trình cho máy thực hiện, yêucầu tư duy trừu tượng cao, công việc có tính chất quá trình được ứng dụng nhiềutrong khoa học cũng như trong thực tiễn Tuy nhiên để nắm bắt được các kiếnthức cơ bản này với học sinh không phải là điều dễ dàng

- Đặc biệt môn Tin học không phải là môn lựa chọn thi tốt nghiệp hay thiĐại học nên các em học sinh thường “ngại” học và thụ động trong việc họcchương trình tin học lớp 11 Trong kỳ thi học sinh giỏi toàn tỉnh hiện nay, các

em học sinh học giỏi và được chọn vào đội tuyển thì các em hà phụ huynh cũngkhông muốn tham gia vì còn bận học để thi Đại học Vì vậy để học sinh học tốtchương trình Tin học lớp 11 và thi đạt thành tích cao trong kỳ thi học sinh giỏithì yếu tố tự học được đánh giá rất cao Vì vậy để giúp học sinh chủ động học và

tích cực học tôi mạnh dạn đưa ra đề tài “Hướng dẫn giải các bài toán cơ bản

về Kiểu dữ liệu mảng trong đề thi Học sinh giỏi” để giúp học sinh học tự tin

học bài 11 sách giáo khoa Tin học 11 được hiệu quả

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

Thực tế học tập và giảng dạy Tin học tại Trường THPT Triệu Sơn 1, quatrao đổi, bàn bạc với các đồng nghiệp trong và ngoài nhà trường tôi nhận thấy

Trang 5

một vấn đề là việc tìm ra phương pháp dạy, phương pháp động viên để học sinhham học, yêu thích môn học và không sợ học môn Tin học là một điều rất khó.

Sở dĩ học sinh cảm thấy khó khăn trong việc học là do các em không thấy đượcbản chất thực tế của vấn đề, cái hay, ứng dụng của kiến thức trong cuộc sống

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

Một thực trạng chung của học sinh trong cả nước, nhất là học sinh ở các tỉnh

mà điều kiện cơ sở vật chất còn nhiều khó khăn và trường THPT Triệu sơn I làmột ví dụ thì khả năng lập trình của học sinh với khả năng tư duy, tìm tòi, pháthiện vấn đề còn chưa tốt, nhất là việc phải tiếp cận với một công việc hoàn toànmới với các em Do vậy khi giảng dạy tôi luôn cho học sinh có cái nhìn thấu đáo

từ nhiều góc độ khác nhau để hiểu được bản chất vấn đề Kinh nghiệm thể hiện

trong đề tài “Hướng dẫn giải các bài toán cơ bản về Kiểu dữ liệu mảng trong

đề thi Học sinh giỏi” được tôi đúc kết ra trong quá trình giảng dạy, nghiên cứu

tài liệu và trao đổi cùng đồng nghiệp trong năm học 2018 – 2019, 2019 - 2020

và được tiếp tục nghiên cứu bổ sung và thực hiện trong năm học 2020 - 2021

1.4 Phương pháp nghiên cứu.

Đề tài này được rút ra từ kiến thức học ở Đại học và kinh nghiệm dạy học

ở trường THPT Triệu Sơn 1 của bản thân và có sự tham gia đóng góp ý kiến củacác đồng nghiệp trong và ngoài nhà trường cùng với các tài liệu mà tôi sưu tầmđược từ sách báo và các thông tin, diễn đàn trên mạng Internet Các giải pháp,kiến thức này tôi đã trao đổi cùng đồng nghiệp và áp dụng trong quá trình dạyhọc tại trường THPT Triệu Sơn 1

1.5 Những điểm mới của Sáng kiến kinh nghiệm.

Thông qua kiển thức thể hiện trong đề tài “Hướng dẫn giải các bài toán cơ

bản về Kiểu dữ liệu mảng trong đề thi Học sinh giỏi” hệ thống lại cho các em

kiến thức cơ bản về kiểu mảng, các thao tác khi làm bài tập về mảng 1 chiều,các bài tập vận dụng, phát triển tổng quát và vận dụng làm các bài toán chuyênxâu về kiểu dữ liệu mảng

Trang 6

2 NỘI DUNG

2.1 Cơ sở lí luận.

Trong sách giáo khoa Tin học 11 nội dung chương trình mặc dù đãđược giảm tải theo yêu cầu của Bộ giáo dục nhưng vẫn còn khá nặng với họcsinh nên đã dẫn tới việc chán nản của các em Hơn nữa, môn học này học sinhchưa thấy được ứng dụng thực tế và không thi tốt nghiệp hay thi Đại học nên các

em có tâm lí không muốn học mà chỉ muốn đối phó cho qua năm học Các em

có lực học khá, tốt có khả năng tham gia vào đội tuyển dự thi HSG cấp trường,cấp tỉnh nhưng các em không tự tin và rất lo lắng Nên khi kết thúc năm học,cũng như trong các kỳ thi học sinh giỏi thì những học sinh ưu tú nhất của mỗitrường THPT trong tỉnh làm bài cũng có chất lượng không đồng đều và chưacao

2.2

Thực trang vấn đề.

Từ khi được tiếp cận với Tin học cũng như việc học lập trình thì các emmới chỉ xử lý thông qua các con số, các bài tập đơn giản về việc cộng, trừ,nhân chia, hơn nữa trong đề thi HSG các năm thì có 1 số lượng không nhỏ thísinh không làm được bài toán cơ bản về mảng bài tập xử lí về dãy số, dãy ký

tự các em hoàn toàn chưa biết rõ bản chất Vì vậy khi nói về kiểu mảng thìcác em rất mơ hồ và không hiểu nó là cái gì? Không có kiểu dữ liệu mảng cógiải quyết được các công việc không? Vì vậy để cho các em học sinh hiểuđược bài dữ liệu về kiểu mảng, các em học sinh khá giỏi và nhất là các emtham gia kỳ thi học sinh giỏi cấp tỉnh môn Tin học đạt kết quả cao tôi đã

nghiên cứu đề tài “Hướng dẫn giải các bài toán cơ bản về Kiểu dữ liệu

mảng trong đề thi Học sinh giỏi”

2.3 Nội dung đề tài

Trong SGK Tin học 11 bài “Kiểu mảng” được trình bày các kiến thức cơ bản: (Trong phần kiến thức cơ bản nên tôi chỉ trình bày về mảng 1

chiều”

+ Mảng một chiều là dãy các phần tử cùng kiểu

+ Nêu cách giới thiệu cho học biết

 Tên mảng 1 chiều

 Số lượng phần tử

 Kiểu dữ liệu của phần tử

 Cách khai báo biến mảng

 Cách tham chiếu đến phần tử

+ Một bài toán về kiểu dữ liệu mảng 1 chiều xử lý gồm:

 Khai báo mảng

Trang 7

 Đọc/ nhập mảng.

 Xử lý mảng:

 Xuất/ ghi kết quả

2.3.1 Dạng bài tập 1 Các bài toán phát triển cơ bản.

Bài toán 1: Ví dụ 1 (Trang 56 SGK Tin học 11)

Tìm phần tử lớn nhất trong dãy số nguyên

Input: Số nguyên dương n <=250 và dãy số nguyên dương a1, a2, an, mỗi

số đều không quá 500

Output: Chỉ số và giá trị của phần tử lớp nhất trong dãy số đã cho (Nếu cónhiều phần tử lớn nhất chỉ cần đưa ra 1 trong số chúng)

B1.6 Thực hiện các yêu cầu như các bài trên nhưng thay tìm GTLN bằng tìmGTNN

Trang 8

Giáo viên gợi ý và hướng dẫn để học sinh làm được các bài toán trên Từ

đó giáo viên đưa ra đề thi HSG các năm của tỉnh Thanh Hoá cũng như cáctỉnh khác hướng dẫn để học sinh biết, hiểu, thực hiện và không còn sợ đề thiHSG

Bài toán 2 - Bài 1: ( 6,0 điểm) Tổng của dãy số - (Đề thi HSG tỉnh Thanh

Hoá 2012 – 2013)

Cho dãy a1,a2,… ,aN số tự nhiên Hãy tính tổng các số của dãy, cho biết

số hạng lớn nhất trong dãy và vị trí của số hạng này

Dữ liệu vào: Từ tệp văn bản BAI1.INP chỉ một dòng chứa các số a1,a2, … ,aN

ghi cách nhau một dấu cách ( 0< N <=10000; 0<= ai <= 60000 với i=1,2,… ,N)

Kết quả: Ghi vào tệp văn bản BAI1.OUT có cấu trúc như sau:

- Dòng thứ nhất ghi tổng các số của dãy

- Dòng thứ 2 ghi số lớn nhất

- Dòng thứ 3 ghi các vị trí xuất hiện của số lớn nhất Các số trên

cùng một dòng ghi cách nhau một dấu cách

Trang 9

while not eof(f1) do

Cho một dãy số gồm N số nguyên a1, a2, , aN Người ta định nghĩa một số

ai là cực tiểu địa phương nếu thỏa mãn ai-1 > ai < ai+1 (a1 và aN không được gọi là cực tiểu địa phương) Hãy tìm số lượng cực tiểu địa phương của dãy số trên

Input: Cho trong file văn bản BAI1.INP gồm:

- Dòng 1 chứa duy nhất một số nguyên dương N (N≤106)

- Dòng 2 chứa dãy số nguyên a1, a2, , aN (|ai| ≤109, i[1,N])

Output: Ghi ra file văn bản BAI1.OUT duy nhất một số là kết quả bài toán.

Ví d :ụ:

BAI1.INP BAI1.OUT4

Yêu cầu: Hãy cho biết số lượng các phần tử có giá trị nhỏ hơn K là số nguyên tố

của dãy trên

Dữ liệu: Vào từ file văn bản BAI1.INP gồm:

Trang 10

 Dòng đầu tiên là 2 số N, K.

 Dòng tiếp theo lần lượt là N số nguyên của dãy số

Kết quả: Ghi ra File BAI1.OUT gồm duy nhất số M là số lượng các phần tử của

dãy số thoã mãn yêu cầu đề bài

Giới hạn: 0<N<50000; 0<K; ai <5000 Với mọi i = 1 N

Ví dụ:

Ý tưởng: Với bài toán cơ bản như trên học sinh học sinh chỉ việc viết thêm 1 hàm

kiểm tra số nguyên tố của số B Sau đó duyệt tất cả các số trong mảng để đếm

số lượng số m nguyên tố và nhỏ hơn số k cho trước

Trang 11

Cho dãy số gồm có n số nguyên a1, a2, a3, …, an và một số nguyên K.

Yêu cầu: Hãy cho biết dãy số đã cho có tồn tại hay không một cặp số mà trung

bình cộng của chúng là K

Dữ liệu: Vào từ file văn bản BAI2.INP gồm:

 Dòng đầu tiên là 2 số N, K

 Dòng tiếp theo lần lượt ghi số a1, a2, a3, …, an

Các số trên cùng một dòng được ghi cách nhạu ít nhất một dấu cách trống

Kết quả: Ghi ra File BAI2.OUT:

 Số 1 nếu tòn tại một cặp số thoã mãn yêu cầu toán

 Số 0 nếu không tồn tại một cặp số nào thoã mãn yêu cầu toán

Trang 12

Giới hạn: 0<N<50000; |K|; |ai|<1000 Với mọi i = 1 N

If a[i]+a[j] = 2*k then begin d:=1; break; end;

If d=1 then write(1) else write(0);

Ở trên lớp học với các em học khá, giỏi có thể làm được bài toán trên vàgiáo viên có thể cho điểm tối đa Tuy nhiên, nếu đây là 1 bài thi HSG thì giáoviên phải nhắc nhở và phân tích để học sinh thấy được giới hạn n<50.000 vìvậy nếu làm theo cách trên thì giới hạn thời gian sẽ bị quá 1s và các em sẽkhông đạt 100% số test Để đảm bảo 100% số test thì GV cần hướng dẫn vàcùng với HS tìm cách làm khác Vì a1,a2, ,an là các số từ -999 999.Chúng ta chuyển về 1 mảng mới với chỉ số từ -999 999 và thực hiện “Lùa

bò vào chuông” với các chuồng b được đánh số -999 999, sau đó thực hiện:

If d=1 then write(1) else write(0);

2.3.2 Dạng bài tập 2 Bài toán tạo mảng phụ.

Bài toán 6 Bài 2 – SGK Tin học 11 trang 66.

Cho mảng A gồm n phần tử Hãy viết chương tình tạo mảng b[1 n], trong đób[i] là tổng i phần tử đầu tiên của A

Tư duy ban đầu của HS sẽ thực hiện

Trang 13

B[n]= a[1]+a[2]+a[3]+a[4] + +a[n] =b[n-1]+a[n]

Từ phân tích trên ta được công thức tổng quát: b[i]=b[i-1]+a[i] đây làcông thức và là bài tập mà sẽ được sử dụng sau này rất nhiều trong đề thiHSG, nó là ý tưởng cho nhiều bài về quy hoạch động trên mảng 1 chiều sẽđược áp dụng

Bài toán 7 Bài 4 (4 điểm) Chia đoạn một dãy số (Đề thi HSG tỉnh Thanh

Hoá năm học 2010 - 2011)

Cho dãy số tự nhiên a1, a2, , an Hãy tìm cách chia dãy số trên thành nhiềuđoạn nhất sao cho tổng các số trong tất cả các đoạn con đều bằng nhau

Dữ liệu vào: từ file BAI4.INP gồm:

- Dòng đầu ghi số n - Các dòng còn lại ghi các số a1, a2, , an.Các số trên cùng một dòng cách nhau ít nhất một dấu cách trống

Kết quả: ghi ra file BAI4.OUT, gồm K+1 dòng (K là số đoạn chia được nhiều

nhất) như sau:

- Dòng đầu ghi hai số K và S (S là tổng giá trị của một đoạn)

- K dòng còn lại mỗi dòng ghi các số của mỗi đoạn chia được

Trang 14

Các số trên cùng một dòng cách nhau ít nhất một dấu cách trống.

Ý tưởng:

+ Tính tổng cả dãy t

+ Tổng t1 mỗi dãy con phải là ước của t

+ có k đoạn liên tiếp mà tổng mối đoạn là t div t1

Từ phân tích đề bài như trên chúng ta thấy được việc phải tính tổng cả dãy vàđặc biệt mỗi lần phải tính tổng của mỗi dãy con nên sẽ mất rất nhiều thời giancho máy thực hiện

Muốn mỗi lần thực hiện tính tổng từ phần tử i đến phần tử j ta phải thực hiệnFor i1:=i to j do t1:=t1+a[i1] nến số lượng phép tính sẽ rất nhiều

Nếu áp dụng ví dụ như bài toán 6 đã nói ở trên thì mọi việc được thực hiệnnhanh chóng:

+ Tổng cả dãy là b[n];

+ tổng t1 là b[j]-b[i-1]

Từ các phân tích như trên các em học sinh có lực khá, giỏi sẽ thực hiệnđược bài toán trên (Đây là một bài toán khó trong đề thi HSG năm 2010-2011)

var a, c : array[1 10000] of longint;

Trang 16

Bài toán tương tự

Bài toán 8 : Bài 5 : (3 điểm) Dãy con

Cho một dãy A gồm N số nguyên {a1, a2,…, an} Dãy con ai, ai+1,…, aj (1 ≤

I ≤ j≤ N) là dãy được tạo từ các phần tử liên tiếp của dãy A bắt đầu từ phần tử i

và kết thúc ở phần tử j

Yêu cầu: Hãy tìm dãy con liên tiếp có tổng lớn nhất.

Dữ liệu vào: File văn bản BAI5.INP gồm:

- Dòng đầu ghi giá trị N (1 ≤ N ≤ 10000)

- Dòng sau gồm N số nguyên{a1, a2,…, an} (-106≤ai≤106)

Dữ liệu ra: File văn bản BAI5.OUT gồm

- Dòng đầu ghi tổng các phần tử dãy con và số lượng dãy con

- Dòng tiếp theo ghi giá trị các phần tử dãy con

Ví d :ụ:

13

12 -34 14 11 9 -8 15 -7 -56 17 1619

52 2

14 11 9 -8 1511

17 16 19

2.3.3 Dạng bài tập 3 Các bài toán sử dụng mảng 1 chiều

Bài toán 9: Bài 3: (4 điểm) Ma trận (Đề thi HSG tỉnh Thanh Hoá

năm 2009 – 2010)

Cho một ma trận A gồm M dòng, N cột là các số nguyên Hãy sắp xếp cácphần tử của ma trận theo thứ tự tăng dần từ trên xuống dưới, từ trái qua phải

Dữ liệu: Vào từ file văn bản BAI3.INP, gồm:

- Dòng đầu tiên ghi hai số nguyên dương M, N (M, N<= 100)

- M dòng tiếp theo mỗi dòng ghi N số nguyên, mỗi số có trị tuyệt đối khôngvượt quá 30000, các số cách nhau ít nhất một dấu cách Các số trong M dòng này

Trang 17

biểu diễn ma trận A.

Kết quả: Ghi ra file văn bản BAI3.OUT: gồm M dòng, mỗi dòng gồm N số

nguyên, các số cách nhau ít nhất một dấu cách Các số trong M dòng này biểudiễn ma trận A đã được sắp

Hướng dẫn làm bài: Trong năm 2009 – 2010 thì phần kiến thức về mảng

2 chiều vẫn còn được giảng dạy trong SGK Vì vậy khi đọc đề này phần lớpcác em xử lí theo kiểu mảng 2 chiều nên không có ý tưởng và không giảiđược bài Thực tế bài này làm 1 bài rất cơ bản trong SGK (Có thể nói là dễ)các em chỉ việc thực hiện các công việc:

+ Đọc dữ liệu ra mảng 1 chiều.

+ Sắp xếp dãy số theo thứ tự không giảm.

+ Viết kết quả ra tệp ra–Cứ viết ra n số thì cho vào đó 1 lệnh xuống dòng

Trang 18

begin write(f, a[i],' '); {Ghi kết quả}

if( i mod N) = 0 then writeln(f); {Xuống dòng}

Cho xâu S chỉ gồm các kí tự là chữ cái tiếng anh và các chữ số (có phân

biệt chữ in hoa, in thường)

Yêu cầu: Hãy xác định số kí tự khác nhau trong xâu S và mỗi kí tự xuất hiện

bao nhiêu lần

Dữ liệu vào: Vào từ file văn bản BAI2.INP gồm 1 dòng duy nhất là xâu kí tự S

(có độ dài không quá 255)

Kết quả: Kết quả ghi ra file văn bản BAI2.OUT gồm:

- Dòng đầu ghi số kí tự khác nhau

- Các dòng tiếp theo, mỗi dòng ghi một kí tự xuất hiện trong xâu S và sốlần xuất hiện của nó Các kí tự đưa ra theo thứ tự chữ cái in hoa, in thường, chữ

số Các chữ cái, chữ số đưa ra theo thứ tự từ điển

Ví dụ:

BAI2.INP BAI2.OUT

Ngày đăng: 22/05/2021, 15:29

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