Mot so bai tap ve xau

20 2.9K 11
Mot so bai tap ve xau

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỘT SỐ KIẾN THỨC LÝ THUYẾT Để xử lý chuỗi văn bản, Pascal đưa kiểu liệu gọi xâu ký tự định nghĩa từ khóa STRING Xâu ký tự liệu bao gồm dãy ký tự bảng mã ASSCII Tuy nhiên độ dài String tối đa 255 mà thực tế ta thường gặp xâu có độ dài lớn cỡ hàng ngàn, có cách để khắc phục điều đó, chúng tơi xin trình bày số nội dung mà chúng tơi tìm hiểu vận dụng có hiệu trình giảng dạy bồi dưỡng đội tuyển I CÁCH KHAI BÁO VÀ TRUY XUẤT ĐẾN PHẦN TỬ XÂU Cách khai báo: Var: STRING[độ dài xâu]; - Xâu ký tự nhớ chiếm số byte số ký tự cực đại khai báo cộng với byte chứa số ký tự có xâu Độ dài tối đa xâu ký tự 255 - Ngồi có kiểu khai báo khác xâu như: + Shortstring: Chính String + longstring: 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ó free pascal mà khơng có turbo pascal) có kích thước gần 2GB = 230 B nên thường xem vô hạn Cách nhập/xuất: Cách đọc hay viết kiểu STRING tương tự kiểu liệu khác, ta sử dụng thủ tục READ, WRITE Ví dụ: Readln(st); Writeln(st); Truy cập phần tử xâu ký tự: Việc truy cập đến phần tử xâu tương tự mảng chiều thông qua tên biến kiểu STRING số Ví dụ: St := 'Le Thanh Lam'; write(st[4]); -> Kết quả: cho chữ T II CÁC THAO TÁC TRÊN XÂU KÝ TỰ Phép cộng xâu: Ví dụ:st1:=’tin’; st2:=’ hoc’; St=st1 + st2; -> St = ‘tin hoc’ Phép so sánh: Hai xâu ký tự so sánh với phép so sánh =, >, st2 Các thủ tục hàm chuẩn xử lý xâu ký tự a Hàm length(st): cho độ dài thực xâu ký tự st Ví dụ: st:=’tin hoc’ LENGTH(st) cho b Hàm upcase(ch): Cho ký tự hoa ký tự ch Ví dụ: ch:= 'a'; ch:= upcase(ch) → ch = 'A' Ví dụ: Viết đoạn chương trình nhập vào xâu ký tự Đổi xâu sang chữ in hoa in kết hình var s,s1:string; i:integer; begin write('nhap xau s:'); readln(s); s1:=''; for i:=1 to length(s) s1:=s1+ upcase(s[i]); write(s1); readln; end c Hàm Ord(ch): Cho mã ký tự ch bảng mã ASCII Ví dụ: ch:='a'; n:= Ord(ch) → n= 97 d Hàm Chr(n): Cho ký tự có mã n Ví dụ: Viết đoạn chương trình nhập vào xâu ký tự Đổi xâu sang chữ thường in xâu hình theo thứ tự ngược lại * Ý tưởng: Để thực chuyển đổi ký tự ch dạng hoa sang dạng thường trước hết ta sử dụng hàm ord(ch) để lấy mã ký tự đó, sau sử dụng hàm chr(ord(ch) +32) để ký tự thường ký tự hoa ch (vì mã ký tự hoa ch lệch mã ký tự thường tương ứng 32 như: ord('A')=65, ord('a')=97) var s,s1:string; i:integer; begin write('nhap xau s:'); readln(s); s1:=''; for i:=1 to length(s) if s[i] in ['A' 'Z'] then s1:=s1+ chr(ord(s[i])+32) else s1:=s1+s[i]; for i:=length(s1) downto write(s1[i]); readln; end e Thủ tục DELETE(st, pos, num): xóa num ký tự xâu st kể từ vị trí pos Ví dụ: st= ‘tin hoc’; Delete(st,4,4); lúc st cho ‘tin’ f Hàm POS(st1,st2): hàm cho vị trí tìm thấy xâu s1 xâu s2 Ví dụ: POS(‘tin’,‘tin hoc’) = Ví dụ: Viết đoạn chương trình nhập vào xâu ký tự In xâu sau xóa hết ký tự trắng thừa xâu (Ký tự trắng thừa ký tự đầu xâu, cuối xâu xâu có ký tự trắng liên tiếp có ký tự trắng thừa) * Ý tưởng: - Sử dụng hàm Pos(' ',s) để biết vị trí i xuất ký tự trắng sử dụng thủ tục Delete(s,i,1) để xóa ký tự thứ i xâu s - Để xóa ký tự trắng đầu xâu ta thực lệnh: while s[1]=' ' delete(s,1,1); - Để xóa ký tự trắng cuối xâu ta thực lệnh: while s[length(s)] = ' ' delete(s,length(s),1); - Để xóa ký tự trắng xâu ta thực lệnh: while pos(' ',s)0 delete(s, pos(' ',s),1); var s:string; begin write('nhap xau s:'); readln(s); while s[1]=' ' delete(s,1,1); while s[length(s)]=' ' delete(s,length(s),1); while pos(' ',s)0 delete(s,pos(' ',s),1); write(s); readln; end g Thủ tục INSERT(st1, st2, pos): Thủ tục cho kết cách chèn xâu ký tự có tên st1 vào xâu st2 vị trí pos, ký tự đứng sau pos dời phía sau xâu ký tự st2 Ví dụ: st1:= ‘tin ‘; st2:=’hoc kho’; INSERT(st1,st2,5) → st2=’hoc tin kho’; Ví dụ: Viết đoạn chương trình nhập vào xâu s1, s2, s (với xâu s1 xuất lần xâu s) Tìm thay xâu s1 thành xâu s2 xâu s Chẳng hạn: s1 := 'hoc'; s2:= 'bai tap'; s :='hoc tin hoc'; kết sau thay s1 thành s2 s = 'bai tap tin hoc' var s1,s2,s: string; i:byte; begin write('nhap s1:'); readln(s1); write('nhap s2:'); readln(s2); write('nhap xau s:'); readln(s); i:= pos(s1,s); delete(s,i,length(s1)); insert(s2,s,i); write(s); readln; end h Thủ tục STR(value, st): Thủ tục thực việc chuyển đối giá trị kiểu số(value) sang dạng xâu ký tự gán cho biến st Ví dụ: n:=2014; STR(n,st) cho kết xâu st là: st=’2014’; i Thủ tục VAL(st, value,code) đổi xâu ký tự st sang dạng số gán cho biến value, biến đối thành cơng code nhận giá trị ngược lại cho giá trị khác khơng Ví dụ: VAL(‘2014’,value,code) lúc code nhận giá trị value=2014 Ví dụ: Viết đoạn chương trình nhập vào số tự nhiên a có n số Hãy tạo số b từ số a cách in ngược có số xuất a Chẳng hạn số a = 123 b=321 var a,b:Qword; s,s1:string; i,code:longint; begin write('nhap a:'); readln(a); str(a,s); s1:=''; for i:=length(s) downto s1:=s1+s[i]; val(s1,b,code); write(b); readln; end j Hàm CONCAT(s1,s2,…,sn): hàm cho xâu cách nối đuôi xâu s1,s2,…,sn lại với Ví dụ: CONCAT(‘hoc ’, ‘tin ’) = ‘hoc tin’; k Hàm COPY(st, pos, num): chép xâu st, num ký tự vị trí pos, Ví dụ: st=’tin hoc’; COPY(st,5,3) = ‘hoc’; Ví dụ: Viết đoạn chương trình nhập vào xâu S (khơng có dấu cách vô nghĩa) Đưa từ dài xuất xâu S Chẳng hạn: s = 'xin chao ban' →kết tìm từ 'chao' * Ý tưởng: Dùng hàm pos để xác định ví trí ký tự trống xuất xâu s Từ xác định độ dài từ s Nếu ta thực xóa từ xâu s lặp lại thao tác ta tìm từ tiếp theo, đồng thời ta tìm từ có độ dài lớn * Chương trình: var s,tumax:string; begin write('nhap xau s:'); readln(s); while pos(#32,s)0 begin if pos(#32,s)>length(tumax) then tumax:=copy(s,1,pos(#32,s)); delete(s,1,pos(#32,s)); end; writeln(tumax); readln; end III CÁC DẠNG BÀI TẬP THƯỜNG GẶP Dạng Xử lý số nguyên lớn Phương pháp chung: Để thực phép tính xử lý với số nguyên phạm vi biểu diễn cung cấp, cách đơn giản sử dụng xâu kí tự để biểu diễn với ký tự xâu tương ứng với chữ số số nguyên lớn tính từ trái qua phải Dưới xin đưa số ứng dụng kiểu xâu xử lý số lớn Bài Cộng, trừ số nguyên lớn Cho hai số ngun dương lớn có có độ dài khơng q 200 chữ số Hãy đưa tổng hiệu số nguyên * Ý tưởng: Sử dụng xâu để lưu số lớn Trước hết cho xâu cách chèn thêm nhiều ký tự '0' vào trước xâu ngắn Việc thực cộng số thực cách cộng cặp ký tự số tương ứng từ phải sang trái xâu (Đối với phép trừ số nguyên thực tương tự) * Đoạn chương trình: function Add(s1,s2:string):string; var i,nho,z,x,y:longint; s:string; begin while length(s1)=s2 then sub:=sub1(s1,s2) else sub:='-'+sub1(s2,s1); end; MỘT SỐ BÀI TẬP VẬN DỤNG Bài 1: Sửa xâu Viết chương trình nhập vào từ bàn phím xâu kí tự, tính từ trái sang phải kí tự # dấu hiệu xố kí tự đứng trước có Sau in xâu sửa chữa theo quy định Ví dụ: Ta#oi thi hoc sinua#h###nh gioi tin hoj#c có nghĩa ‘Toi thi hoc sinh gioi tin hoc’ Dữ liệu vào: Tệp Suaxau.inp chứa xâu kí tự cần sửa Dữ liệu ra: Tệp Suaxau.out chứa xâu sửa Bài 2: Cho xâu ký tự gồm chữ Hãy viết chương trình đưa hình xâu gồm kí tự khác dài Ví dụ: cho xâu S='abacbcdaebcf' Kết quả: S='abcdef' Bài Cho hai xâu nhị phân độ dài n cho trước S1, S2 Hãy viết chương trình biến đổi xâu S1 thành S2 Các phép biến đổi phải rõ hình Ví dụ với S1='0101' S2='1100' kết thể sau: Vị trí 1: số > Vị trí 4: số > Bài 4: Cho nhập vào xâu S gồm kí tự Hãy lập trình đưa hình mảng cụm kí tự số Ví dụ: s=’ab123c45deg891’ Kết mảng: 123 45 891 Bài 5: Cho xâu kí tự S1='TIN HOC' xâu kí tự S2 Viết chương trình cho biết xâu S1 có xuất xâu S2 hay khơng Nếu có xâu S1 xuất xâu S2 lần? Ví dụ: S2='TIN HOC abc Tin hoc sds TIN HOC' Kết quả: S1 xuất S2 lần Bài 6: Biến đổi xâu Cho trước xâu nhị phân độ dài đưa vào từ file văn INPUT.TXT Cần biến đổi xâu nhị phân dạng toàn số Các phép biến đổi loại sau: Biến đổi xâu 11 thành 00 Biến đổi xâu 010 thành 000 Hãy cách biến đổi xâu cho thành xâu toàn số Kết thể file OUTPUT.TXT sau: Dòng OUTPUT.TXT chứa xâu ban đầu, sau dòng xâu sau phép biến đổi, xâu cuối xâu tồn số Ví dụ: INPUT.TXT OUTPUT.TXT 11010011 11010011 11010000 00010000 00000000 INPUT.TXT OUTPUT.TXT 10101101 Khong the bien doi duoc Bài 7: Sắp số xâu Nhập xâu s bao gồm số kí tự, in xâu xếp số theo thứ tự tăng dần vị trí kí tự giữ nguyên Bài Cho trước hai xâu ký tự S1, S2 Viết chương trình tìm xâu chung cực đại gồm phần tử liên tiếp hai xâu Bài 9: Xâu kí tự Có khơng q 1000 chiến sỹ công an tham gia chiến dịch truy quét tội phạm tỉnh X Các chiến sỹ công an chia thành không 26 đội Để dễ điều hành, huy chiến dịch quy định ký hiệu cho đội chữ in thường nằm khoảng từ ‘a’ đến ‘z’ Hai đội khác có kí hiệu khác Các chiến sỹ cơng an thuộc đội gắn ký hiệu đội Nếu lấy ký hiệu gắn cho tất chiến sỹ công an tham gia chiến dịch ghép lại xâu ký tự Hãy xác định số lượng chiến sỹ công an đội Dữ liệu vào: tệp văn XAU.INP chứa xâu kí tự kết việc ghép ký hiệu gắn cho tất chiến sỹ công an tham gia chiến dịch Dữ liệu ra: tệp văn XAU.OUT có khơng q 26 dòng, dòng ghi ký hiệu cuả đội số lượng thành viên cuả đội Ví dụ: XAU.INP XAU.OU T abcad a2 b1 c1 d1 Bài 10: Robot công nghiệp (Bài HSG11 năm học 2011-2012) Trong nhà máy có trang bị loại Robot cơng nghiệp để thực việc tự động hố gia công sản phẩm Việc gia công sản phẩm Robot thực đồng thời hai sản phẩm lúc theo tiến trình: Với loại thao tác gia công Robot thực sản phẩm thứ xong chuyển sang thực sản phẩm thứ Để hoàn thành sản phẩm, Robot thực tới N loại thao tác gia công (N

Ngày đăng: 17/07/2019, 09:07

Từ khóa liên quan

Mục lục

  • BÀI 14. DÃY NGOẶC

Tài liệu cùng người dùng

Tài liệu liên quan