Tải bản đầy đủ - 24 (trang)
PHẦN II: NỘI DUNG

PHẦN II: NỘI DUNG

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

cận với CNTT, thể nghiệm thao tác trực tiếp trên máy nên dễ dàng nắm bắt nội dung

của bài học.

Đối với giáo viên: là giáo viên trẻ nên có điều kiện tiếp cận với những tiến bộ

của CNTT, hỗ trợ rất lớn cho công tác giảng dạy.

Với học sinh, qua chương trình tin học lớp 10 các em đã được trang bị những kĩ

năng nhất định trong việc sử dụng máy tính; biết thế nào là thuật toán cũng như cách

xây dựng và mô tả một thật toán thông qua sơ đồ khối hoặc liệt kê các bước.

2. Khó khăn

Ngoài các thuận lợi đã nêu, công tác giảng dạy tin học tại trường THPT Quảng

Xương 4 cũng gặp những khó khăn nhất định:

Do đặc thù bộ môn, nên nhiều học sinh chưa thực sự say mê với môn học, thờ ơ

và coi nhẹ việc học tin học.

Đa phần học sinh nhà trường đều thuộc khu vực khó khăn ven biển nên học

sinh ít có điều kiện tiếp cận với CNTT. Với nội dung lập trình trong tin học, đây là một

nội dung mới và khó đối với đa số học sinh, phần lớn học sinh thực sự khó khăn trong

việc nắm bắt ý nghĩa của từng câu lệnh cũng như cách vận dụng chúng như thế nào

trong việc lập trình, do đó nhiều học sinh sau khi xác định được yêu cầu của bài toán

thường chỉ dừng lại ở việc xây dựng và biểu diễn thuật toán cho bài toán (dưới dạng sơ

đồ hoặc liệt kê các bước) chứ chưa biết sử dụng các câu lệnh như thế nào để mô tả các

thao tác đó thành chương trình, chưa biết cách sử dụng dữ liệu nào để biểu diễn cho

hợp lý ... nên kết quả học sinh bế tắc trong việc giải quyết các bài toán lập trình dẫn

đến kết quả giảng dạy chưa cao.

Đối với bản thân giáo viên: ít kinh nghiệm trong công tác giảng dạy nên việc

truyền đạt cho học sinh hiểu đúng bản chất và cách vận dụng các cấu trúc lệnh, các

kiểu dữ liệu phù hợp còn gặp không ít khó khăn, lúng túng đôi khi chú tâm nhiều vào

lí thuyết mà ít quan tâm đến việc hướng dẫn học sinh học tập trực tiếp thông qua các ví

dụ thực hành.

Sau một số năm giảng dạy, từ việc nhận thấy những khó khăn gặp phải của học

sinh trong việc học lập trình, cũng như việc thiếu kinh nghiệm truyền đạt của bản thân,

tôi đã tìm tòi, nghiên cứu tìm ra các nguyên nhân dẫn đến việc học sinh ngại học, chán

học lập trình điều đó không phải chỉ ở việc xây dựng các thuật toán để giải các bài

toán mà là làm thế nào để chuyển đổi chính xác thuật toán thành chương trình, lựa

chọn cấu trúc điều khiển các kiểu dữ liệu phù hợp như thế nào để có thể mô tả chính

xác thao tác của thuật toán.

III. GIẢI PHÁP

Bắt nguồn từ thực trạng việc giảng dạy tin học, từ nguyên nhân dẫn đến tình trạng

học sinh chưa có hứng thú học tập lập trình và từ thực tiễn việc học sinh hiểu và vận

dụng kiểu dữ liệu phù hợp, tôi đã đưa ra một giải pháp và đã đem lại những hiệu quả

nhất định trong việc giảng dạy, đó là thông qua việc hướng dẫn học sinh giải một số

bài toán thực tế có vận dụng cấu trúc dữ liệu phù hợp từ đó xác định các lệnh có liên

quan có thể áp dụng cho từng trường hợp cụ thể giúp học sinh dễ dàng giải quyết các

bài tập, gây hứng thú cho học sinh từ đó góp phần nâng cao chất lượng giáo dục.

A. KHAI BÁO VÀ TRUY XUẤT ĐẾN PHẦN TỬ XÂU

1. Khái niệm, cách khai báo và tham chiếu đến phần tử xâu



5



- Khái niệm: Xâu là dãy các kí tự thuộc bảng 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. Trong Turbo Pascal xâu rỗng được viết bởi hai dấu

nháy đơn liền nhau ‘và’.

Ví dụ: S=



‘Lop 11A’



gồm có: 7 ký tự



S1=



‘Truong thpt quang xuong 4’



gồm có: 25 ký tự



S2=



‘1234567*1234’



gồm có: 12 ký tự



S3=



‘’



gồm có: không ký tự



- Có thể xem xâu là một trường hợp đặc biệt của mảng một 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. (như vậy

với các biến thuộc kiểu xâu, có thể áp dụng cách duyệt của mảng một chiều để xử lý

trong quá trình làm việc với dữ liệu xâu)

- Tham chiếu đến phần tử xâu: [chỉ số phần tử]

Ví dụ: S[1]= ‘L’, S[4]= ‘ ’, S[6]= ‘1’

Lưu ý: - Kiểu xâu khác với kiểu char (Các biến kiểu Char thuộc dạng biến đơn, mỗi

thời điểm chỉ lưu trữ được 1 ký tự)

2. Khai báo

Với nội dung này, để học sinh thấy rõ những điểm mới trong cấu trúc khai báo

giáo viên đưa ra yêu cầu: Viết khai báo biến cho ví dụ sau:

Bài toán 1: Nhập vào một ký tự Ch bất kỳ từ bàn phím

Bài toán 2: Nhập vào một mảng các ký tự S là họ tên của một người gồm 30 ký tự

Bài toán 3: Nhập vào một dãy ký tự bất kỳ có độ dài không quá 30 ký tự

Với các ví dụ này học sinh dễ dàng đưa ra các cách khai báo cho bài toán 1, 2

Bài toán 1: học sinh sử dụng cách khai báo biến đơn

Var Ch: Char;

Bài toán 2: Học sinh sử dụng cách khai báo mảng mà mỗi phần tử là một ký tự

C1: Khai báo trực tiếp

Var S:array[1..30] of Char;

C2: khai báo gián tiếp

Type DayKT=array[1..30] of Char;

Var S: DayKT;

Sau khi học sinh đưa ra hai cách khai báo này, giáo viên đưa ra cách khai báo

cho trường hợp bài tập 3 đồng thời yêu cầu học sinh rút ra điểm giống và khác trong

cách khai báo giữa các biến trong ba bài tập, từ đó học sinh rút ra được cấu trúc khai

báo biến tổng quát cho trường hợp dữ liệu kiểu xâu.

Ví dụ:



C1:



Var S:String[30];



C2:



Var



S: String;



* Cấu trúc tổng quát:

Var : string[độ dài lớn nhất của xâu];



6



- Nếu không khai báo độ dài lớn nhất của xâu thì xâu sẽ nhận giá trị ngầm định

là 255. Xâu ký tự trong bộ nhớ chiếm số byte bằng số ký tự cực đại được khai báo

cộng với byte đầu tiên chứa số ký tự hiện có của xâu.

- Ngoài ra có các kiểu khai báo khác của xâu như:

+ Shortstring: Chính là String

+ longstring: là mảng ký tự có kiểu char. Thông thường kiểu char có kích

thước 16 bit nên mảng có kích thước tối đa 16 bit = 65535 ký tự

+ ansistring (chỉ có trong free pascal)có kích thước gần 2GB = 230 B

3. Cách nhập/xuất

Khác hẳn với cách đọc, ghi dữ liệu mảng một chiều (luôn đi kèm với câu lệnh

duyệt các phần tử) Cách đọc hay viết dữ liệu kiểu xâu tương tự như các kiểu dữ liệu

chuẩn khác, ta sử dụng các thủ tục READ, hoặc WRITE.

Ví dụ: - Đọc dữ liệu:

- Ghi dữ liệu



Readln(s);



hoặc



Read(s);



Writeln(s);



hoặc



Write(s);



B. CÁC THAO TÁC XỬ LÍ XÂU

1. Phép ghép xâu (phép cộng xâu): kí hiệu là dấu cộng (+), dùng để ghép nhiều xâu

thành một.

Ví dụ: ‘123abc’ + ‘453acd’ cho kết quả ‘123abc453acd’

2. Các phép so sánh xâu

Các phép so sánh xâu bao gồm: <, <=, =, >=, >, <> có thứ tự thực hiện ưu tiên

thấp hơn phép ghép xâu và thực hiện việc so sánh hai xâu theo các quy tắc sau:

- Xâu A > xâu B nếu 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.

Ví dụ: ‘anh’> ‘Anh’, kí tự ‘a’ có mã ASCII là 97, kí tự ‘A’ có mã ASCII là 65.

- Nếu A và B là các xâu có độ dài khác nhau và A là đoạn đầu của B thì A< B.

Ví dụ:



‘Quang Xuong’ < ‘Quang Xuong 4’



- A=B nếu xâu A và B giống nhau hoàn toàn

Ví dụ: ‘Quang Xuong’ = ‘Quang Xuong’; ‘Quang Xuong’ <> ‘ quang Xuong’

3. Một số thủ tục xử lý xâu

- Thủ tục Delete(st,vt,n): Xóa n kí tự của xâu St, bắt đầu từ vị trí vt

Ví dụ:

Giá trị St



Thao tác



Kết quả



‘Quang Xuong 4’



Delete(st,1,6)



‘Xuong 4’



‘hoc tin hoc’



Delete(st,7,4)



‘hoc tin’



- Thủ tục Insert(s1,s2,vt): Chèn xâu s1 vào s2, bắt đầu ở vị trí vt

Ví dụ



7



Giá trị s1



Giá trị s2



Thao tác



Kết quả



‘hoc’



‘ tin hoc’



Insert(s1,s2,1)



‘hoc tin hoc’



Insert(s1,s2,4)



‘ tinhoc hoc’



- Thủ tục str(value,s): chuyển đổi giá trị kiểu số (value) sang dạng xâu kí tự và gán

cho biến s.

Ví dụ:



n:=123;



str(n,s);



sẽ cho kết quả xâu s là s=’123’



- Thủ tục val(s,value,code): đổi xâu kí tự s sang dạng số và gán cho biến value, nếu

biến đổi thành công thì code nhận giá trị bằng 0, ngược lại cho giá trị khác 0. (lưu ý

code là biến thuộc kiểu Integer)

Ví dụ:



val(‘195’,value,code) lúc này code=0 và value=195



4. Một số hàm:

TT



Hàm



Ý nghĩa



1



Copy(st,vt,n)



Tạo xâu mới gồm n kí tự liên tiếp bắt đầu từ vị trí vt của

xâu st



2



Length(st)



Cho giá trị là độ dài xâu st



3



Pos(s1,s2)



Cho vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2



4



Upcase(ch)



Cho chữ cái in hoa ứng với chữ cái trong ch



5



Ord(ch)



Cho mã của kí tự ch trong bảng mã ASCII



6



Chr(n)



Cho kí tự có mã là n



7



Concat(s1,s2,..,sn)



Cho xâu mới bằng cách nối đuôi các xâu s1,s2,..,sn lại

với nhau



Ví dụ:

TT



Giá trị s



Biểu thức



Kết quả



Copy(s,1,11)



‘Quang xuong’



1



‘Quang xuong 4’



2



‘chao ban’



Length(s)



8



3



‘Quang xuong 4’



Pos(‘ng’,s)



4



4



‘a’



Upcase(s[1])



‘A’



5



‘a’



Ord(s[1])



97



6



Chr(65)



‘A’



7



Concat(‘hoc’,‘tin’,‘hoc’)



‘hoctinhoc’



8



C. CÁC BÀI TẬP XỬ LÝ DỮ LIỆU KIỂU XÂU

1. Các bài tập cơ bản xử lý xâu

Bài tập 1: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Đổi xâu ký tự đó

sang chữ in hoa rồi in kết quả ra màn hình.

Ví dụ: Input: ‘le anh van’

Output: ‘LE ANH VAN’

GV: Đặt ra các câu hỏi như: sử dụng thao tác nào để giải quyết vấn đề này? ứng dụng

thực tế của nó là gi?

HS: Xác định sử dụng thao tác upcase(); bài toán thường được ứng dụng trong các

trường hợp nhập biểu mẫu cập nhật thông tin tuyển sinh

GV: Đưa ra hạn chế của giải pháp là hàm upcase chỉ áp dụng được cho biến ký tự,

lưu ý học sinh kiểu xâu có thể áp dụng duyệt tương tự mảng một chiều do đó có thể sử

dụng: Câu lệnh for i:=1 to length(s) do S[i]:=upcase(S[i]); dùng để thực hiện yêu

cầu đó.

Chương trình:

Program inhoa;

Var



S: String;

i:Byte;



Begin

Write(‘Nhap xau S: ‘); Readln(S);

For i:=1 to length(S) do S[i]:=Upcase(S[i]);

Write(‘Xau ket qua: ‘, S);

Readln;

End.

Bài tập 2: Nhập 1 xâu S từ bàn phím (S<=80), đưa ra màn hình xâu đảo ngược của

xâu đó (viết theo chiều ngược lại).

VD: Input: ‘Hello’

Output: ‘olleH’

GV nêu câu hỏi: làm thế nào để chúng ta có thể viết ngược lại xâu nhập vào?

Học sinh trả lời:

GV: Để duyệt lần lượt các kí tự trong xâu S từ 1 đến hết (phần tử cuối cùng có chỉ số

trùng với độ dài của xâu) ở các ví dụ và bài tập 1 chúng ta sử dụng vòng lặp biết

trước for i:=1 to length(s) do …Vậy nếu chúng ta sử dụng vòng lặp lùi for

i:=length(s) downto 1 do …thì có thể giải quyết được yêu cầu của bài toán không?

HS: trả lời

GV gọi học sinh lên bảng viết CT, sau đó nhận xét và chạy thử chương trình học sinh

viết, HS quan sát kết quả thực hiện chương trình trên màn hình máy chiếu. (GV giải

thích thêm vì sao xâu s trong bài tập này có độ dài tối đa 80 kí tự)

Chương trình:



9



Program xaunguoc;

Var



S, P: String[80];

i:Byte;



Begin

Write(‘Nhap xau S: ‘); Readln(S);

P:= ‘’;

For i:=length(S) downto 1 do P:=P+ S[i];

write(‘Xau dao nguoc la’, P);

Readln;

End.

Bài tập 3: Đếm số dấu cách trong xâu: Nhập vào một xâu bất kỳ từ bàn phím, có độ

dài không quá 255 ký tự, đếm và đưa ra màn hình số lượng dấu cách có trong xâu?

Ví dụ: St= ‘Quang xuong 4 Quang Xuong’



kết quả: 4



GV: Hỏi làm thế nào để đếm được số dấu cách có trong xâu? Có thể vận dụng cách xử

lý dạng mảng hay không?

HS: Suy nghĩ trả lời, dễ dàng nhận thấy có thể ứng dụng phương pháp duyệt và tham

chiếu đến các phần tử xâu để xử lý bài toán

Chương trình tham khảo

Program demdaucach;

Var



S: String;

i,d:Byte;



Begin

Write(‘Nhap xau S: ‘); Readln(S);

d:= 0;

For i:= 1 to length(S) do

If (s[i]= ‘ ’)



then d:=d+1;



write(‘so dau cach trong xau’, d);

Readln;

End.

Bài tập 4: Xóa dấu cách

Xâu St được gọi là xâu chuẩn hóa nếu phần đầu và cuối xâu không có dấu cách

thừa, khoảng cách giữa hai từ bất kỳ chỉ gồm 1 dấu cách.

Yêu cầu: Nhập vào một xâu st bất kỳ, hãy chuẩn hóa xâu vừa nhập và đưa kết

quả ra màn hình?

Ví dụ:



St= ‘



Viet



Nam







kết quả:



‘Viet Nam’



GV: Làm cách nào để tìm được kết quả?

HS: Sử dụng thủ tục delete



10



GV: Để loại bỏ các dấu cách thừa ở đầu và cuối xâu thực hiện như thế nào?

HS: Dễ dàng nhận thấy trong khi st[1] còn là dấu cách thì còn xóa, trong khi ký tự

cuối cùng của st còn là dấu cách thì còn xóa

GV: Đối với các đấu cách thừa ở các vị trí có nhiều hơn 1 dấu cách thì xử lý như thế

nào?

HS: Trong khi còn tồn tại hai dấu cách trở lên thì tiến hành xóa đi 1 dấu cách cho đến

khi không còn dấu cách thừa nào nữa thì hoàn thành.

GV: Đưa ra chương trình tham khảo

Program chuanhoa;

Var St: String;

Vt:byte;

Begin

Write(‘ nhap st=’);

Readln(st);

While (st[1]= ‘ ‘) do delete(st,1,1);



{xoa dau}



While (st[length(st)]= ‘ ‘) do delete(st,length(st),1); {xoa duoi}

Vt:=pos(‘ ‘,st);

While vt>0 do



{xoa giua}



Begin

Delete(st,vt,1);

Vt:=pos(‘ ‘,st);

End;

Writeln(‘xau chuan hoa la:’,St);

Readln;

End.

Bài tập 5: Viết chương trình cho máy tính kiểm tra mật khẩu. Mật khẩu là ‘tinhoc’.

Nếu vào đúng mật khẩu thì cho hiện dòng thông báo ‘Dang nhap thanh cong’. Nếu gõ

sai mật khẩu thì máy cho hiện dòng thông báo ‘Nhap lai password’.

GV: Các em thấy ở một số máy khi khởi động vào Windows thì máy tính yêu cầu

chúng ta phải gõ mật khẩu, hoặc khi chúng ta không làm việc với máy tính sau một

khoảng thời gian nhất định thì trên màn hình cũng xuất hiện cửa sổ yêu cầu người

dùng phải nhập password. Nếu nhập mật khẩu sai thì chúng ta không thể làm việc

cùng máy tính được nữa? Việc này để tăng cường tính năng bảo vệ máy tính, bảo mật

thông tin. Vậy chúng ta có thể làm được điều đó hay không? Bài tập này giúp các em

củng cố lại phần kiến thức về việc so sánh 2 xâu.

GV: Gợi ý học sinh viết chương trình

Chương trình:

Program ktmatkhau;

Uses crt;



11



Var s: string;

Begin

Clrscr;

repeat

Write(‘hay nhap password:’);



Readln(s);



Until s=’tinhoc’;

Write(‘ dang nhap thanh cong’);

Readln

End.

Đây là chương trình đơn giản so sánh xâu s nhập vào với xâu ‘tinhoc’ nhưng

khi thực hiện chương trình đã tạo được hiệu ứng tốt đối với học sinh, các em thấy rất

thú vị, thì ra lập trình cũng thật đơn giản. Giáo viên còn giới thiệu thêm được cấu trúc

lặp không biết trước số lần lặp repeat…until, và GV liên hệ với thực tế việc HS khi

truy cập các trang mạng xã hội hoặc sử dụng một số dịch vụ trên internet đều phải

đăng nhập.

Bài tập 6: Xâu con: Một xâu s1 được gọi là xâu con của xâu s2 nếu s1 là một phần

của xâu s2 (nói cách khác, s2 chứa xâu s1)

Nhập vào 2 xâu bất kỳ s1, s2 kiểm tra xem s1 có phải là xâu con của xâu s2 hay

không, nếu có ghi “dung”, nếu không ghi “sai” ra màn hình?

GV: với bài toán này ta đã thấy nó được ứng dụng ở đâu trong thực tế?

HS: đây là một trường hợp đơn giản của bài toán tìm kiếm, một ứng dụng được rất

nhiều người sử dụng của internet, trên máy tính, tra cứu khi đọc tài liệu...

GV: Để giải quyết bài này ta sử dụng thao tác nào trong số các thao tác với dữ liệu

xâu?

HS: Dễ dàng nhận thấy đây là một ứng dụng rất hay của thao tác Pos(s1,s2) trong xử

lý xâu.

Chương trình tham khảo:

Program xaucon;

Var



s1,s2:String;



Begin

Write(‘nhap xau s1=’); readln(s1);

Write(‘nhap xau s2=’); readn(s2);

If (pos(s1,s2)>0) then write(‘Dung’)



else



Write(‘Sai’);



Readln;

End.

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

Một xâu st được gọi là xâu đối xứng nếu nó bằng chính nó khi viết theo chiều

ngược lại.



12



Yêu cầu: lập trình nhập vào một xâu st bất kỳ, kiểm tra xem xâu đó có phải là xâu đối

xứng hay không?

Dễ nhận thấy với bài toán này, học sinh có thể vận dụng cách tạo xâu đảo ngược của

bài tập tạo xâu đảo ngược, đem kết quả thu được so sánh với xâu ban đầu, nếu hai

xâu bằng nhau thì kết luận xâu đối xứng, nếu không thì kết luận xâu không đối xứng.

Chương trình tham khảo

Program doixung;

Var St, S:String;

I:Byte;

Begin

Write(‘nhap vao xau st:’);

Readln(st);

S:=’’;

For i:=length(st) downto 1 do

S:=S+st[i];

If (st = s) then write(st,’ la xau doi xung’)

Else



write(st,’khong phai xau doi xung’);



Readln;

End.

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

Từ các bài tập cơ bản ở phần một giáo viên cung cấp cho học sinh các bài tập

nâng cao phát triển trên chính các bài tập cơ bản

a) Biến đổi xâu

Việc biến đổi xâu được thực hiện trên mỗi ký tự trong xâu nên cần nắm rõ các

hàm, thủ tục trên kiểu dữ liệu xâu để vân dụng một cách linh hoạt vào từng bài tập cụ

thể.

Bài tập 1. Rút gọn xâu

Cho xâu St chỉ gồm các chữ cái in thường với độ dài tối đa 250 ký tự nhập từ

bàn phím. Hãy viết chương trình để tạo ra xâu S2 từ xâu S1 bằng cách xóa các ký tự

liên tiếp giống nhau trong xâu S1 và chỉ để lại một kí tự đại diện trong đoạn đó, đưa

kết quả ra màn mình.

Ví dụ:

St in



St out



TTTTTuuuuooongggLLLLaaaaiii



TuongLai



- Ý tưởng: Duyệt từ đầu đến cuối xâu, gặp hai ký tự liên tiếp khác nhau thì xóa đi một

ký tự.



13



- 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



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

PHẦN II: NỘI DUNG

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

×
x