Tải bản đầy đủ - 24 (trang)
Các bài tập nâng cao xử lý xâu

Các bài tập nâng cao xử lý xâu

Tải bản đầy đủ - 24trang

- Chương trình Rút gọn xâu

Program rutgonxau;

Var St:String;

i: Byte;

begin

write(‘nhap vao xau st’);

readln(st);

i:=1;

while i
begin

if st[i]=st[i+1] then



delete(st,i,1)



else inc(i);

end;

writeln(‘ket qua la:’, St);

readln;

end.

b) Xâu con, xâu con đối xứng

Bài tập 1: Xâu con đối xứng

Cho một xâu S có độ dài không vượt quá 255 kí tự; đếm số lượng xâu con đối

xứng của S. (xâu chỉ gồm 1 ký tự cũng được gọi là xâu con đối xứng)

- ý tưởng: duyệt và tìm tất cả các xâu con của xâu S, mỗi xâu tìm được tiến

hành kiểm tra, nếu xâu đó đối xứng thì tăng giá trị biến đếm lên 1 đơn vị

Chương trình tham khảo (không sử dụng cách viết theo chương trình con vì học

sinh chưa học đến nội dung chương trình con)

Program

Var



demxaudoixung;



S, P,Q:string;

i,j,k,d:word;



begin

write(‘nhap xau S=’);

readln(s);

d:=0;

for i:=1 to length(s) do

for j:=1 to length(s)+1-i do

begin

p:=Copy(s,j,i);

Q:=’’;



14



for k:=1 to length(p) do

Q:=p[k] + Q;

If (P = Q) then Inc(d);

End;

Write(‘so luong xau con doi xung la:’,d);

Readln;

End.

Bài tập 2: Tìm xâu con đối xứng dài nhất

Cho một xâu S có độ dài không vượt quá 255 kí tự; tìm xâu con đối xứng dài

nhất của xâu S

Cách 1:

- Ý tưởng: Sử dụng phương pháp quy hoạch động bằng cách sử dụng mảng 2 chiều F

và giá trị F[i, j] = true/false nếu đoạn gồm các kí tự từ i đến j của S có/không là

palindrome.

Ta có công thức là:

- F[i, i] = True

- F[i, j] = F[i+1, j-1]; ( nếu s[i] = s[j] )

- F[i, j] = False; ( nếu s[i] <> s[j] )

- Đoạn chương trình tham khảo

var s:ansistring; n,i,j,d,max,k,csd,csc:longint; {GV giới thiệu thêm kiểu

ansistring }

F: array[0..1001,0..1001] of boolean;

{==========}

Begin

Write('nhap s:');

readln(s);

FillChar( F, sizeof(F), false );

n:=length(s); max:=1;

for i := 1 to n do F[i, i] := True;

for k := 1 to (n-1) do

for i := 1 to (n-k) do

begin

j := i + k;

F[i, j] := ( F[i+1, j-1] ) and (s[i] = s[j] );

end;

for i:=1 to n do

for j:=1 to n do

begin

15



d:=j-i+1;

if (f[i,j]=true) and (d>max) then

begin

max:=d; csd:=i; csc:=j;

end;

end;

for i:=csd to csc do write(s[i]);

readln;

End.

Cách 2: Sử dụng phương pháp tìm kiếm tuần tự tương tự bài tập 1 nhưng duyệt

theo chiều ngược lại của biến i đối với xâu S

Program

Var



demxaudoixung;



S, P,Q:string;

i,j,k:word;



begin

write(‘nhap xau S=’);

readln(s);

for i:=length(s) downto 1 do

for j:=1 to length(s)+1-i do

begin

p:=Copy(s,j,i);

Q:=’’;

for k:=1 to length(p) do

Q:=p[k] + Q;

If (P = Q) then

Begin

Write(‘xau con dxdai nhat la:’,P);

Readln;

Exit;

End;

End;

Write(‘xau con doi xung dai nhat la:’,s[1]);

Readln;

End.

Với cách viết này học sinh không cần sử dụng phương pháp quy hoạch động

(phương pháp mà đa số học sinh không hiểu cách vận dụng, liên quan đến kiểu dữ liệu

mảng 2 chiều đã giảm lược khỏi chương trình tin học phổ thông).



16



c. Ứ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

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

Chương trình bài tập 3:

Program taosonguyen;

var



s,h:string;

i,n:integer;



Begin



17



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.

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

Một văn bản được gọi là văn bản chuẩn hóa nếu:

- 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



18



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

IV. 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 2015 -2016 khi chưa thực

hiện đề tài:

STT



Lớp



Sĩ số



Giỏi



Khá



1



11A



43



81.4%



18.6%



2



11B



43



27.9%



65.1%



TB



Áp dụng

phương

pháp





7%



Không



- Bảng số liệu kết quả đạt được của học sinh lớp 11 năm học 2016-2017 sau khi thực

hiện đề tài:

STT



Lớp



Sĩ số



Giỏi



Khá



TB



Áp dụng

phương

pháp



1



11A



40



77.5%



22.5%



không



2



11B



41



97.6%



2.4%







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 đề.

Với phương pháp giảng dạy này, năm học 2015 – 2016 đội tuyển học sinh giỏi

do tôi hướng dẫn đã đạt giải học sinh giỏi cấp tỉnh với 1 giải ba và 1 giải khuyến

khích.



19



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Các bài tập nâng cao xử lý xâu

Tải bản đầy đủ ngay(24 tr)

×
x