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

KIỂU dữ LIỆU xâu từ bài TOÁN cơ bản đến các bài TOÁN bồi DƯỠNG học SINH GIỎI

19 110 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 19
Dung lượng 146,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

- Tin học là một môn mới được đưa vào học đại trà ở cấp THPT trên toàn quố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ản chung về máy tính và khoa học máy tính,

Trang 1

“KIỂU DỮ LIỆU XÂU TỪ BÀI TOÁN CƠ BẢN ĐẾN CÁC BÀI TOÁN

BỒI DƯỠNG HỌC SINH GIỎI”

PHẦN I: ĐẶT VẤN ĐỀ

1 Lí do chọn đề tài

- Với sự quan tâm của Đảng và Nhà nước về công tác Giáo dục - Đào tạo (GD-ĐT), cùng với sự nỗ lực của giáo viên và học sinh, thời gian qua chúng ta

đã đạt được một số thành tích đáng kể trong công tác dạy và học Tuy nhiên, nếu đánh giá một cách tổng thể, khách quan, thì hiện nay chất lượng, hiệu quả

GD-Đ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òn chư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ản xuất, đời sống còn hạn chế, nhất là trong lĩnh vực công nghệ thông tin và ứng dụ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

Trang 2

- Tin học là một môn mới được đưa vào học đại trà ở cấp THPT trên toàn quố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ản chung 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 1 phần ở các chương trình học cấp THCS, các chương trình học nghề, hoặc qua sá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ọc lớ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êu cầ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ều trong khoa học cũng như trong thực tiễn Tuy nhiên để nắm bắt được các kiến thứ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ọc chươ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 các môn theo khối có thi Đại học của mình thì các em và phụ huynh cũng khô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ốt chương trình Tin học lớp 11 và thi đạt thành tích cao trong kỳ thi học sinh giỏi thì 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 “Kiểu dữ liệu xâu từ bài toán cơ bản đến các bài toán bồi dưỡng học sinh giỏi”

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, qua trao đổ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 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 sinh ham học, yêu thích môn 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 được bả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

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át hiệ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àn mớ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

Trang 3

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 “Kiểu dữ liệu xâu từ bài toán cơ bản đến các bài toán bồi dưỡng 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 2016 – 2017, 2017 - 2018 và được tiếp tục nghiên cứu bổ sung và thực hiện trong năm học 2018 - 2019

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ủa cá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ạy học tại trường THPT Triệu Sơn 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 “Kiểu dữ liệu xâu từ bài toán cơ bản đến các bài toán bồi dưỡng học sinh giỏi” hệ thống lại cho các em kiến thức

cơ bản về kiểu xâ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ên xâu về kiểu dữ liệu xâu

PHẦN II GIẢI QUYẾT VẤN ĐỀ

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ọc sinh 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 sinh chư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 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ỗi trường THPT trong tỉnh làm bài cũng có chất lượng không đồng đều và chưa cao

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 em mới chỉ xử lý thông qua các con số, các bài tập về việc cộng, trừ, nhân chia, còn các bài tập xử lí về ký tự, xâu các em hoàn toàn chưa biết Vì vậy khi nói

về kiểu xâu 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 xâu 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 xâu, các em học sinh khá giỏi và nhất

là các em tham gia kỳ thi học sinh giỏi cấp tỉnh môn Tin học đạt kết quả cao

Trang 4

tôi đã nghiên cứu đề tài “Kiểu dữ liệu xâu từ bài toán cơ bản đến các bài toán bồi dưỡng học sinh giỏi”.

3 Nội dung đề tài

Trong SGK Tin học 11 bài “Kiểu xâu” được trình bày các kiến thức

cơ bản:

+ Xâu là dãy các ký tự trong bộ mã ASCII, mỗi kí tự được gọi là một phần tử của xâu Số lượng kí tự trong một xâu được gọi là độ dài của xâu Xâu có độ dài bằng 0 được gọi là xâu rỗng

+ Có thể xem xâu là mảng 1 chiều mà mỗi phần tử là một kí tự Các kí

tự của xâu được đánh số thứ tự, thường bắt đầu từ 1

+ Các thao tác xử lí xâu: Ghép xâu, So sánh xâu, Xóa xâu, chèn xâu, copy xâu, lấy độ dài xâu, tìm vị trí xuất hiện của xâu, chuyển sang kí tự in hoa

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ụ 3 (Trang 71 SGK Tin học 11)

Chương trình sau nhập 1 xâu vào từ bàn phím và đưa ra xâu đó theo thứ

tự ngược lại

Để giải được bài toán này sau khi học xong các kiến thức cơ bản về kiểu xâu chỉ một vài em làm được, nhưng khi giáo viên cho các em học sinh nêu ý tưởng và hướng dẫn thì gần như các em sẽ làm được một cách đơn giản

Ý tưởng: Cho 1 vòng lặp chạy từ cuối về đầu và viết các kí tự lên màn hình:

For i:=length(s) downto 1 do write(s[i]); { Xâu s là xâu nhập vào}

Tuy nhiên có 1 số học sinh sẽ có ý tưởng là “ em sẽ tạo ra xâu s1 là xâu ngược lại của xâu s” sau đó ghi ra s1

Lúc này giáo viên cần nhận xét và khẳng định được cách làm trên là đúng nhưng để làm được bài trên thì cách làm đó là dài hơn và sau đó cho học sinh bài tập mới

Bài toán 2: Bài 1(Trang 73 phần Bài tập và thực hành 5 SGK Tin học 11)

Nhập vào từ bàn phím 1 xâu Kiểm tra xem xâu đó có phải xâu đối xứng không Xâu đối xứng có tính chất: đọc nó từ phải sang trái cũng thu được kết quả giống như đọc từ trái sang phải (còn được gọi là xâu palindrome)

Trang 5

Ở trong bài toán trên khi phần hướng dẫn thì tác giả đã hướng dẫn theo cách làm đọc từ trái sang phải (For i:=length(s) downto 1 do p:=p+s[i]) để được xâu p và kiểm tra xem xâu p có bằng với xâu ban đầu hay không để kết luận xâu s là đối xứng hay không đối xứng Từ bài làm của tác giả giáo viên phân tích cho học sinh biết được cách ghép trước hay ghép sau; đọc từ phải sang trái hay từ trái sang phải để học sinh biết làm các bài có liên quan sau này và đặt ra câu hỏi:

- Có cách nào để kiểm tra nhanh hơn được không?

- Thầy đọc nữa xâu có kiểm tra được hay không?

{ HD: dx:=1;

For i:=1 to (length(s) div 2) do

if s[i]<>s[length(s)-i+1] then begin dx:=0; break; end;

if dx=1 then write(‘Xau s là doi xung’) else write(‘Xau s khong doi xung’); }

Trong phần hướng dẫn học sinh khá giỏi và đặc biệt là việc bồi dưỡng học sinh giỏi tham dự kỳ thi học sinh giỏi cấp tỉnh, giáo viên có thể nâng cấp lên việc kiểm tra cho nhiều xâu

Bài toán 3 (Bài 2: (5 điểm) Xâu đối xứng - Đề thi HSG tỉnh Thanh Hóa năm học:

2009-2010)

Xâu đối xứng là xâu đọc giống nhau nếu ta đọc từ trái qua phải hoặc từ phải qua trái

Ví dụ: xâu RADAR là xâu đối xứng

Kiểm tra xem một xâu có phải là xâu đối xứng hay không, nếu đối xứng thì thông báo là 1, nếu không đối xứng thì thông báo là 0

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

- Dòng đầu tiên ghi một số nguyên N

- N dòng tiếp theo mỗi dòng ghi các xâu cần kiểm tra

Kết quả: Ghi ra file văn bản BAI2.OUT: gồm N dòng, mỗi dòng ghi 0 nếu xâu

tương ứng không đối xứng hoặc ghi 1 nếu xâu tương ứng đối xứng

Giới hạn: 0 < N < 30000; Các xâu có độ dài không quá 255 kí tự.

Ví dụ:

3 AFHFA ACDDB

1 0 0

Trang 6

ACRTT Với bài toán này giáo viên chỉ cần hướng dẫn học sinh đọc vào từng dòng Nếu đối xứng ghi ra số 1 còn không đối xứng ghi ra 0 là hoàn thành (Các học sinh có thể viết thành các hàm hoặc thủ tục để bố cục chương trình được gọn, tuy nhiên bản chất của bài toán thì không có gì thay đổi)

program xaudoixung;

const fi='bai2.in5';

fo='bai2.ou5';

nmax=10000;

var n,i:integer;

s:array[1 nmax] of string;

a:array[1 nmax] of byte;

f1,f2:text;

procedure doc;

begin

assign(f1,fi);

reset(f1);

readln(f1,n);

for i:=1 to n do readln(f1,s[i]);

close(f1);

end;

function doixung(s:string): boolean;

var b:string; j:integer;

begin

doixung:=false;

b:='';

for j:=length(s) downto 1 do b:=b+s[j];

if s=b then doixung:=true;

end;

procedure ghi;

begin

assign(f2,fo);

rewrite(f2);

for i:=1 to n do writeln(f2,a[i]);

close(f2);

end;

BEGIN

doc;

for i:=1 to n do

if doixung(s[i]) then a[i]:=1 else a[i]:=0;

ghi;

end.

Trang 7

Với các bài toán đã xét ở trên thì ta đã có trước xâu s, nhiệm vụ của học sinh là chỉ cần xét nó đối xứng hay không Để nâng cao khả năng làm bài cho học sinh thì giáo viên còn có thể đưa ra yêu cầu cao hơn đó là học sinh phải

tự tạo ra các xâu và kiểm tra xem nó có đối xứng hay không

Bài toán 4 Bài 2: ( 7,0 điểm ) Xâu Palindrome – Đề thi học sinh giỏi tỉnh

Thanh Hóa năm học 2012 – 2013.

Một xâu kí tự được gọi là xâu Palindrome ( đối xứng ) nếu ta đọc từ trái sang phải hay đọc từ phải sang trái đều giống nhau

Yêu cầu: Cho trước một xâu kí tự S Hãy xác định số xâu đối xứng là xâu con

của nó Một kí tự cũng được coi là một xâu đối xứng Xâu con của S là xâu gồm một số kí tự liên tiếp trong S

Dữ liệu vào: Từ tệp văn bản BAI2.INP:

- Dòng thứ nhất ghi số nguyên dương N (N<100)

- N dòng tiếp theo mỗi dòng là một xâu kí tự ( độ dài xâu <255)

Kết quả: Ghi vào tệp văn bản BAI2.OUT gồm:

- N dòng, mỗi dòng chứa một số nguyên biểu thị số xâu con đối xứng

Ví dụ:

{Các bài trong đề thi học sinh giỏi cấp tỉnh ở dạng như bài toán 4 được

đề cập khá thường xuyên trong các đề thi HSG ở các năm}

DẠNG BÀI TẬP 2 CÁC BÀI TOÁN XỬ LÍ XÂU NHƯ MẢNG MỘT

CHIỀU MÀ MỐI PHẦN TỬ LÀ MỘT KÍ TỰ.

Bài toán 5 Bài 2 – Bài tập và thực hành số 5 SGK Tin học 11 trang 73 Viết chương trình nhập từ bàn phím 1 xâu S và thông báo ra màn hình số lần xuất hiện của mỗi chữ cái tiếng Anh trong S ( Không phân biệt chữ hoa hay chữ thường

Với các học sinh mới học các kiến thức cơ bản giáo viên có thể hướng dẫn các em lần lượt thực hiện các công việc

Bước 1 Chuyển toàn bộ xâu sang chữ hoa

For i:=1 to length(s) do s[i]:=upcase(s[i]);

1 IOI

4

Trang 8

{ Với free pascal ta thực hiện đơn giản hơn s:=upcase(s); }

Bước 2 Lần lượt đếm xem trong xâu S có bao nhiêu chữ A,B,C, Z mỗi lần

đếm xong ta ghi kết quả

For ch:=’A’ to ‘Z’ do

Begin sl:=0;

For i:=1 to length(s) do if s[i]=ch then inc(sl);

If sl>0 then writeln(ch,’ xuat hien ’,sl,’ lan’);

End;

Tuy nhiên, trong việc bồi dưỡng học sinh giỏi thì cần hướng dẫn cho học sinh làm bài theo cách tổng quát hơn để có thể thực hiện trong nhiều bài Giáo viên yêu cầu thực hiện làm bài bằng thuật toán “Lùa bò vào chuồng” đã được hướng dẫn trong phần mảng

Fillchar(sl,sizeof(sl),0);

For i:=1 to length(s) do inc(sl(s[i]));

For j:=’A’ to ‘Z’ do if sl[j]>0 then writeln(j,’ xuat hien ’,sl[j],’ lan’); Với việc hướng dẫn cho học sinh làm bài tập cơ bản trên một cách đầy đủ

và các em hiểu được bản chất của các công việc cần xử lý thì các em có thể làm được rất nhiều các bài trong đề thi học sinh giỏi

Bài toán 6 ( Bài 2: (5 điểm) Kí tự khác nhau – Đề thi học sinh giỏi tỉnh Thanh Hóa năm học 2016 – 2017)

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ụ:

Trang 9

AzB1C9A1BC 6

A 2

B 2

C 2

z 1

1 2

9 1 Bài toỏn 6 được thực hiện một cỏch dễ dàng sau khi học sinh đó làm được như ở vớ dụ trờn và chỉ phải thay cỏch viết trong lệnh ghi kết quả mà thụi

Fillchar(sl,sizeof(sl),0);

For i:=1 to length(s) do inc(sl(s[i]));

For j:=’A’ to ‘Z’ do if sl[j]>0 then writeln(f1,j,’ ’,sl[j]);

For j:=’a’ to ‘z’ do if sl[j]>0 then writeln(f1,j,’ ’,sl[j]);

For j:=’0’ to ‘9’ do if sl[j]>0 then writeln(f1,j,’ ’,sl[j]);

Bài toỏn 7 ( Bài 3: (4.0 điểm) Chữ cái xuất hiện – Đề thi học sinh giỏi tỉnh Thanh Húa năm học 2011 – 2012)

Cho xâu St chỉ gồm các chữ cái Tính số lần xuất hiện của chữ cái xuất hiện nhiều nhất trong xâu (không phân biệt chữ in hoa và in thờng)

Dữ liệu vào: Từ file BAI3.INP gồm: Xâu St (độ dài ≤ 500 ký tự).

Kết quả: Ghi ra file BAI3.OUT gồm: Một dòng duy nhất là bội số chung nhỏ

nhất của kết quả bài toán và 105

Ví dụ:

BAI3.INP BAI3.OUT AAABDA 100000 Trong bài toỏn 7 cỏch làm hoàn toàn tương tự như bài toỏn cơ bản nhưng cỏc em cần tỡm giỏ trị lớn nhất là số lần nhiều nhất của kớ tự Sau khi tỡm giỏ trị lớn nhất Max cần tỡm giỏ trị là bội chung nhỏ nhất của giỏ trị Max và

10000 { Kết quả là tớch của Max với 10000 chia cho ước chung lớn nhất giữa max và 10000:

KQ=Max*10000 div UCLN(Max,10000)

DẠNG BÀI TẬP 3 CÁC BÀI TOÁN CƠ BẢN VÀ CÁCH GIẢI ƯU

VIỆT TỪ KIỂU DỮ LIỆU XÂU.

Trang 10

Bài toán 8 ( Bài 1 Đề thi giáo viên giỏi tỉnh Thanh Hóa năm học

2013 – 2014)

Một xâu kí tự là 1 dãy các số chính phương được viết dài vô tận 149162536 Cho 1 số nguyên N (1<=N<=255) Tìm kí tự đứng ở vị trí thứ N trong xâu?

D÷ liÖu vµo: Tõ file BAI1.INP chứa 1 số nguyên N.

KÕt qu¶: Ghi ra file BAI1.OUT chứa kí tự tìm được.

VÝ dô:

BAI1.INP BAI1.OUT

Bài toán 8 sẽ được giải 1 cách dễ dàng nếu chúng ta chuyển sang làm như kiểu xâu

Bước 1 Lấy các số chính phương ghép thành 1 dãy

Có 1 số học sinh các em quét các số tự nhiên từ 1 đến 1.000.000.000 để tìm các số chính phương và ghép lại Tuy nhiên cách này các em làm sẽ dài và tốc độ xử lí chậm Thay vào đó chúng ta có thể lấy bình phương của các số tự nhiên từ 1 đổi ra xâu và ghép vào là được

Bước 2 Khi độ dài xâu lớn hơn hoặc bằng N ta sẽ ghi ra kết quả và kết thúc.

s:=0;

For i:=1 to 100000 do

Begin

Str(i*i,s1); s:=s+s1;

If length(s) >= N then begin write(f1,s[N]); break; end;

End;

Từ dạng bài toán này giáo viên cũng có thể cho các em làm các bài toán khác với cách làm tương tự như:

+ Cho các số tự nhiên từ 1 ghép thành 1 dãy vô tận Tìm

+ Cho các số nguyên tố từ 2 ghép thành 1 dãy vô tận Tìm

Bài toán 9 (Bài 2: (7 điểm) TÌM MẬT KHẨU: Đề thi học sinh giỏi tỉnh

Thanh Hóa năm học 2014 – 2015)

Ngày đăng: 31/10/2019, 14:09

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