Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 75 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
75
Dung lượng
363,46 KB
Nội dung
SÁNG KIẾN KINH NGHIỆM ĐỀ TÀI: “CHUYÊN ĐỀ BỒI DƯỠNG KIỂU DỮ LIỆU XÂU – TIN HỌC LỚP 11” LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com PHẦN A ĐẶT VẤN ĐỀ I Cơ sở khoa học thực tiễn việc lựa chọn đề tài Trong thực tiễn liệu vào toán liên quan đến kiểu liệu khác nhau, để tiện cho việc lập trình xử lý liệu thường đưa liệu dạng kiểu liệu chuẩn kiểu liệu có cấu trúc, kiểu liệu chuẩn kiểu xâu Qua trình tham gia giảng dạy bồi dưỡng học sinh giỏi nhận thấy liệu kiểu xâu thường gặp nhiều toán vận dụng linh hoạt thao tác xử lý kiểu liệu vào tốn khơng phải dễ Với mong muốn phần giúp học sinh giáo viên việc tìm lời giải cho số toán liên quan tới kiểu liệu xâu dễ dàng hơn, xin giới Chuyên đề bồi dưỡng kiểu liệu xâu mà áp dụng có hiệu q trình giảng dạy II Mục đích, nhiệm vụ việc thực đề tài nghiên cứu Nhận thấy việc đưa toán kiểu liệu xâu phương pháp giải chúng ngơn ngữ lập trình (hiện học sinh phổ thơng sử dụng ngơn ngữ lập trình Pascal nên ví dụ tập chúng tơi giới thiệu sử dụng ngôn ngữ Free Pascal để minh họa) cần thiết nhằm giúp cho giáo viên, học sinh hệ thống lại kiến thức thao tác kiểu liệu xâu phân dạng tập, từ áp dụng cho tốn cụ thể Chúng tơi đề mục đích, nhiệm vụ cụ thể việc thực đề tài: - Giới thiệu cách khai báo truy xuất đến kiểu liệu xâu, phần đề cập đến kiểu liệu xâu có độ dài lớn phù hợp với thực tiễn toán mà chưa đề cập đến sách giáo khoa ansistring - Giới thiệu số phép toán kiểu liệu xâu, đặc biệt phần có cung cấp thêm số hàm, thủ tục chưa giới thiệu 12 sách giáo khoa tin học 11, đồng thời đưa số ví dụ tương ứng để học sinh dễ dàng sử dụng - Hệ thống toán dạng số dạng tập thường gặp giúp cho giáo viên học sinh phần nhận dạng giải số tập liên quan - Giới thiệu số tập áp dụng Vì thế, cấu trúc nội dung gồm: Mục I Khai báo truy xuất đến phần tử kiểu xâu LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Mục II Các phép hàm thủ tục chuẩn xâu Mục III Các dạng toán thường gặp Mục IV Bài tập áp dụng III Đối tượng, thời gian phương pháp nghiên cứu Đối tượng nghiên cứu Bài viết SKKN "Chuyên đề bồi dưỡng kiểu liệu xâu" có đối tượng nghiên cứu toán liệu kiểu xâu Thời gian nghiên cứu SKKN thực năm học 2013-2014 Phương pháp nghiên cứu Để hoàn thành SKKN sử dụng phối kết hợp nhiều phương pháp, phương pháp chủ yếu nghiên cứu tài liệu, tham khảo ý kiến cấp đồng nghiệp LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com PHẦN B NỘI DUNG Để 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Ự LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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: LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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:'); LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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; LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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ố ngun ngồi 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ố nguyên 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)0) and (pos(s1,s)0) begin inc(dem); delete(s,pos(s1,s),length(s1)); end; if length(s)0 then write(g,0) else write(g,dem); close(f); close(g); end LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Bài 15 Tiền tố hậu tố (http://vn.spoj.com/problems/C11STR2/) Xâu a gọi là tiền tố của xâu b xâu a trùng với phần đầu xâu b Ví dụ pre là tiền tố củaprefix Xâu a gọi là hậu tố của xâu b xâu a trùng với phần cuối xâu b Ví dụ fix là hậu tố củasuffix yenthanh132 vừa học tiền tố hậu tố nên hôm đố bạn toán đơn giản tiền tố hậu tố sau: Cho xâu a,b gồm kí tự latin thường ('a' đến 'z') Tìm xâu c thỏa mãn: Xâu a tiền tố xâu c Xâu b hậu tố xâu c Độ xài xâu c ngắn nhất. Input Dòng 1: Xâu a Dòng 2: Xâu b Output Một dòng xâu c Giới hạn: 40% số test có độ dài xâu a,b