III. CÁC DẠNG BÀI TẬP THƯỜNG GẶP
4. Dạng 4: Ứng dụng kiểu xõu vào giải cỏc bài toỏn kiểu số nguyờn
Bài tập 1: Viết chương trỡnh nhập số tự nhiờn a cú n chữ số. Hóy tạo ra số mới b từ
số a bằng cỏch viết ngược lại cỏc chữ số xuất hiện trong a. Vớ dụ: cho a=234 thỡ b=432.
GV: Dựa vào kiến thức kiểu xõu, em nào cú thể nờu ý tưởng giải bài toỏn này? HS:
GV: Nhận xột cõu trả lời của hs, và nờu rừ: để tạo được số b từ số a, bằng cỏch viết ngược lại cỏc chữ số của a thỡ:
+ tạo một xõu rỗng s
+ cần sử dụng vũng lặp biết trước lựi (giống bài tập 2 phần a)
+ dựng thủ tục val để đổi xõu kớ tự s sang dạng số và gỏn cho biến value. GV yờu cầu hs viết chương trỡnh, sau đú GV sẽ chạy chương trỡnh cho học sinh quan sỏt trờn màn hỡnh mỏy chiếu. Gv giải thớch và giỳp học sinh sửa cỏc lỗi ở chương trỡnh cỏc em viết.
Chương trỡnh:
Program somoidaonguoc; Uses crt;
Var a,bi,code: longint; S1,s2:string; Begin Write(‘nhap so a’); Readln(a); Str(a,s1); S2:=’’; {tạo xõu rỗng s2}
For i:=length(s1) downto 1 do s2:=s2+s1[i]; Val(s2,b,code);
Write(b); Readln; End.
Bài tập 2: Số nhỏ nhất: Một số nguyờn dương n rất lớn cú thể được cho bởi P (P20) số nguyờn dương A và P xõu ký tự s1, s2,...,sp (độ dài cỏc xõu khụng vượt quỏ 255) chỉ gồm cỏc số thập phõn bằng cỏch viết s1 liờn tiếp A1 lần rồi viết s2 liờn tiếp A2 lần,..., viết sp liờn tiếp Ap lần.
Giả sử với số n được cho như trờn và cho trước số nguyờn dương k nhỏ hơn số chữ số của N. Hóy tỡm cỏch gạch đi k chữ số của N để nhận được một số cú giỏ trị nhỏ nhất . Vớ dụ: Vào Kết quả p=3, k =11 a1=3, a2 = 4, a3 = 2 s1 = 123, s2=0, s3 = 45 44
- í tưởng: Ở bài toỏn này N là số nguyờn lớn nờn ta sử dụng xõu để biểu diễn nú, giả sử số n lớn được ghộp lại bởi m ký tự khỏc nhau khi đú sau khi xúa ta cũn lại m-k chữ số trong n. Lần lượt đi tỡm m chữ số nhỏ nhất trong xõu cũn lại ta được kết quả cần tỡm.
Chương trỡnh tham khảo:
{$MODE OBJFPC}
Var A : array[1..20] of longint;
S: array[1..20] of ansistring; {GV giới thiệu thờm kiểu ansistring (chỉ cú trong free pascal mà khụng cú trong turbo pascal) cú kớch thước gần 2GB =230 B nờn t ường được xem là vụ hạn}
st,kq : ansistring; k,i,p,m,j :longint; Procedure nhap; Begin st:=''; Write('Nhap p '); Readln(p); Write('Nhap k ');Readln(k); For i:=1 to p do readln(a[i]); for i:=1 to p do readln(s[i]); for i:=1 to p do
For j:=1 to A[i] do st:=st+S[i];
End;
Procedure xuly;
var m:longint; sm:ansistring; code:integer; Begin j:=0; m:=length(st)-k; Repeat sm:='9'; dec(m);
For i:=j+1 to length(st)-m do If sm>st[i] then Begin sm:=st[i]; j:=i; End; kq:=kq+sm; Until m=0; Val(kq,m,code); Write(m); End; Begin nhap; xuly; Readln End.
Bài tập 3: Cho số nguyờn dương N, ta tạo ra số nguyờn N1 bằng cỏch viết liờn tiếp nhau cỏc số nguyờn từ 1 đến N. Vớ dụ N = 4 ta cú N1 = 1234. Thực hiện việc thu gọn N1 bằng cỏch xúa tất cả cỏc chữ số ở vị trớ lẻ, sau đú xúa tất cả cỏc số ở vị trớ chẵn, rồi lại xúa cỏc chữ số ở vị trớ lẻ, … cho đến khi chỉ cũn lại một chữ số.
Vớ dụ: 1234 ->24-> 2
Program taosonguyen; var s,h:string; i,n:integer; Begin Write('Nhap n='); Readln(n); s:=''; for i:=1 to n do begin str(i,h); s:=s+h; end; writeln(s); Repeat
for i:=1 to length(s) do
if i mod 2<>0 then s[i]:=' ';
while pos(' ',s)<>0 do delete(s,pos(' ',s),1); for i:=1 to length(s) do
if i mod 2=0 then s[i]:=' ';
while pos(' ',s)<>0 do delete(s,pos(' ',s),1); Until length(s)<=1;
Writeln('KET QUA LA:',S); Readln
End.
5. Bài tập tự luyện:
Bài 1. 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 lần nhất trong xõu (khụng phõn biệt chữ hoa và chữ thường)
Bài 2. Chuẩn húa văn bản
- Hai từ liền nhau cú duy nhất một dấu cỏch
- Dấu ngắt cõu (dấu chấm, dấu chấm phẩy, dấu chấm hỏi, dấu chấm than) được đặt sỏt vào từ ngay trước nú, sau đú mới đến dấu cỏch trống
- Dấu mở ngoặc đặt sỏt vào phớa bờn trỏi của từ bắt đầu mở ngoặc
- Dấu đúng ngoặc đặt sỏt vào phớa bờn phải của từ cuối cựng được đúng ngoặc Hóy viết chương trỡnh kiểm tra và đưa một đoạn văn bản về dạng chuẩn
Input: vanban.inp
Output: vanban.out văn bản đó được chuẩn húa
Bài 3: Viết chương trỡnh chuyển một xõu kớ tự in hoa thành kớ tự thường.
Gợi ý: - Kớ tự in hoa thành kớ tự thường
- Cỏc kớ tự khỏc như cỏc dấu ngoặc giữ nguyờn for i:=1 to length(s) do
if (‘A’<=s[i]) and s[i]<=’Z’ then s[i]:=chr(ord(s[i]+32);
else if (‘a’<=s[i]) and s[i]<=’z’ then s[i]:=chr(ord(s[i]-32);
Bài 4: Viết chương trỡnh đăng kớ account, mật khẩu, sau đú kiểm tra mật khẩu và
account mà người dựng nhập vào cú đỳng với đăng kớ khụng.
- Một số dạng bài tập khỏc cú thể tỡm hiểu thờm:
+ Bài toỏn tỏch từ.
+ Bài toỏn tỏch họ tờn trong dỏnh sỏch. + Xõu đối xừng dài nhất...
+ Tỡm xõu palindrome dài nhất là xõu con của S …
CHƯƠNG IV: PHƯƠNG PHÁP VÀ KẾT QUẢ NGHIấN CỨU
I. PHƯƠNG PHÁP NGHIấN CỨU: - Phương phỏp nghiờn cứu
+ Kết hợp thực tiễn giỏo dục ở trường THPT Lương Tài
+ Cú tham khảo cỏc tài liệu về ngụn ngữ lập trỡnh Pascal và tài liệu về sỏng kiến kinh nghiệm của đồng nghiệp.
- Phương phỏp thuyết trỡnh, quan sỏt, điều tra cơ bản, phõn tớch kết quả thực nghiệm sư phạm,v.v… phự hợp với bài học và mụn học.
II. KẾT QUẢ NGHIấN CỨU:
- Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2013-2014 khi chưa thực hiện đề tài:
STT Lớp Sĩ số Đạt yờu cầu Khụng đạt yờu cầu
1 11A2 45 73% 27%
2 11A3 45 65% 35%
- Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2014-2015 sau khi thực hiện đề tài:
Trong quỏ trỡnh trao đổi, thảo luận, trỡnh bày, cỏc em HS thể hiện được khả năng vận dụng, hiểu biết của mỡnh nờn cỏc em tỏ ra hăng hỏi trong việc giơ tay phỏt biểu tranh luận. Đồng thời tiết học trở nờn sinh động hơn và GV khụng đúng vai trũ là người xõy dựng lý luận mà học sinh là người chủ động để giải quyết cỏc vấn đề.
STT Lớp Sĩ số Đạt yờu cầu Khụng đạt yờu cầu
1 11A2 45 90% 10%
PHẦN III. KẾT LUẬN
Ngụn ngữ lập trỡnh núi chung đúng vai trũ rất quan trọng trong việc xõy dựng cỏc chương trỡnh ứng dụng để phục vụ cho cuộc sống. Nhờ sự phỏt triển của tin học trong đú cỏc nhà lập trỡnh chuyờn nghiệp đúng vai trũ khụng nhỏ mà hiện nay hầu hết cỏc lĩnh vực trong xó hội đó ứng dụng được tin học để giải quyết cụng viờc nhanh, hiệu quả và chớnh xỏc hơn.
Hiện nay, ngụn ngữ lập trỡnh Pascal đó trở thành ngụn ngữ lập trỡnh phổ biến nhất trờn thế giới sử dụng trong lĩnh vực giảng dạy. Trong quỏ trỡnh giảng dạy cỏc thầy cụ cú thể đưa ra cỏc vấn đề như lập trỡnh cỏc game nhỏ…để cỏc em cú thể chứng tỏ được khả năng của mỡnh làm cho HS yờu thớch mụn học, ham học hỏi và tỡm tũi sỏng tạo.
Đề tài này mang tớnh thực tiễn rất cao, cụ thể là: trong tiết học cỏc em học sinh đó chủ động tỡm tũi lại kiến thức đó học qua đú giải quyết được vấn đề do giỏo viờn đặt ra. Trong quỏ trỡnh giải quyết vấn đề, giỏo viờn chỉ ra những lỗi mà cỏc em học sinh mắc phải, giỳp cho cỏc em hiểu rừ và vận dụng tốt hơn cỏc kiến thức đó học vào giải cỏc bài toỏn do giỏo viờn đặt ra.
Trờn đõy là toàn bộ kinh nghiệm của tụi qua nhiều năm liền dạy Tin học ở khối 11 cũng như tham khảo qua nhiều nguồn thụng tin, tư liệu khỏc nhau, rất mong được sự đúng gúp của cỏc đồng nghiệp nhằm giỳp đề tài của tụi được hoàn thiện thờm.
Tụi xin chõn thành cảm ơn!
KIẾN NGHỊ:
Sau khi thực hiện đề tài SKKN “Bài tập kiểu xõu”, tụi cú một số ý kiến như sau: - Tăng cường cơ sở vật chất cho phũng thực hành: bổ sung mỏy tớnh (tối đa 2hs/mỏy), phũng thực hành cú mỏy chiếu.
DANH MỤC TÀI LIỆU THAM KHẢO
1. Sỏch giỏo khoa tin học 11 Hồ Sĩ Đàm chủ biờn 2. Sỏch giỏo viờn tin học 11 Hồ Sĩ Đàm chủ biờn 3. Lý thuyết và Bài tập lập trỡnh Pascal 5.5-6.0 Nguyễn Thị Kiều Duyờn 4. Ngụn ngữ lập trỡnh Pascal 7 Quỏch Tuấn Ngọc
5. Turbo Pascal 7.0 PGS-TS Bựi Thế Tõm – Vừ Văn Tuấn Dũng.
6. Giải một bài toỏn trờn mỏy tớnh như thế nào GS-TS Hoàng Kiếm 7. 101 thuật toỏn và chương trỡnh Lờ Văn Dũng – Trần khắc Tuấn
(NXB Khoa Học Và Kĩ Thuật)
8. Một số sỏng kiến kinh nghiệm và ý kiến của đồng nghiệp. 9. Một số bài tập tham khảo trờn Internet.