1. Trang chủ
  2. » Trung học cơ sở - phổ thông

SÁNG KIẾN KINH NGHIỆM TIN 11 CHUYÊN đề về xâu kí tự

23 91 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 183,65 KB

Nội dung

ĐỀ TÀI: CHUYÊN ĐỀ VỀ XÂU KÍ TỰ Giáo viên : Tổ : CHUYÊN ĐỀ VỀ XÂU KÍ TỰ I TỔNG QUAN LÝ THUYẾT Khái niệm, tham chiếu đến phần tử xâu - Khái niệm: Xâu dãy kí tự thuộc bảng mã ASCII, kí tự gọi phần tử xâu Số lượng kí tự xâu gọi độ dài xâu Xâu có độ dài gọi xâu rỗng Trong Turbo Pascal xâu rỗng viết hai dấu nháy đơn liền ‘và’ VD: cho xâu s=‘THPT Yen Dung so 1’, xâu S có số kí tự 18 =>độ dài xâu s 18 - Có thể xem xâu mảng chiều mà phần tử kí tự Các kí tự xâu đánh số thứ tự thường - Tham chiếu đến phần tử xâu: [chỉ số phần tử] VD; s[1]=’T’, s[4]=’T’, s[6]=’L’, s[10]=’g’ Lưu ý: - Kiểu xâu khác với kiểu char Khai báo: Var : string[độ dài lớn xâu]; VD: var hoten:string[30]; S:string; {xâu s có độ dài 255} - Nếu không khai báo độ dài lớn xâu xâu nhận giá trị ngầm định 255 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 - 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)có kích thước gần 2GB = 230 B Cách nhập/xuất: Cách đọc hay viết kiểu xâu tương tự kiểu liệu khác, ta sử dụng thủ tục READ, WRITE Ví dụ: Readln(s); Writeln(s); Các thao tác xử lí xâu a Phép ghép xâu (phép cộng xâu): kí hiệu dấu cộng (+), dùng để ghép nhiều xâu thành VD: ‘Yen Dung’ + ‘so 1’ cho kết ‘Yen Dungso 1’ ‘Yen Dung’ + ‘ ’ + ‘so 1’ cho kết ‘Yen Dung so 1’ b Các phép so sánh , có thứ tự thực ưu tiên thấp phép ghép xâu thực việc so sánh hai xâu theo quy tắc sau: - Xâu A > xâu B kí tự khác chúng kể từ trái sang xâu A có mã ASCII lớn VD: ‘an’>’An binh’, kí tự ‘a’ có mã ASCII 97, kí tự ‘A’ có mã ASCII 65 - Nếu A B xâu có độ dài khác A đoạn đầu B A< B VD: ‘an’ < ’an binh’, ‘yen’ < ‘yen dung’ - A=B xâu A B giống hoàn toàn VD: ‘hoa’=’hoa, ‘hoa’’Hoa’ c Một số thủ tục xử lý xâu: - Thủ tục Delete(s,vt,n): Xóa n kí tự xâu s, vị trí vt VD: Giá trị S Thao tác Kết ‘ydso1’ Delete(s,1,4) ‘1’ ‘thptydso1 Delete(s,5,5) ‘thpt’ - Thủ tục Insert(s1,s2,vt): Chèn xâu s1 vào s2, bắt đầu vị trí vt VD: Giá trị s1 Giá trị s2 Thao tác Kết ‘Yendung’ ‘so1’ Insert(s1,s2,1) ‘Yendungso1’ Insert(s2,s1,1) ‘so1Yendung’ - Thủ tục str(value,s): chuyển đổi giá trị kiểu số (value) sang dạng xâu kí tự gán cho biến s VD: n:=195; str(n,s) cho kết xâu s s=’195’ - Thủ tục val(s,value,code): đổi xâu kí tự s sang dạng số gán cho biến value, biến đổi thành cơng code nhận giá trị 0, ngược lại cho giá trị khác VD: val(‘195’,value,code) lúc code=0 value=195 d Một số hàm: TT Hàm Ý nghĩa Copy(s,vt,n) Tạo xâu gồm n kí tự liên tiếp vị trí vt xâu s Length(s) Cho giá trị độ dài xâu s Pos(s1,s2) Cho vị trí xuất xâu s1 xâu s2 Upcase(ch) Cho chữ in hoa ứng với chữ ch Ord(ch) Cho mã kí tự ch bảng mã ASCII Chr(n) Cho kí tự có mã n Concat(s1,s2, ,sn) Cho xâu cách nối xâu s1,s2, ,sn lại với Ví dụ: TT Giá trị s Biểu thức Kết ‘yendungso1’ Copy(s,1,7) ‘yendung’ ‘Hello’ Length(s) ‘yendungso1’ Pos(‘g’,s) TT Giá trị ch ‘a’ ‘a’ Upcase(ch) Ord(ch) Chr(65) Concat(‘tin’,’hoc’) ‘A’ 97 ‘A’ ‘tinhoc’ II PHƯƠNG PHÁP GIẢI CÁC DẠNG BÀI TẬP ĐIỂN HÌNH Dạng 1: Một số tập củng cố kiến thức, tạo hứng thú cho học sinh: Bài tập 1: Viết chương trình nhập vào xâu ký tự từ bàn phím Đổi xâu ký tự sang chữ in hoa in kết hình Ví dụ: Input: ‘nguyen van an’ Output: ‘NGUYEN VAN AN’ GV nêu câu hỏi: Ứng dụng viết chữ in hoa em gặp trường hợp nào? HS: làm giấy khai sinh, kê khai lý lịch, làm hồ sơ thi tốt nghiệp, ĐH-CĐ… GV: Làm để ta nhập họ tên vào máy chữ thường lên hình chữ in hoa có dấu? HS: sử dụng hàm upcase(ch) Giáo viên: Nhưng hàm upcase(ch) đổi kí tự thành ký tự in hoa, đổi xâu kí tự? xử lý vấn đề nào? HS: đưa cách xử lý Giáo viên: Chúng ta biết coi xâu mảng chiều mà phần tử kí tự Mỗi kí tự xâu đánh số thứ tự thường 1, số kí tự xâu độ dài xâu Vậy để chuyển xâu nhập từ bàn phím thành chữ in hoa ta chuyển kí tự xâu thành kí tự in hoa: duyệt phần tử xâu gán phần tử giá trị upcase(ch); Câu lệnh for i:=1 to length(s) S[i]:=upcase(S[i]); dùng để thực yêu cầu GV gọi học sinh lên bảng viết chương trình HS viết chương trình, sau GV nhận xét, sửa chữa có sai sót Chạy chương trình để HS theo dõi kết thực Chương trình: Program inhoa; Var S: String;i:Byte; Begin Write(‘Nhap xau S: ‘); Readln(S); For i:=1 to length(S) S[i]:=Upcase(S[i]); Write(‘Xau ket qua: ‘, S); Readln; End Bài tập 2: Nhập xâu S từ bàn phím (Smax) then begin max:=d; csd:=i; csc:=j; end; end; for i:=csd to csc write(s[i]); readln; End Dạng 4: Ứng dụng kiểu xâu vào giả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 số b từ số a cách viết ngược lại chữ số xuất a Ví dụ: cho a=234 b=432 GV: Dựa vào kiến thức kiểu xâu, em nêu ý tưởng giải toán này? HS: GV: Nhận xét câu trả lời hs, nêu rõ: để tạo số b từ số a, cách viết ngược lại chữ số a thì: + tạo xâu rỗng s + cần sử dụng vòng lặp biết trước lùi (giống tập phần a) + dùng thủ tục val để đổi xâu kí tự s sang dạng số gán cho biến value GV yêu cầu hs viết chương trình, sau GV chạy chương trình cho học sinh quan sát hình máy chiếu Gv giải thích giúp học sinh sửa lỗi chương trình 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 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 lớn cho P (P≤20) số nguyên dương A P xâu ký tự s1, s2, ,sp (độ dài xâu không vượt 255) gồm số thập phân cách viết s1 liên tiếp A1 lần 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 cho cho trước số nguyên dương k nhỏ số chữ số N Hãy tìm cách gạch k chữ số N để nhận số có giá trị nhỏ Ví dụ: Vào Kết p=3, k =11 a1=3, a2 = 4, a3 = s1 = 123, s2=0, s3 = 45 44 - Ý tưởng: Ở toán N số nguyên lớn nên ta sử dụng xâu để biểu diễn nó, giả sử số n lớn ghép lại m ký tự khác sau xóa ta cịn lại m-k chữ số n Lần lượt tìm m chữ số nhỏ xâu cịn lại ta kết 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ó free pascal mà khơng có turbo pascal) có kích thước gần 2GB =230 B nên t ường xem 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 readln(a[i]); for i:=1 to p readln(s[i]); for i:=1 to p For j:=1 to A[i] 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 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 số nguyên N1 cách viết liên tiếp số nguyên từ đến N Ví dụ N = ta có N1 = 1234 Thực việc thu gọn N1 cách xóa tất chữ số vị trí lẻ, sau xóa tất số vị trí chẵn, lại xóa chữ số vị trí lẻ, … lại chữ số Ví dụ: 1234 ->24-> Chương trình tập 3: Program taosonguyen; var s,h:string; i,n:integer; Begin Write('Nhap n='); Readln(n); s:=''; for i:=1 to n begin str(i,h); s:=s+h; end; writeln(s); Repeat for i:=1 to length(s) if i mod 20 then s[i]:=' '; while pos(' ',s)0 delete(s,pos(' ',s),1); for i:=1 to length(s) if i mod 2=0 then s[i]:=' '; while pos(' ',s)0 delete(s,pos(' ',s),1); Until length(s) ‘Ha Nam’ C ‘TIN HOC’ < ‘tin hoc’ D ‘Viet Nam’ > ‘Viet nam’ 18 Cho A=’abc’; B=’ABC’; A+B cho kết nào? A ‘aAbBcC’ B ‘abcABC’ C ‘AaBbCc’ D ‘ABCabc’ 19 S1 := ‘tin hoc cho moi nguoi’ ; x :=Pos(‘o’,S1) ; cho kết là? A B C.7 D.11 20 So sánh hai xâu a := ‘Ha Noi’, xâu b := ‘Sai Gon’ chọn kết A a < b B.a > b C a = b D a C VẬN DỤNG Trong ngơn ngữ lập trình Pascal, đoạn chương trình sau thực cơng việc ? (giá trị biến đếm) dem := ; For ch := ‘a’ to ‘z’ If pos(ch,S) then dem := + ; A Đếm số lượng ký tự chữ in hoa xâu S B Đếm số lượng ký tự khác dấu cách xâu S C Đếm số lượng chữ thường khác có xâu S D Đếm số lượng ký tự chữ thường xâu S Trong ngơn ngữ lập trình Pascal, để in xâu kí tự hình theo thứ tự ngược lại ký tự xâu (vd : abcd thi in dcba), đoạn chương sau thực việc gì? A For i := to length(S) div write(S[i]) B For i := length(S) downto write(S[i]) C For i := length(S) downto write(S) D For i := to length(S) write(S[i]) Trong ngôn ngữ lập trình Pascal, để xóa ký tự xâu ký tự S ta viết: A Delete(S, 1, 1); B Delete(S, i, 1); { i biến có giá trị } C Delete(S, length(S), 1); D Delete(S, 1, i); { i biến có giá trị } Trong ngơn ngữ lập trình Pascal, đoạn chương trình sau thực cơng việc gì? d := ; For i := to length(S) if S[i] = ‘ ’ then d := d + ; A Xóa dấu cách xâu; B Đếm số dấu cách có xâu; C Xóa ký tự số; D Đếm số ký tự có xâu; Cho đoạn chương trình sau: s1 := ‘123’; s2 := ‘abc’; insert (s2 , s1 , 1); write(s1); Kết in hình là: A ‘123abc’ B ‘abc’ C ‘123’  D ‘abc123’ Cho đoạn chương trình sau: s := ‘ABCDEF’; delete(s, 3, 2); insert(‘XYZ’, s, 4); write(s); Kết in hình là: A ‘ABXYZEF’ B ‘ABEXYZF’  C ‘AXYZ’  D ‘AXYZBEF’ Cho đoạn chương trình sau: s := ‘1001010’; write(pos(‘011’, s)); Kết in hình là: A B ‘0’ Cho đoạn chương trình sau: s := ‘Mua xuan’; write(upcase(s[length(s)-1])); Kết in hình là: A ‘X’ B ‘U’ C  D ‘3’ C ‘A’  D ‘N’ Cho đoạn chương trình sau: s1 := ‘abc’; s2 := ‘1234’; if length(s1) > length(s2) then writeln(s1) else writeln(s2); Kết in hình là: A ‘1234’ B ‘abc’  C ‘1234abc’ 10 Cho đoạn chương trình sau: s:= ‘edcba’; For i:= length(s) downto write(s[i]); Kết in hình là: A ‘abcd’ B ‘dcba’  C ‘abcde’  D ‘abc1234’  D ‘edcba’ D VẬN DỤNG CAO Trong ngơn ngữ lập trình Pascal, đoạn chương trình thực công việc công việc sau: i := pos(‘ ’, S); { ‘ ’ dấu cách } while i Begin Delete(S, i, 1) ; i := pos(‘ ’, S) ; End; A Xóa dấu cách xâu S để S khơng cịn dấu cách liền nhau; B Xóa dấu cách liền cuối xâu; C Xóa dấu cách liền xâu; D Xóa dấu cách xâu; Trong ngơn ngữ lập trình Pascal, đoạn chương trình sau thực cơng việc gì? S1 := ‘anh’ ; S2 := ‘em’ ; i := pos(S2, S) ; While i Begin Delete(S, i, 2) ; Insert(S1, S, i) ; i := pos(S2, S) ; End ; A Thay toàn cụm từ ‘em’ xâu S cụm từ ‘anh’ ; B Thay toàn cụm từ ‘anh’ xâu S cụm từ ‘em’ ; C Thay cụm từ ‘em’ xâu S cụm từ ‘anh’ ; D Thay cụm từ ‘anh’ xâu S cụm từ ‘em’ ; Trong ngơn ngữ lập trình Pascal, đoạn chương trình sau làm cơng việc gì: i := pos(‘ ’, X) ; while i 0 Begin Delete(X, i, 1) ; i := pos(‘ ’, X) ; End; A Xóa tất dấu cách phía bên phải xâu X ; B Xóa tất dấu cách phía bên trái xâu X ; C Xóa tất dấu cách xâu X ; D Xóa tất dấu cách hai đầu xâu X ; Trong ngơn ngữ lập trình Pascal, sau thực xong đoạn chương trình sau, biến Found có giá trị gì? (S biến xâu ký tự) Found := ; x := length(S) ; For i := to x Div If S[i] S[x – i + 1] then Found := ; A Found S xâu đối xứng; B Found S xâu không đối xứng; C Found khơng có giá trị gì; D Found S xâu đối xứng; Trong ngôn ngữ lập trình Pascal, đoạn chương trình sau thực việc gì? If (ch >= ‘A’) and (ch = string [tên biến xâu] ; B Var = string [độ dài lớn xâu] ; C Var : string [độ dài lớn xâu] ; D Var < độ dài lớn xâu > : string [tên biến xâu] ; Câu 8: Cho đoạn chương trình sau: write(‘abc’+‘123456’); Kết in hình là: A ‘123456abc’ B ‘abc123456’ C ‘123456’ D ‘abc’ Câu 9: Trong phát biểu sau, phát biểu sai? A Xâu A lớn xâu B kí tự dầu tiên khác chúng kể tử trái sang xâu A có mã ASCII lớn B Hai xâu chúng giống hoàn toàn C Nếu A B xâu có độ dài khác A đoạn đầu B A nhỏ B D Xâu A nhỏ xâu B độ dài xâu A nhỏ độ dài xâu B Câu 10: Cho đoạn chương trình sau: s := ‘123456789’; delete (s, 1, 8); write(s); Kết in hình là:  A ‘6789’  B ‘789’  C ‘9’  D ‘’ Câu 11: Cho đoạn chương trình sau: s1 := ‘123’; s2 := ‘abcd’; insert (s1, s2 ,3); write(s2); Kết in hình là:  A ‘ab123cd’  B ‘123abcd’  C ‘a123bcd’  D ‘abc123d’ Câu 12: Cho đoạn chương trình sau: s1 := ‘123456789’; s2 := copy(s1, 3, 5); write(s2); Kết in hình là:  A ‘567’  B 567  C 34567  D ‘34567’ Câu 13: Cho đoạn chương trình sau: s := ‘200 ki tu’; write(length(s)); Kết in hình là:  A 200  B  C ‘9’  D ‘200’ Câu 14: Cho đoạn chương trình sau: s1 := ‘1010’; s2 := ‘1001010’; write(pos(s1, s2)); Kết in hình là:  A  B ‘0’  C  D ‘4’ Câu 15: Cho đoạn chương trình sau: s := 'Mua Thu'; write(upcase(s[5])); Kết in hình là:  A ‘M’  B ‘U’  C ‘A’  D ‘T’ II TỰ LUẬN Viết chương trình nhập vào xâu S.Yêu cầu in kí tự đầu kí tự cuối xâu Nhập từ bàn phím xâu kí tự S Thơng báo có loại kí tự chữ ‘a’ ’z’ , ‘A’ ’Z’ chứa xâu S số lượng loại ĐÁP ÁN I TRẮC NGHIỆM – B; – C; – C; – A; – B; – A; – C; – B; – D; 10 – C; 11 – A; 12 – D; 13 – B; 14 – C; 15 – D II TỰ LUẬN Đáp án tham khảo Uses crt; Var S: String; x:integer; Begin Clrscr; Write (‘nhap xau S: ‘); readln(S); Writeln(‘Ki tu dau: ‘,S[1]); x:= length(s); Writeln(‘Ki tu cuoi: ‘,S[x]); Readln End Đáp án tham khảo: Uses Crt; Var D : Array['0' 'z'] of Integer; tong_tu,demtu : Integer; Procedure Doc_Dem; Const Fi = 'demkitu.txt'; Var F : Text; S,tu : String; i,k,t : Byte; j: Char; Begin Demtu := 0; Write('Nhap tu can dem : '); tunhap : String; tt : Boolean; Readln(tunhap); Writeln('File da cho la : '); FillChar(D,Sizeof(D),0); Assign(F,Fi); {$I-} Reset(F); {$I+} If IoResult0 then Begin Writeln('Loi File '); Readln; Halt; End; While not SeekEof(F) Begin Readln(F,S); Writeln(S); { Dem tung ki tu } For i:=1 to length(S) For j:='0' to 'z' If (S[i]= j) then Inc(D[j]); { Dem tu } S :=' '+S; For i:=1 to length(S)-1 If (S[i]=' ') and (S[i+1]' ') then Begin Inc(tong_tu); { Dem tu da nhap } k := i+1; t := 1; tt := True; While (tLength(tunhap) then Inc(demtu); End; End; Close(F); End; Procedure Hien_so_luong_ki_tu; Var i : Char; Begin For i:='0' to 'z' If (i in ['0' '9']) or (i in ['A' 'Z']) or (i in ['a' 'z']) then If (D[i]>0) then Write(i:2,' :',D[i]:2,' '); End; BEGIN Clrscr; Doc_Dem; Writeln('Ket qua '); Hien_so_luong_ki_tu; Writeln; Writeln('Tong so tu la : ',tong_tu); Writeln('So tu " ',tunhap,'" File la : ',demtu); Readln; END ... đổi kí tự thành ký tự in hoa, đổi xâu kí tự? xử lý vấn đề nào? HS: đưa cách xử lý Giáo viên: Chúng ta biết coi xâu mảng chiều mà phần tử kí tự Mỗi kí tự xâu đánh số thứ tự thường 1, số kí tự xâu. .. niệm: Xâu dãy kí tự thuộc bảng mã ASCII, kí tự gọi phần tử xâu Số lượng kí tự xâu gọi độ dài xâu Xâu có độ dài gọi xâu rỗng Trong Turbo Pascal xâu rỗng viết hai dấu nháy đơn liền ‘và’ VD: cho xâu. .. Yen Dung so 1’, xâu S có số kí tự 18 =>độ dài xâu s 18 - Có thể xem xâu mảng chiều mà phần tử kí tự Các kí tự xâu đánh số thứ tự thường - Tham chiếu đến phần tử xâu: [chỉ số phần

Ngày đăng: 19/04/2021, 04:07

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w