Tải bản đầy đủ (.doc) (19 trang)

SKKN 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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (195.57 KB, 19 trang )

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


- 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
Trang 2


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

Trang 3



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

Trang 4


được kết quả giống như đọc từ trái sang phải (còn được gọi là xâu
palindrome)
Ở 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ụ:
BAI2.INP
BAI2.OUT

Trang 5


3
1
AFHFA
0
ACDDB
0
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;

Trang 6


for i:=1 to n do
if doixung(s[i]) then a[i]:=1 else a[i]:=0;
ghi;
end.

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ụ:
BAI2.INP
1

IOI

BAI2.OUT
4

{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

Trang 7


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]);
{ 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.
Trang 8


- Cỏc dũng tip theo, mi dũng ghi mt kớ t xut hin trong xõu S v s
ln xut hin ca nú. Cỏc kớ t a ra theo th t ch cỏi in hoa, in thng, ch
s. Cỏc ch cỏi, ch s a ra theo th t t in.
Vớ d:


BAI2.INP
AzB1C9A1BC

BAI2.OUT

6
A2
B2
C2
z1
12
91
Bi toỏn 6 c thc hin mt cỏch d dng sau khi hc sinh ó lm c
nh vớ d trờn v ch phi thay cỏch vit trong lnh ghi kt 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]);
Bi toỏn 7. ( Bài 3: (4.0 điểm) Chữ cái xuất hiện thi hc
sinh gii tnh Thanh Húa nm hc 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.OU

T
AAABDA 100000
Trong bi toỏn 7 cỏch lm hon ton tng t nh bi toỏn c bn nhng
cỏc em cn tỡm giỏ tr ln nht l s ln nhiu nht ca kớ t. Sau khi tỡm giỏ
tr ln nht Max cn tỡm giỏ tr l bi chung nh nht ca giỏ tr Max v
Trang 9


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.
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.OU
T
9
6
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;
Trang 10


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)
Việc bảo vệ máy tính của mình để hạn chế người khác thâm nhập vào là một
vấn đề đặt ra cho mọi người sử dụng máy tính. Để tăng tính an toàn trong lưu trữ
Lan đã quyết định đặt mật khẩu truy cập máy tính của mình vào một xâu T với một
quy ước sao cho khi cần cô ta có thể lấy lại được mật khẩu từ xâu T như sau:
Là một người yêu thích số học cô ta thường chọn mật khẩu P là một số
nguyên tố và đem giấu vào trong một xâu ký tự T sao cho P chính là số nguyên
tố có giá trị lớn nhất trong số các số nguyên tố được tạo từ các xâu con của T
(xâu con của một xâu ký tự T là một chuỗi liên tiếp các ký tự trong T).
Ví dụ: xâu T= “Test1234#password5426” chứa mật khẩu là 23 vì T chứa
các xâu con ứng với các số nguyên tố 2, 3, 23 và 5.
Yêu cầu: cho một xâu ký tự T có chiều dài không quá 500 ký tự. Tìm mật khẩu

P đã dấu trong xâu T biết P có giá trị nhỏ hơn 105. Dữ liệu cho đảm bảo luôn có P.
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 T.
Kết quả: ghi ra file văn bản BAI2.OUT là số P tìm được.
Ví dụ:
BAI2.INP
BAI2.OUT
Test1234#password5426 23

Khi đưa đề bài cho học sinh tôi nhận thấy phần lớn các em
thường nghĩ đến việc lấy tất cả các số có thể từ trong xâu vào sau đó
kiểm tra xem có bao nhiêu số là nguyên tố lưu riêng ra 1 mảng sau đó
tìm số nguyên tố lớn nhất. Vì vậy các em phải xử lý rất nhiều các bài
toán phụ nên nhiều em đã sót trường hợp và ra kết quả sai. Việc xử lý
xâu ngoài như việc là mảng một chiều mà các phần tử là 1 kí tự thì dữ
kiệu kiểu xâu còn cung cấp cho chúng ta 1 số các hàm, thủ tục để xử lí
xâu 1 cách linh hoạt và nhanh chóng.

Trang 11


Trong bài này ta chỉ cần xét các số từ 9999 về 1, số nào là số
nguyên tố và ta tìm thấy trong xâu s thì đó là số nguyên tố lớn nhất
cần tìm.
Bước 1: Viết hàm kiểm tra 1 số tự nhiên là nguyên tố.
Bước 2. Tìm số lớn nhất.
For i:=9999 downto 2 do
If nt(i) then Begin str(i,s1); if pos(s1,s)>0 then
begin write(f1,i); break; end;
End;
DẠNG BÀI TẬP 4. XỬ LÍ CÁC SỐ LỚN.


Việc xử lí các số có giá trị lớn chúng ta có thể lưu các phần tử vào
mảng, tuy nhiên sẽ hiệu quả hơn nếu chúng ta xử lí các số là các xâu.
Bài toán 10 ( Bài 1: (4 điểm) . Tính tổng hai số - Đề thi giáo viên giỏi cấp
trường của Trường THPT Triệu Sơn 1 năm học 2018 – 2019)
Cho 2 số nguyên dương M, N(M, N nhỏ hơn 255 chữ số), hãy tính tổng
của 2 số M, N.
Dữ liệu vào: Từ tệp văn bản Bai1.inp gồm 2 dòng:
-

Dòng đầu ghi số nguyên dương M; - Dòng thứ 2 ghi số nguyên dương N

Dữ liệu ra: Ghi lên tệp văn bản Bai1.out chỉ một số, là tổng của M,
N.
Bai1.inp
111111111111111
33

Bai1.out
111111111111144

Với bài toán này thì các thí sinh muốn làm được thì bắt buộc phải
xử lí theo kiểu xâu kí tự.
PROGRAM CONG;
var s1,s,m,n:ansistring;
f1,f2: text; i,a,b,u,nho,tong: longint;
BEGIN
assign(f1,'bai1.inp'); reset(f1);
assign(f2,'bai1.out'); rewrite(f2);
readln(f1,m); readln(f1,n);

while length(m)<>length(n) do
Trang 12


if length(m) > length(n) then n:='0'+n else m:='0'+m;
nho:=0; s:='';
for i:= length(m) downto 1 do
begin
val(m[i],a,u); val(n[i],b,u);
tong:=a+b+nho;
nho:=tong div 10;
tong:=tong mod 10;
str(tong,s1);
s:=s1+s;
end;
if nho>0 then s:='1'+s;
write(f2,s);
close(f1); close(f2);
END.

Bài toán 11. (Bài 4 (3 điểm): Giai thừa. Đề thi học sinh giỏi Tỉnh Thanh
Hóa năm học 2018 – 2019)
Cho trước số tự nhiên N.
Yêu cầu: Tìm số tự nhiên K nhỏ nhất sao cho K! có đúng N chữ số.
Dữ liệu vào: Đọc từ tệp BAI4.INP gồm một dòng chứa số tự nhiên N (1≤ N≤
104).
Dữ liệu ra: Ghi ra tệp BAI4.OUT kết quả tìm được. Nếu không có số K nào
thoả mãn yêu cầu đề ra thì ghi -1.
Ví dụ:
BAI4.INP

BAI4.OUT
3
5

Để làm được bài này đối với học sinh học bình thường trên lớp các
em có thể tính giai thừa bình thường với kiểu số lớn như longint;
int64; qword hoặc kiểu số thực. Tuy nhiên, đây là 1 bài thi học sinh
giỏi cấp tỉnh và đặt ở bài phân loại để lấy giải cao nên các em phải xử
lý số lớn và phải dùng kiểu xâu một cách hợp lý.
const fi='bai4.inp';
fo='bai4.out';
var n,i:longint;
s,st:ansistring;
function nhan(s1,s2:ansistring):ansistring;

Trang 13


var c:array[1..1000000] of longint;
st,s:ansistring;
i,j,l1,l2,x,y,code:longint;
begin
s:='';
l1:=length(s1);
l2:=length(s2);
for i:=1 to length(s1)+length(s2) do
c[i]:=0;
for i:=1 to length(s1) do
for j:=1 to length(s2) do
begin

val(s1[i],x,code);
val(s2[j],y,code);
c[i+j]:=c[i+j]+x*y;
end;
for i:=l1+l2 downto 3 do
begin
c[i-1]:=c[i-1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;
for i:=2 to length(s1)+length(s2) do
begin
str(c[i],st);
s:=s+st;
end;
nhan:=s;
end;
begin
assign(input,fi);
reset(input);
assign(output,fo);
rewrite(output);
Trang 14


read(n);
i:=1;
s:='1';
while length(s)begin
i:=i+1;

str(i,st);
s:=nhan(s,st);
if length(S)=n then
begin
write(i); exit;
end;
end;
if length(s)<>n then
write(-1)
else

write(i);

close(input);

close(output);

end.

4. Hiệu quả của đề tài
4.1. Kết quả đạt được.
Năm học 2017 – 2018, tôi đã tham gia dạy các lớp 11B1,11B2. Trong bài
kiểm tra 15 phút sau khi học bài "Kiểu xâu", tôi chấm trả bài cho học sinh thì
thống kê lại kết quả thu được:
Giỏi

Điểm
Lớp
11B1
11B3

Tổng

44
43
87

Khá

TB

Yếu

SL

%

SL

%

SL

%

SL

%

6
3

9

13.64
8.98
10.34

17
21
38

38.62
46.84
43.68

18
15
33

40.92
34.88
37.93

3
4
7

6.82
9.30
8.05


Năm học 2018 - 2019 tôi đã tham gia dạy các lớp từ 11C1, 11C2 sau khi
đã áp dụng các kiến thức được trình bày trong sáng kiến kinh nghiệm ở trên đây
và nỗ lực hướng dẫn của bản thân thì trong bài kiểm tra 15 phút được thực hiện
sau khi học bài "kiểu xâu" cũng với lượng kiến thức tương đương như

Trang 15


trong đề kiểm tra mà tôi đã cho học sinh khoá trước đã làm thì
kết quả thu được:
Giỏi

Điểm
Lớp
11C1
11C2
Tổng

47
40
87

Khá

TB

Yếu

SL


%

SL

%

SL

%

SL

%

13
7
20

27.66
17.50
22.99

27
19
46

57.45
47.50
52.87


7
13
20

14.89
32.50
22.99

0
1
1

0.00
2.50
1.15

Trong kỳ thi học kỳ học sinh giỏi cấp trường được tổ chức các em học sinh
làm bài phần kiểu dữ liệu xâu với chất lượng khá, giỏi cao và đặc biệt trong kỳ
thi học sinh giỏi cấp tỉnh các môn văn hóa thì cả 2 em trong đội tuyển cũng làm
tốt bài về kiểu xâu và đúng 100% số test và đạt giải.
2. Lợi ích, khả năng vận dụng.
Vận dụng đề 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 tư duy cho học sinh giỏi” tại trường THPT Triệu Sơn 1 tôi thấy các
em học sinh nắm bắt được kiến thức về kiểu dữ liệu xâu và các bài khác một
cách chủ động và qua các thông số trên ta thấy được hiệu quả trong việc thực
hiện đề tài trên. Vì thế tôi tiếp tục nghiên cứu, lấy ý kiến các đồng nghiệp và vận
dụng vào dạy học trong những năm học tiếp theo.

PHẦN III. KẾT LUẬN
1. Đề xuất, kiến nghị:


Trang 16


Để phát huy hiệu quả đề 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 tư duy cho học sinh giỏi”, bản thân tôi luôn cố gắng
học hỏi nghiên cứu để bổ xung kiến thức cho đề tài và vận dụng trong trong các
phần kiến thức khác trong chương trình Tin học cấp THPT. Qua đây bản thân tôi
xin đề nghị với BGH chỉ đạo các giáo viên Tin học trong nhà trường tiếp tục
nghiên cứu, bổ xung đề tài này để áp dụng giảng dạy cho học sinh trong các năm
học tới. Xin được đề nghị với Sở giáo dục và đào tạo cho đánh giá, bổ xung để
có thể áp dụng đề tài này tới các giáo viên Tin học ở các trường THPT trong tỉnh
nhà.
Tôi xin chân thành cảm ơn.
XÁC NHẬN CỦA THỦ
TRƯỞNG ĐƠN VỊ

Thanh Hóa, ngày 20 tháng 5 năm 2019

Tôi xin cam đoan đây là SKKN của mình
viết, không sao chép nội dung của người
khác.
Người viết

Nguyễn Quốc Thanh

Trang 17


TÀI LIỆU THAM KHẢO

1. Sách giáo khoa Tin học 11 - Nhà xuất bản giáo dục.
2. Sách giáo viên Tin học 11 - Nhà xuất bản giáo dục.
3. Sách giáo khoa Thí điểm Tin học 11 - Nhà xuất bản giáo dục.
4. Tài liệu bồi dưỡng giáo viên lớp 11 môn Tin học - Nhà xuất bản giáo dục.
5. Sách giáo khoa Tin học 10 - Nhà xuất bản giáo dục.
6. Em tập lập trình tập 1 - Nhà xuất bản giáo dục.
7. Em tập lập trình tập 2 - Nhà xuất bản giáo dục.
8. Turbo Pascal 7.0 - Nhà xuất bản thống kê.
9. Câu hỏi và bài tập trắc nghiệm Tin học 11 - Nhà xuất bản Hà Nội
10. 100 đề Toán - Tin ( Tạp chí Tin học và nhà trường)
11. Tuyển tập đề thi OLYMPIC 30 tháng 4 các năm.

Trang 18


CÁC TỪ, CỤM TỪ VIẾT TẮT
HS
CH
TL
THPT
GV
PPDH

Học sinh
Câu hỏi
Trả lời
Trung học phổ thông
Giáo viên
Phương pháp dạy học


Trang 19



×