Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học MỤC LỤC TÀI LIEU THAM KHẢO.. Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để t
Trang 1Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
MỤC LỤC
TÀI LIEU THAM KHẢO
BAO CAO KET QUA NGIIEN CUU, UNG DUNG SANG KI
1.1 Tả do chọn đề t
1⁄4.Phương pháp thực hiện TH HH HH HH HH T14 ghê Hư 4
6 NGÀY SÁNG KIÊN ĐƯỢC ÁP DỤNG LÂN BẦU 2e 5
1 Lý thuyết vẻ kiểu xâu eessseeeessanisuntnsssunssseensesensssssecseeeenssanvisussnssaessineeesee 6
1.3 Các thao tác xứ lý XÂU: ninh HH eereerieraeriru
2 Các dạng bài tập kiểu xâu ¬
Dang 2: Đêm số lần xuất hiện của các kí tự trong xâu - 15
Dạng 3: Mã hóa và giất mã à àinereirererrerrrrereroeoee TỂ
Dang 4: Xéa va thay thé
9 CAC DIEU KIEN CAN THIET DE AP DUNG SANG KIEN: - 30
Trang 2Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
TAT LIRU THAM KHẢO
1.Sách giáo khoa tin hoe 11 1Iồ Sĩ Đảm chủ biên
2 Sách giáo viên Lin hoe 11 Hé ST Pam chủ biên
3 Sách bài tập tin học lớp 11
4 Một số đề thị học sinh giỏi tỉnh Vĩnh Phúc
5 Một số sáng kiến kinh nghiệm và ý kiến của đồng nghiệp
6 Một số trang web trên Internet
ba
Trang 3Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
BẢO CÁO KẾT QUÁ
NGHIEN CUU, UNG DUNG SANG KIEN
1 LOI GIOL THIEU
1.1 Li do chon dé tai
Môn tin học đặc biệt là nội dung tin học lập trỉnh là một môn học khá là mới lạ
đối với học sinh phổ thông nôn đa số các cm rất bỡ ngỡ khi tiếp cận nội môn học này
'1rong thực tiễn dữ liệu vào của các bài toán đều liên quan đến các kiểu dữ liệu
khác nhau, để tiện cho việc lập trình và xử lý đữ liệu chúng ta thường đưa đữ liệu đó
về các dạng kiểu dữ liệu chuẩn hoặc kiểu dữ liễu có cầu trúc, một trong những kiểu đữ
liệu đó là kiểu xâu
Qua quá trình tham gia giáng dạy môn tin học tại trường THPT Đồng Đậu và bỗi
dưỡng học sinh giỏi tôi nhân thấy dữ liêu kiểu xâu gặp rất nhiều trong các bài toán
nhưng đề học sinh có thé van dụng lĩnh hoạt các thao tác xử lý trên kiểu dữ liệu này vào bài toán không phải là dễ
Voi mong muốn hệ thống các bài toán dưới dạng một số dạng bải tập thường gặp
giúp cho giáo viễn và học sinh phần nảo nhận dang va giái một số bài tập liên quan tới
kiểu đữ liệu xâu dé đàng hơn, tôi xin đưa ra “PHƯƠNG PHÁP GIẢI MỘT SỐ DẠNG
BÀI TẬP VŨ KIÉU DỮ LIỆU XÂU TRONG DB TIH HỌC SINII GIỎI MÔN TT
HỌC”
1.2 Mục tiêu nghiên cứu
a_ Để tải thực hiện nhằm giúp cho giáo viễn cũng như học sinh hệ thống lại các
kiến thức về các thao tác trên kiểu dữ liêu xâu từ đó áp dụng cho các bài toán
cụ thể
ø_ Giới thiêu một số phép toán trên kiểu dữ liêu xâu đặc biệt phần nảy có cung, cấp thêm một số hảm, thú tục chưa được giới thiệu trong bài 12 sách giáo khoa
Trang 4Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
tin học 11, đổng thời đưa ra một sé vi dụ tương ứng để học sinh dễ dàng sử
dụng
a_ Hệ thống các bài toán đưới dạng một số dang bải tập thường gặp giúp cho giáo
viên và học sinh phần nảo nhận đạng và giải một sé bai tập liền quan
s2 Giúp học sinh không còn nhằm chắn với môn tin học nói chưng và kiểu đữ liệu xâu nói riêng,
1.3 Đối tượng nghiên cứu
Học sinh: học sinh học chương trình cơ bản và học sinh đội tuyển học sinh giỏi
o Tham khảo ‡ kiến của cấp Trên và đồng nghiệp
2 TEN SANG KIEN:
“PHUONG PHAP GIAI MOT SO DANG BAI TAP VE KIBU DU LIU XAU
TRONG DE THI HOC SINH GIOI MON TIN Hac”
3 TAC GLA SANG KIEN:
© Ho va tén: Bai Thị Phương
© Dia chi tac gid sang kién: TIIPT Dang Dau
2 Số diện thoại:0383797818
© _E mail: buithiphuongc3dongdau.vinhphuc.edu.vn
Trang 5Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
4 CHỦ DẦU TƯ TẠO RA SÁNG KIÊN
5 LĨNH VỰC ÁP DỰNG SÁNG KIÊN
Để tai được sử dụng để vận dụng giải các bài toán về kiểu đữ liệu xâu trong sách
bài tập tin học lớp 11 và trong các đề thí học sinh giỏi tỉnh môn tin học
Khi vẫn dung dé tai dé giải các bài toán về kiểu dữ liệu xâu giúp
©_ llẹc sinh sau khi được giới thiệu một cách hệ thông các dang bài tập về xâu
và quy trình giải quyết từng dạng dã có thể nhận biết yêu cầu của bài toán và
cách thức giải quyết chủng một cách hiệu quả
© 1Tình thành ở 1IS kỹ năng phân tích, xử lý các vấn đề liên quan đến bài lập
kiểu xâu, sử dụng thành thao vỏng lắp biết trước, thủ tục chuẩn vào/ra đơn
giản, bước đầu lâm quen với L số chương trình con đạng thủ tục tạo điều kiện
thuận lợi cho việc tiếp thu kiến thức về cách viết chương trình có cầu trúc
o_ Mở rộng một số bài tập kiểu xâu dé hoc sinh thấy được ứng dụng quan trọng của kiểu dữ liệu xâu trong lập trình
6 NGAY SANG KIEN BUQC AP DUNG LAN BAU HOAC AP DUNG THU
Đề tải được áp dụng vào ngày 20 tháng 02 năm 2019
7 MÔ TẢ BẢN CHÁT CỦA SÁNG KIÊN:
NỘI DUNG SÁNG KIÊN CHIƯƠNG I: CƠ SỞ LÍ LUẬN CỦA ĐÈ TÀI
Trong bối cảnh toàn ngành GD-ĐT đang nỗ lực đổi mới phương pháp day học theo
hưởng phát huy tính tích cực chủ đông của học sinh trong hoạt đông học tập Điều 24.2
của Luật giáo duc đã nêu rõ: “Phương pháp giáo dục phố thông phải phát huy tính tích
cực, tự giác, chủ động, sáng tạo của học sinh, phủ hợp với đặu điểm của từng lớp học,
môn học, bồi đưỡng phương, pháp tự học, rẻn luyện kỹ năng vận dụng, kiến thức vào
thực tiễn, tác động đến tình cảm, đem lại niễm vui, hứng thú học tập cho học sinh ”
Nhu vậy, chúng ta có thể thấy định hướng dỗi mới phương pháp đạy học dã dược khẳng
5
Trang 6Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
định, không còn là vân đề tranh luận Cốt lõi của việc đổi mới phương pháp dạy học ở
trường phổ thông là giúp học sinh hướng tới việc học tập chủ động, chống lại thói quen
học tập thụ động Với một số nội dung trong để tải này, học sinh có thể tự học, tự rẻn
luyện thông qua một số bài tập, dạng bài tập cụ thể
CHƯƠNG II: THỤ
TRẠNG CỦA VẤN ĐỂ NGHIÊN CỨU Qua thực tế giảng day ở trường THPT Đồng Đậu tôi nhận thây khi học đến chương
trình tin học lớp 11 đa số học sinh đều cho rằng đây là môn học khó nhất trong các môn
học, nhiễu em còn sợ môn học này
Khi học sinh học bài học Bài 12 “Kiểu xâu”, học sinh đã có rất nhiều khó khăn,
nhằm lẫn trong việc xử lý đữ liệu vì các em đang quen với các bài toán xử lý đữ liệu
kiểu số, các bài toán quen thuộc như tính tổng hoặc tích của 1 dãy số thoả mãn điều
kiện nào đó
Khi gặp các bài toán phải sử dụng kiểu dữ liệu lớn nhiều cm lúng lừng Việc giải các
bài toán với kiểu đữ liệu lớn thực sự cần thiết cho các em khi làm các bài toán lập trình trong chương trình Tin học phổ thông nói riêng và việc giải quyết các bài toán thực tế
nói chung
CIIUONG I: NOI DUNG CUA BE TAI
1 Lý thuyết về kiểu xâu
1.1 Khái niệm
© Xâu là một 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
a Số lượng kí tự trong xâu gọi là độ dài xâu
o_ Xâu có độ dài bằng 0 gọi là xâu rỗng
ø Có
ổ ooi xâu là măng một chiều, mỗi kí tự trong xâu là một phần tử, được
6
Trang 7Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
đánh chỉ số bắt đầu tử 1 J2o vậy, để tham chiếu đến phần tử của xâu ta viết
<tên biến xâu>|chỉ số của kí tur],
Ví dụ: s = “Tin hoe' Muốn truy cập dén ki tu ‘i? thi viét 82] = ‘7’;
1.2 Khai báo
Var <tên biến xâu> : sưảng | độ dâu lớn nhất của xâu |,
Vi đụ: var hoten : sring|30],
Chủ ý: Dộ dài lớn nhật của xâu có thé bỏ qua Khi đó độ đài lớn nhất của xâu
sẽ nhận giá trị ngầm định lả 255 Ví dụ var s : sưing;
1.3 Các thao tác xử lý xâu:
1.31 Phép ghép xân
Kí hiệu là dấu (+), dược sử dựng dễ ghép nhiều xâu thành một Có thể thực
hiện phép ghép xâu đôi với các hằng va biến xâu
> Xâu A là lớn hơn xâu B nếu như kí tự đầu tiên khác nhau giữa
chúng kể từ trái sang trong xâu A có mã ASCII lớn hơn
Vi dụ: “207' > 2007”,
Trang 8Phương pháp giải mdl.sé dang bai tap vé kigu dit héu xâu trong để thi HSŒ mãn lin học
> Nếu A và la cde xâu có độ dải khác nhau và A là đoạn đầu của
B thi A nhé hon B
Vi du: ‘Tin’ < ‘Tin hoc’
> Hai xâu được coi la bằng nhau nếu như chúng giống nhau hoàn
Gia tri st Thao tac Két qua
VY “Hinh 2” Inseri(s],s2,6), | ‘Hinh 1.2’
Ham copy (s, vt, 2) Tao xdu gômn kí tự liên tiếp bắt đầu từ vị trí vt của xâu s
Giá trị s Thao tic Kết quả
“Tin hoe’ copy(s, t, 3), “Tin?
“Bai hoc thu 9" Copy(s,9,5); ‘thu 9°
Trang 9
Phương pháp giải mdl.sé dang bai tap vé kigu dit héu xâu trong để thi HSŒ mãn lin học
sè: Hàm lengt(s) Cho giá trị là độ dài xâu s
sề Hăm pòy (S1, s2) Cho vì
*# Hàm:
s* Thú bạc chuyễn xâu sang số vai (wy v, cj Chuyển xâu s thành giá trị số lưu vào
cơng
v, e là vị trí gây ra lỗi trong quả trình chuyển dỗi, e — 0 thi chuyển déi thả
1234 Val(s,i ¡= 1234, c=0
Giả trị s Thao tac Kết quả
upeuse(ch) Cho chit cai m hoa img voi chif cai trong ch
Trang 10Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
s* Thủ tục chuyến số sang xâu str(x, s) Chuyển giá trị kiểu số x thành chuỗi
biểu diễn nó lưu trong s
1234 Sus); §='1234 11:0:2 Su(x.s); 8-1110
2 Các dạng hải tập kiểu xâu
2.1 Dang 1: Kiém tra x4u théa man tinh chat nào đó
Phương pháp chung của dạng này là sử dụng các thao tác xử lý xâu vảo tùng yêu cầu cụ thể, thường vận dung câu lệnh for to do để đưyệt các phần tử của xâu
Bài 1(sgkỳ: Nhập vào hai xâu họ tôn và dua ra màn hành xâu có độ dài đài hơn Nếu
bai xâu có độ dài bằng nhau thi dua ra xdu nhdp sau,
* Ý tông: để lấy độ dài xâu sử dụng ham length(s), So sánh độ dài của hai xâu bằng
* Ý gỡng: Kí tự đầu tiên của xâu a all]
kỉ tự cuối củng của xâu b: b[length(b)]
Trang 11Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
ay fedng: Muén dua x4u ra theo thir ty nguge Iai thi phai di ti cudi xâu đến kí tự liên
cuỗi => duyệt bằng câu lệnh (or downto do đưa ra từng kí tự gúa s
For i-—length(s) downto 1 do write(s[ip);
Bai 4(sgk): Kidm tra xem xdu cd la xan d6i xứng không?
_Xâu đối xứng là xâu mà đọc từ cuối xâu ngược lên cũng giẵng đọc từ đầu xâu đến cuối
* Cách 1: Tạo l xâu đáo ngược từ xâu ban đầu (Cách tạo giếng Bai 3) => So sánh hai
xâu, nêu bằng nhau thị đối xứng ngược lại thi không đối xứng
{ Tạo xâu b đảo ngược từ xâu a}
for i:~ length(a) downto 1 do b:-b+ali}:
if a= b then write(“Xau doi xung’) else write(‘xau khong doi xung’);
* Cách 2: Nhận xót nếu x4u # déi xứng thì
a[1]—a[n] ( Gann — length(a));
a[2] =a[n-1]
a[3| —a[n-2]
tổng quát lên a[i[ — a[n-i-1] véii chay tr 1 dén n div 2
Sử dụng biến KT để KT tính đối xứng của z
Doan chương trình thực hiện kiểm tra đối xửng
KT:= true;
for i— 1 lo ndiv 2 do if ali] <> a[n-i4] | then KT-— false,
if KT then write(*Xau doi xung’) else (*xau khong, doi xung’),
11
Trang 12Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
Bài 5 (Hài 4.42 sách bài tập): Xâu W viên đá quý có kích turớc giống nhau
(Š<=N<—120), mỗi viên cỏ mỘt màu các màu được đánh số từ 1 đến 9 Người ta lắp
khỏa đeo vào vị trí sao cho khi mỡ vòng ta dược một dây đủ quỷ có tính chất: không
phụ thuộc vào việc cẩm đầu dây nào bên tay phải và đầu kia bên tay trái, !a đều được
một chuỗi hạt giống nhau, tức là viên đủ thứ ¡ từ trải sang luôn cỏ màu j không phụ
thuộc vào cách cầm
Vi du Xâu S 222222335533
Cách đặt khỏa thứ ï: 2 2 2 3 3 š 5 3 3 2 2 2
Cách đặt khóa thứ 11: 5 3 3 2 22222 3 3 5
Xác định số vị tri khác nhau có thể mắc khóa thảo lắp vòng
* Phân tích dễ: Thực chất để yêu cầu xác định xem có bao nhiêu xâu con được tạo dây
đủ từ các kí tự có trong xâu s và có chiều đải đúng bằng chiều đải xâu ban đầu
* Ÿ grống: Sử lý đữ liệu vòng tròn bằng cách nhân đôi xâu ban đầu, kiểm tra từng xâu
con có độ dài bằng N bắt đầu từ vị trí ¡ (CI— 1,2 N) có là xâu đối xứng không, Nếu
đối xứng thì tăng biến đếm
* Doan chương trình
{ Hàm kiểm tra tính đối xứng của một xâu}
Function DX ( s2:string) : boolean;
Trang 13Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
Chú ý: với học sinh đại trả chưa học đến chương trinh con thi trong phn thin chuong
trình sẽ kiểm tra tính đối sứng cúa s3 như trong hàm viết ở trên
Bai 6 (Dé thí hsg lớp 1U năm 2010 - 2011) Hwa ra xâu con đối xứng có độ đài đài
nhất
Bai nay có hai cách dễ làm là sử dụng quy hoạch dộng và duyệt bình thường, nhưng
xuất phát từ thực tế giảng dạy học sinh trường THPT Dng Dậu khó hình dung được
bằng cách quy hoạch động nên ở đây tôi sử dụng cách duyệt và kiểm tra tính đối xửng
thông thường Để tối ưu lời giải các bạn có thể tìm hiểu thêm cách sử dụng quy hoạch
động cho bài toán trên
* Ý arững: Tạo các xâu con có độ đài là 2, 3, đằng thời kiểm tra luôn xâu con đỏ có
đôi xứng không? Nếu đối xứng thì so sánh độ dải của xâu con đó với giá trị max trước
đó, nếu lớn ham thì gắn lại max
* Đoạn chương trình
n:=length(); max:=l,
for k:-] yn —1 do
Trang 14Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
end,
write(x),
Bai 7(Bai 4.25 sách bài tập) Xâu S chỉ bao gồm ngoặc mở '(' và ngoặc đóng ')' Xâu
4 xác định một cách đặt ngoặc đúng, nếu thỏa mãn các điều kiện:
© SỐ ngoặc mở — số ngoặc đóng
© Nếu duyệt từ trải sang phải thì số lượng ngoặc mở luôn luôn lớn hơn hoặc bằng số
lượng ngoặc đông
Vi dy, xdu '((0())))” xác định một cách đặt ngoặc đúng Còn xâu '(00))(0)7 là một
cách đặi ngoặc sat
Viết doạn chương trình kiểm tra xem xâu s có xác dịnh một cách dặt ngoặc đúng hay
không?
* Ý tổng: Dang bién đ với giá trị ban đầu = 0; Duyệt từ trái qua phải gặp đầu ngoặc
mé thi ting d lén 1, pap dấu ngoặc dong thỉ giảm d một dơn vị Biểu thức ngoặc là sai
khi gap d= -1 hoặc hết biểu thức ngoặc d vẫn lớn hơn 0;
đ~0; kt:— true;
for i:= | to length(s) do
Trang 15Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
begin
i[s[i|—'Œ then inc(đ) clsc dec(đ);
1Ÿ d<0 then bepin kt:— false; breakk, end;
end;
1F d>0 then kt:—false;
Tâài 8( ĐỀ thi hsg lớp 11 năm 2012— 2013) Cho xâu § độ dài không quá 250 chỉ gồm
các kí tự ngoặc đóng và ngoặc mỡ Xác định số cặp chi sé (p, q) sao che p<q va s[p]
=a[p+1] = (2 s[q] = slq+1] = )'
* Ý trông: Vì p < q nên sử dụng một vòng lặp [or duyệt từ đầu xâu đến độ đài xâu —
2 và một vòng for duyệt từ cuối xâu đến p+1, kiểm tra điểu kiện đề bài cho có thỏa
mãn không, nếu thỏa min thi ting biến đếm
#* Đoạn chương trình
đ:=0;
for i—1 to length(s}-2 do
for ]:-length(s) downto i+] do
if (s[isfi! 1]) and @[ï†ES[j! L) and @[TE'C) and @[ï|EY
Trang 16Phương pháp giải một số đạng bài tập về kiếu đữ liệu xâu trong để thi HSGŒ mãn tin học
Bài 1(bài 10 sgk): Viét chuong trình nhập vào từ bàn phím một xâu kí tự 3 có độ dài
không quá 100 Hãy cho biết có bao nhiêu chữ số xuất hiện trong xâu 8 Thong báo
kết quả ra màn hình
ay tưởng: DI từ đầu xâu đến cuối xâu, kiểm tra lần lượt từng ki tự có năm trong
khoảng từ “0° dến '9* không? Nếu nằm thì tăng biển dếm lên ]
* Doan chương trình
dem —0,
for i:—1 ta length(s) do
if (s[i]>—°0") and (s[i]}<—"9") then
dem:~dem | 1, writeln(‘Co ',dem, ` chủ so xuat hien trong xau 4”):
Bai 2 { Bài 7.14 sách bài tap): Cho sd nguyên N ở hệ 10 đưới đạng xâu Š không quá
30 chữt số và không có số () ở dầu Thống kê của N được xây đựng như sau:
- Tính tân số xuất hiện các chữ số của N
- Viết liên tiếp tắn số và chữ số theo thứ tự tăng dân của các chữ số khác nhau trong
w
Vĩ đụ, với N=353 ta có lẫn số xuất hiện của 3 là 2, của 5 là 1 Như vậy thông kê sẽ viết
là 2815
* Phân tích đẻ: Bài ? phát triển từ bài 1 Ở bài trên là chỉ thông báo có bao nhiều chữ
sổ, nhưng 6 bai nay lai cu Thể là mỗi chữ số xuất hiện bao nhiêu lần,
* Ý trăng:
- Khởi tạo một mắng d với chỉ số là các ký tự chữ sô từ “0” đến “9
16