Bài 12. Kiểu xâu
Chia sẻ bởi Phạm Vân Thái |
Ngày 10/05/2019 |
61
Chia sẻ tài liệu: Bài 12. Kiểu xâu thuộc Tin học 11
Nội dung tài liệu:
Bài : Kiểu xâu (Chuỗi)
Tiết 28 , 29 ppct
GV Ph.Th – Bmt – 1/2/2010
Bài : Kiểu xâu (Chuỗi)
Tiết 28 , 29 ppct
Chuẩn bị học :
1/ mỗi người 1 giấy nháp (có ghi tên mình) để nháp câu trả lời cho BT khi cần
2/ mỗi nhóm 1 tờ giấy làm bài của nhóm (để làm các BT có yêu cầu làm theo nhóm) và sẽ nộp lại khi cần thiết hoặc vào cuối buổi học để chấm điểm cho cả nhóm. Ghi tên nhóm & tên các hs trong nhóm ở trên đầu tờ giấy.
+ mỗi bàn là 1 nhóm, ký hiệu tên nhóm là : bàn 1-trái, bàn 2-trái,…, bàn 1-phải, bàn 2- phải …. (theo hướng nhìn lên bảng). Khi làm bài theo nhóm hs được phép trao đổi để thống nhất câu trả lời cho nhóm mình.
( * 1 vài ví dụ viết câu trả lời trên nháp :
AD3 : 15 AD4 : hoc sinh … )
Nhắc lại về ký tự
? Trình bày những hiểu biết của em về kiểu ký tự ?
+ tên kiểu
+ kích thước bộ nhớ của 1 biến kiểu ký tự
+ Phạm vi các giá trị
+ so sánh 2 ký tự
+ hàm về ký tự
((trả lời theo hs) Ghi bảng các ndung hs pbiểu)
Nhắc lại về ký tự -1
Ký tự là các chữ - ký hiệu có trong bảng mã ASCII
(có 256 ký tự có mã từ 0 đến 255)
+Tên kiểu Char chiếm 1B bộ nhớ
VD Var a,b,x ; char ;
+Viết hằng ký tự trong nháy đơn VD : ‘G’ , ‘k’ , ‘K’
+Các hàm về ký tự : upcase(Ch) đổi thành chữ in hoa
VD upcase(‘k’) cho kết quả là ‘K’
AD 1 a:=‘m’; b:=‘K’;a:=upcase(a); b:=upcase(b);
writeln( a , ’ va ‘, b );
kết quả ? (trả lời theo hs)
M va K
Nhắc lại về ký tự - 2
+Các phép toán :
+ So sánh 2 ký tự (so sánh theo giá trị mã ASCII, gần giống thứ tự trong bảng chữ cái)
VD : giá trị thập phân mã ASCII của ‘A’ là 65 ,‘B’ là 66,‘C’ là 67…, ‘a’ là 97, ’b’ là 98, ‘c’ là 99…
‘A’ < ‘a’ , ‘A’ < ‘C’
AD 2 : 1/ a:=‘m’; b:=‘p’ ; t:= a>b ; Writeln(t);
cho kết quả là ?
2/ a:=‘M’; b:=‘p’ ; t:= a>b ; Writeln(t);
cho kết quả là ?
(trả lời theo hs)
1/ false 2/ false
Bài mới : Kiểu xâu (Chuỗi)
Đặt vấn đề : Dùng biến kiểu gì để
Lưu trữ tên học sinh ? Vd : tên Nam
Lưu trữ kết quả xếp loại ? Vd : Kha, Gioi, TBinh ..
Lưu trữ 1 câu văn , 1 nhận xét ?
Vd : Ket qua hoc tap la rat tot
Nhận xét :
-Đây là loại dữ liệu gồm các ký tự ghép lại (gọi là xâu hay chuỗi ký tự), loại dữ liệu này chưa có trong các kiểu dữ liệu chuẩn.
-NNLT cho phép ta khai báo kiểu dữ liệu mới (gọi là kiểu xâu) để lưu trữ các dữ liệu nói trên. Ta quan tâm tới : tên kiểu xâu, độ dài xâu, khai báo biến xâu, phép toán trên kiểu xâu, cách tham chiếu tới phần tử của xâu …
? Em hãy thử phát biểu về khái niệm xâu (chuỗi) và những hiểu biết của em về kiểu xâu. ((trả lời theo hs) Ghi bảng các ndung hs pbiểu)
K/n Kiểu xâu (Chuỗi) 1
Khái niệm : Xâu gồm nhiều ký tự ASCII ghép lại, số ký tự trong xâu gọi là độ dài xâu. Xâu có độ dài 0 gọi là xâu rỗng.
VD : ‘hoc sinh’ , ‘lop 11’ , ‘’ (xâu rỗng)
(Hằng xâu được viết trong cặp nháy đơn)
Khai báo kiểu xâu : thường ở dạng vắn tắt ghép trong khai báo biến
Var s : string [ n ] ; n là số nguyên dương <=255,
n là số ký tự tối đa cho phép lưu vào s.
Hoặc Var s : string ; số ký tự tối đa cho phép là 255.
VD : Biến chứa tên 1 người : var s : string [8] ;
Biến chứa họ và tên 1 người : var s1 : string [45] ;
Biến chứa 1 câu văn : var s3 : string ;
S chứa tối đa 8 ký tự và nó chiếm 8+1=9B bộ nhớ
S1 chứa tối đa 45 ký tự và nó chiếm 48+1=49B bộ nhớ
S3 có thể chứa tới 255 ký tự, nó chiếm 255+1=256B bộ nhớ
(byte đầu tiên lưu độ dài xâu, các byte sau lưu các kýtự trong xâu..)
K/n Kiểu xâu (Chuỗi) 2
+ Hàm length(s) cho độ dài hiện tại của xâu (số ký tự hiện có trong xâu)
VD : length(‘hoc sinh’) là 8
AD 3 : s:=‘hoc sinh lop 11A2’; Write(length(s));
s:=‘toi di hoc’; Write(length(s));
cho kết quả là ? (trả lời theo từng hs)
17 và 10
+ Nhập xuất với biến kiểu xâu thực hiện bình thường
VD : var s1,s2 : string;
begin write(‘nhap s1=‘);readln(s1);
write(‘nhap s2=‘);readln(s2);
writeln(‘ket qua =‘ , s1 , s2 );
readln;
end.
Khi chạy CT ta nhập vào s1 là hoc sinh s2 là truong trung hoc
ta sẽ có ket qua = hoc sinh truong trung hoc
(Chú ý : nhập chuỗi không có dấu nháy đơn như hằng chuỗi )
Phép toán trên Kiểu xâu (Chuỗi)
? Em hãy phát biểu những phép toán trên kiểu xâu mà em biết.
(trả lời theo từng hs), ghi lại vắn tắt pb lên bảng
Phép toán trên Kiểu xâu (Chuỗi)-1
+ Phép + ghép 2 xâu theo thứ tự
VD ‘hoc’ + ‘tap’ cho kết quả là ‘hoctap’
‘tap’+’hoc’ cho kết quả là ‘taphoc’
AD 4 a:=‘hoc’ ; b:=‘truong’; c:=a+b; d:=b+a; d:=a+d ;
writeln(c) ; writeln(d);
Cho kết quả ? (trả lời theo nhóm)
hoctruong và hoctruonghoc
Phép toán trên Kiểu xâu (Chuỗi)-2
+Phép So sánh 2 xâu : > , < , >= ,<= , = , <>
thực hiện so sánh theo từng ký tự từ trái sang phải (từ ký tự đầu đến cuối) so sánh từng cặp ký tự (dựa vào mã ASCII) cho đến khi có sự khác nhau thì kết quả đó là kết quả so sánh 2 xâu,
Nếu không có ký tự khác nhau mà 1 xâu hết trước thì xâu ngắn hơn đó là xâu nhỏ hơn .
Nếu xét đến hết cả 2 xâu mà vẫn không có sự khác nhau thì 2 xâu bằng nhau (2 xâu y hệt như nhau).
VD : ‘nga’ < ’nhan’ , ‘hoc’ < ‘hoc sinh’ , ‘nam’ > ‘binh’ , ‘an’ > ‘An’
‘hoc sinh’ = ‘hoc sinh’ , ‘truonghoc’ <> ‘hoc sinh’
AD 5 1/ a:=‘nam’; b:=‘nhat’; c:=‘nhatruong’;write(a>b);write(b 2/ a:=‘hoc’; b:=‘sinh’; c:=‘hoc sinh’ ; write(a+b = c);Kết quả? (trả lời nhóm)
1/ false true và 2/ false
Btập 1 - Kiểu xâu (Chuỗi) – 1
BT1: khai báo 1 biến lưu trữ tên 1 học sinh ?
a/ Var a: string ;
b/ Var a: string [40] ;
c/ Var a: char ;
Câu nào đúng ? (trả lời theo nhóm)
a/ và b/ đúng , b/ là hợp lý hơn
BT2: đoạn CT sau :
a:=‘hoc sinh’;
b :=‘truong’ ; c:= ‘trung hoc’ ;
c:= b + c ; c:= c + a ;
writeln ( c );
Cho kết quả gi ? (trả lời theo nhóm)
truongtrung hochoc sinh
Btập 1- Kiểu xâu (Chuỗi) -2
BT3: m:= ‘truong’ < ‘truong trung hoc’ ;
n := ‘anh’ < ‘bac’ ;
p := ‘hoa’ > ‘Hong’ ;
q := ‘nha’ = ‘NHA’ ;
a/ m , n , p , q đều có giá trị TRUE
b/ m , n đều có giá trị TRUE
c/ q có giá trị FALSE
d/ m , n , p đều có giá trị TRUE
Kết quả nào đúng ? (trả lời theo nhóm)
b/ c/ d/
BT4: var a ,b ,c : string;
begin write(‘nhap xau a=’);readln(a);
write(‘nhap xau b=’); readln(b);
c:=‘’ ; c:= c + a;writeln (a>b);Writeln (a=c);Readln;
end.
Cho Kết quả gì khi nhập vào a là nam anh và b là nhat linh? (trả lời theo nhóm)
false và true
Xử lý với Kiểu xâu (Chuỗi) - 1
1. Xem Xâu là mảng 1 chiều với phần tử là các ký tự.
với s là biến kiểu xâu, ta có s[1] là ký tự thứ nhất, s[2] là ký tự thứ 2…
VD : s:=‘hoc tap’; khi đó s[1] là ‘h’ , s[2] là ‘o’ , s[3] là ‘c’ , ..
Hình ảnh xâu s
Length(s) là 7
AD 6 : a:=‘truong hoc’; b:=‘’ ;
1/ writeln(length(a)); 2/ Writeln(a);3/ for i:=1 to 6 do write(a[i]);
4/ For i:=1 to length(a) do write(a[i]);
5/ For i:=8 to length(a) do b:=b+ a[i];
writeln(b);
6/ a:=‘Ong toi di hop som’;dem:=0;
for i:=1 to length(a) do if a[i]=‘o’ then dem:=dem+1;
writeln(dem:4);
Hỏi kết quả khi thực hiện các lệnh ? (trả lời theo nhóm)
1/ 10 2/ truong hoc 3/ truong
4/ truong hoc 5/ hoc 6/ 3
Xử lý trên xâu (Chuỗi) – 2a
? Em hãy phát biểu về các hàm , thủ tục xử lý trên xâu mà em biết.
(trả lời theo từng hs), ghi lại vắn tắt lên bảng
Xử lý trên xâu (Chuỗi) – 2b
2. Các hàm , thủ tục xử lý xâu.
1/ hàm đổi ký tự thành chữ in hoa UPCASE(Ch)
2/ hàm cho độ dài xâu LENGTH(s)
3/ hàm cho vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2
POS(s1,s2)
4/ hàm tạo xâu con gồm n ký tự liên tiếp bắt đầu từ vị trí m của xâu S COPY(s,m,n)
5/ Thủ tục xóa n ký tự của xâu S bắt đầu từ vị trí m
DELETE(s,m,n)
6/ Thủ tục chèn xâu s1 vào xâu s2 bắt đầu ở vị trí m
INSERT(s1,s2,m)
Các VD : Hỏi kết quả khi thực hiện ? (trả lời theo nhóm)
AD 7 : a:=‘hoc o truong hoc’ ; b:=‘hoc’ ; c:=‘nha’ ; t:=pos(c,a); Writeln(pos(b,a)); writeln(t); 1 và 0
AD 8 : a:=‘hoc o truong hoc’ ; b:=copy(a,5,8); writeln(b);
c:=‘nha’ ; delete(a,14,3);insert(c,a,7); writeln(a);
o truong hoc o nhatruong Xem minh họa
Mhọa Xử lý trên xâu (Chuỗi) – 2c
VD2 : a:=‘hoc o truong hoc’ ; b:=copy(a,5,8); writeln(b);
c:=‘nha’ ; delete(a,14,3);insert(c,a,7); writeln(a);
(trả lời theo hs)
o truong
hoc o nhatruong
Đề BT-AD Xử lý trên xâu (Chuỗi)
Các Đề BT- AD:
1/ viết CT đảo ngược 1 chuỗi .
2/ viết CT đổi 1 chuỗi thành toàn chữ in hoa .
3/ viết CT loại bỏ các dấu cách ở đầu và cuối 1 xâu.
4/ viết CT đếm số lần xuất hiện của xâu cần tìm trong 1 xâu cho trước .
5*/ viết CT đếm số lần xuất hiện của từ cần tìm trong 1 câu cho trước .
Vd : câu cho là : toi di hoc rat kho nhoc o truong trung hoc .
Từ cần tìm là : hoc kết quả là 2
6*/ viết CT thay thế 1 từ cần tìm bằng 1 từ mới trong 1 câu cho trước .
(Trả lời theo nhóm), mỗi nhóm tự chọn viết lời giải 1 bài trong các bài từ 1 đến 4, các bài 5,6 nhóm nào viết được càng tốt –
5 phút viết lời giải !!
Giải BT-AD Kiểu xâu (Chuỗi)
1/ viết CT đảo ngược 1 chuỗi .
Hướng giải : Lời giải mẫu
2/ viết CT đổi 1 chuỗi thành toàn chữ in hoa .
Hướng giải : Lời giải mẫu :
3/ viết CT loại bỏ các dấu cách ở đầu và cuối 1 xâu.
Hướng giải : Lời giải mẫu :
4/ viết CT đếm số lần xuất hiện của xâu cần tìm trong 1 xâu cho trước
Vd : câu cho là : toi di hoc o truong trung hoc , di rat met nhoc
Xâu cần tìm là : hoc kết quả là 3
Hướng giải : Lời giải mẫu :
6*/ viết CT thay thế 1 từ cần tìm bằng 1 từ mới trong 1 câu cho trước . Hướng giải : Lời giải mẫu :
5*/ viết CT đếm số lần xuất hiện của từ cần tìm trong 1 câu cho trước . Hướng giải : Lời giải mẫu :
Chạy Magnifer
Tóm tắt về Kiểu xâu (Chuỗi)
? Em hãy nêu tóm tắt những nội dung đã học.
(trả lời theo từng hs, nhóm)
Tóm tắt về Kiểu xâu (Chuỗi)
Khái niệm : nhiều ký tự gộp lại tạo thành xâu. VD : ‘hoc sinh’ , ‘lop 11’ , ‘’
Khai báo biến : Var s : string [ n ] ;
hoặc Var s : string ;
Các phép toán :
1. Phép + ghép 2 xâu theo thứ tự
2. Phép So sánh > , < , >= ,<= , = , <>
Các cách xử lý trên xâu :
1. Xâu được xem như là mảng 1 chiều với các phần tử là ký tự.
2. Sử dụng Các hàm , thủ tục xử lý xâu.
1/ UPCASE(Ch) 2/ LENGTH(s) 3/ POS(s1,s2)
4/ COPY(s,m,n)
5/ DELETE(s,m,n) 6/ INSERT(s1,s2,m)
Dặn dò – chuẩn bị ở nhà :
1/ làm các bài tập còn lại
2/ bài tập thêm BT-AD:
7/ tìm những chữ cái (không phân biệt chữ thường , chữ in hoa) có mặt trong cả 2 xâu.
8/ trong n tên học sinh (n <30), hãy tim những tên có chứa xâu x. Viết ra những tên tìm được.
9/ viết CT nhập họ , tên , điểmtb của n học sinh (n<=30), sau đó viết ra danh sách gồm 2 cột hoten diemtb theo thứ tự tăng dần của tên (hay gọi là thứ tự Alphabet).
10/ viết CT nhập họtên , điểm các môn của n học sinh (n<=30, số môn học <=15), sau đó viết ra danh sách dạng họtên tbhk xloai (tính tbhk và xếp loại giống các bài tập trước đây), cuối cùng viết tỷ lệ % học sinh khá giỏi .
3/ chuẩn bị xem và viết lời giải trước cho các bài tập ở Bài Thực hành 5 , SGK .
** Các nhóm nộp lại bài làm chung của nhóm.
(Gồm có : 5 AD (48) + 4 BT và >=1 BT-AD)
Dặn dò
Kết thúc bài
LG1-Kiểu xâu (Chuỗi)
1/ viết CT đảo ngược 1 chuỗi .
Hướng giải :
Lời giải mẫu :
Var s,s1:string;i:byte;
Begin
write(‘nhap chuoi s= ‘);readln(s);
S1:=‘’;
For i:= length(s) downto 1 do s1:=s1+s[i] ;
writeln(‘chuoi dao nguoc la :’, s1);
readln;
End.
Trở về slide đề bài
Thử trong Pascal
LG2-Kiểu xâu (Chuỗi)
2/ viết CT đổi 1 chuỗi thành toàn chữ in hoa .
Hướng giải :
Lời giải mẫu :
Var s:string; i:byte;
Begin
write(‘nhap chuoi s= ‘);readln(s);
For i:=1 to length(s) do s[i] := upcase ( s[i] ) ;
writeln(‘kq =‘ , s );
readln;
End.
Trở về slide đề bài
Thử trong Pascal
LG3-Kiểu xâu (Chuỗi)
3/ viết CT loại bỏ các dấu cách ở đầu và cuối 1 xâu.
Hướng giải :
Lời giải mẫu :
Var s:string;
Begin
write(‘nhap chuoi s= ‘);readln(s);
while (s[1] =‘ ‘)and(length(s)>0) do delete (s,1,1);
while (s[length(s)] =‘ ‘)and(length(s)>0) do delete (s,length(s),1);
Writeln( ‘ kq = ‘ , s );
Readln;
End.
Trở về slide đề bài
Thử trong Pascal
LG4-Kiểu xâu (Chuỗi)
4/ viết CT đếm số lần xuất hiện của xâu cần tìm trong 1 xâu cho trước
Vd : câu cho là : toi di hoc o truong trung hoc , di duong rat met nhoc
Xâu cần tìm là : hoc kết quả là 3
Lời giải mẫu :
Var s,a :string; vt,d,dem:byte;
Begin
write(‘nhap xau s= ‘);readln(s);
write(‘nhap xau can tim a= ‘);readln(a);
d:=length(a); Dem:=0;
While pos(a,s)>0 do
begin
vt:=pos(a,s) ; dem:=dem+1;
s:=copy(s,vt+d,255);
end;
writeln(‘so lan =‘ , dem );
readln;
end.
Trở về slide đề bài
Thử trong Pascal
LG5-Kiểu xâu (Chuỗi)
5*/ viết CT đếm số lần xuất hiện của từ cần tìm a trong 1 câu s cho trước .
Hướng giải : Lời giải mẫu :
Var s,a :string; vt,d,dem:byte;
Begin
write(‘nhap chuoi s= ‘);readln(s);
write(‘nhap tu can tim a= ‘);readln(a);
d:=length(a); Dem:=0;
While pos(a,s)>0 do
begin
vt:=pos(a,s) ;
if (vt-1=0) and (vt+d-1=length(s)) then dem:=dem+1 ;
if (vt-1=0) and (vt+d-1 if (vt-1>0) and (s[vt-1]=‘ ‘) and (vt+d-1=length(s)) then dem:=dem+1 ;
if (vt-1>0) and (s[vt-1]=‘ ‘) and (vt+d-1 delete(s,vt ,d );
end;
writeln(‘so lan =‘ , dem ); readln;
end.
Trở về slide đề bài
Thử trong Pascal
LG6-Kiểu xâu (Chuỗi)
6*/ viết CT thay thế 1 từ cần tìm bằng 1 từ mới trong 1 câu cho trước .
Hướng giải : Lời giải mẫu :
Var s,a :string; vt,d,dem:byte;
Begin
write(‘nhap chuoi s= ‘);readln(s);
write(‘nhap tu can tim a= ‘);readln(a);
write(‘nhap tu thay the b= ‘);readln(b);
d:=length(a); dem:=0;
While pos(a,s)>0 do
begin
vt:=pos(a,s) ;
if ( (vt-1=0) and (vt+d-1=length(s)) ) or ( (vt-1=0) and (vt+d-10) and (s[vt-1]=‘ ‘) and (vt+d-1=length(s)) ) or ( (vt-1>0) and (s[vt-1]=‘ ‘) and (vt+d-1 begin delete(s,vt ,d ) ; insert(b,s,vt); dem:=dem+1 ;
end;
end;
writeln(‘so tu da thay the =‘ , dem );
writeln(‘chuoi kq=‘ , s); readln;
end.
Trở về slide đề bài
Thử trong Pascal
Kthúc Bài : Kiểu xâu (Chuỗi)
Cám ơn đã theo dõi bài
Bài học kết thúc
Tiết 28 , 29 ppct
GV Ph.Th – Bmt – 1/2/2010
Tiết 28 , 29 ppct
GV Ph.Th – Bmt – 1/2/2010
Bài : Kiểu xâu (Chuỗi)
Tiết 28 , 29 ppct
Chuẩn bị học :
1/ mỗi người 1 giấy nháp (có ghi tên mình) để nháp câu trả lời cho BT khi cần
2/ mỗi nhóm 1 tờ giấy làm bài của nhóm (để làm các BT có yêu cầu làm theo nhóm) và sẽ nộp lại khi cần thiết hoặc vào cuối buổi học để chấm điểm cho cả nhóm. Ghi tên nhóm & tên các hs trong nhóm ở trên đầu tờ giấy.
+ mỗi bàn là 1 nhóm, ký hiệu tên nhóm là : bàn 1-trái, bàn 2-trái,…, bàn 1-phải, bàn 2- phải …. (theo hướng nhìn lên bảng). Khi làm bài theo nhóm hs được phép trao đổi để thống nhất câu trả lời cho nhóm mình.
( * 1 vài ví dụ viết câu trả lời trên nháp :
AD3 : 15 AD4 : hoc sinh … )
Nhắc lại về ký tự
? Trình bày những hiểu biết của em về kiểu ký tự ?
+ tên kiểu
+ kích thước bộ nhớ của 1 biến kiểu ký tự
+ Phạm vi các giá trị
+ so sánh 2 ký tự
+ hàm về ký tự
((trả lời theo hs) Ghi bảng các ndung hs pbiểu)
Nhắc lại về ký tự -1
Ký tự là các chữ - ký hiệu có trong bảng mã ASCII
(có 256 ký tự có mã từ 0 đến 255)
+Tên kiểu Char chiếm 1B bộ nhớ
VD Var a,b,x ; char ;
+Viết hằng ký tự trong nháy đơn VD : ‘G’ , ‘k’ , ‘K’
+Các hàm về ký tự : upcase(Ch) đổi thành chữ in hoa
VD upcase(‘k’) cho kết quả là ‘K’
AD 1 a:=‘m’; b:=‘K’;a:=upcase(a); b:=upcase(b);
writeln( a , ’ va ‘, b );
kết quả ? (trả lời theo hs)
M va K
Nhắc lại về ký tự - 2
+Các phép toán :
+ So sánh 2 ký tự (so sánh theo giá trị mã ASCII, gần giống thứ tự trong bảng chữ cái)
VD : giá trị thập phân mã ASCII của ‘A’ là 65 ,‘B’ là 66,‘C’ là 67…, ‘a’ là 97, ’b’ là 98, ‘c’ là 99…
‘A’ < ‘a’ , ‘A’ < ‘C’
AD 2 : 1/ a:=‘m’; b:=‘p’ ; t:= a>b ; Writeln(t);
cho kết quả là ?
2/ a:=‘M’; b:=‘p’ ; t:= a>b ; Writeln(t);
cho kết quả là ?
(trả lời theo hs)
1/ false 2/ false
Bài mới : Kiểu xâu (Chuỗi)
Đặt vấn đề : Dùng biến kiểu gì để
Lưu trữ tên học sinh ? Vd : tên Nam
Lưu trữ kết quả xếp loại ? Vd : Kha, Gioi, TBinh ..
Lưu trữ 1 câu văn , 1 nhận xét ?
Vd : Ket qua hoc tap la rat tot
Nhận xét :
-Đây là loại dữ liệu gồm các ký tự ghép lại (gọi là xâu hay chuỗi ký tự), loại dữ liệu này chưa có trong các kiểu dữ liệu chuẩn.
-NNLT cho phép ta khai báo kiểu dữ liệu mới (gọi là kiểu xâu) để lưu trữ các dữ liệu nói trên. Ta quan tâm tới : tên kiểu xâu, độ dài xâu, khai báo biến xâu, phép toán trên kiểu xâu, cách tham chiếu tới phần tử của xâu …
? Em hãy thử phát biểu về khái niệm xâu (chuỗi) và những hiểu biết của em về kiểu xâu. ((trả lời theo hs) Ghi bảng các ndung hs pbiểu)
K/n Kiểu xâu (Chuỗi) 1
Khái niệm : Xâu gồm nhiều ký tự ASCII ghép lại, số ký tự trong xâu gọi là độ dài xâu. Xâu có độ dài 0 gọi là xâu rỗng.
VD : ‘hoc sinh’ , ‘lop 11’ , ‘’ (xâu rỗng)
(Hằng xâu được viết trong cặp nháy đơn)
Khai báo kiểu xâu : thường ở dạng vắn tắt ghép trong khai báo biến
Var s : string [ n ] ; n là số nguyên dương <=255,
n là số ký tự tối đa cho phép lưu vào s.
Hoặc Var s : string ; số ký tự tối đa cho phép là 255.
VD : Biến chứa tên 1 người : var s : string [8] ;
Biến chứa họ và tên 1 người : var s1 : string [45] ;
Biến chứa 1 câu văn : var s3 : string ;
S chứa tối đa 8 ký tự và nó chiếm 8+1=9B bộ nhớ
S1 chứa tối đa 45 ký tự và nó chiếm 48+1=49B bộ nhớ
S3 có thể chứa tới 255 ký tự, nó chiếm 255+1=256B bộ nhớ
(byte đầu tiên lưu độ dài xâu, các byte sau lưu các kýtự trong xâu..)
K/n Kiểu xâu (Chuỗi) 2
+ Hàm length(s) cho độ dài hiện tại của xâu (số ký tự hiện có trong xâu)
VD : length(‘hoc sinh’) là 8
AD 3 : s:=‘hoc sinh lop 11A2’; Write(length(s));
s:=‘toi di hoc’; Write(length(s));
cho kết quả là ? (trả lời theo từng hs)
17 và 10
+ Nhập xuất với biến kiểu xâu thực hiện bình thường
VD : var s1,s2 : string;
begin write(‘nhap s1=‘);readln(s1);
write(‘nhap s2=‘);readln(s2);
writeln(‘ket qua =‘ , s1 , s2 );
readln;
end.
Khi chạy CT ta nhập vào s1 là hoc sinh s2 là truong trung hoc
ta sẽ có ket qua = hoc sinh truong trung hoc
(Chú ý : nhập chuỗi không có dấu nháy đơn như hằng chuỗi )
Phép toán trên Kiểu xâu (Chuỗi)
? Em hãy phát biểu những phép toán trên kiểu xâu mà em biết.
(trả lời theo từng hs), ghi lại vắn tắt pb lên bảng
Phép toán trên Kiểu xâu (Chuỗi)-1
+ Phép + ghép 2 xâu theo thứ tự
VD ‘hoc’ + ‘tap’ cho kết quả là ‘hoctap’
‘tap’+’hoc’ cho kết quả là ‘taphoc’
AD 4 a:=‘hoc’ ; b:=‘truong’; c:=a+b; d:=b+a; d:=a+d ;
writeln(c) ; writeln(d);
Cho kết quả ? (trả lời theo nhóm)
hoctruong và hoctruonghoc
Phép toán trên Kiểu xâu (Chuỗi)-2
+Phép So sánh 2 xâu : > , < , >= ,<= , = , <>
thực hiện so sánh theo từng ký tự từ trái sang phải (từ ký tự đầu đến cuối) so sánh từng cặp ký tự (dựa vào mã ASCII) cho đến khi có sự khác nhau thì kết quả đó là kết quả so sánh 2 xâu,
Nếu không có ký tự khác nhau mà 1 xâu hết trước thì xâu ngắn hơn đó là xâu nhỏ hơn .
Nếu xét đến hết cả 2 xâu mà vẫn không có sự khác nhau thì 2 xâu bằng nhau (2 xâu y hệt như nhau).
VD : ‘nga’ < ’nhan’ , ‘hoc’ < ‘hoc sinh’ , ‘nam’ > ‘binh’ , ‘an’ > ‘An’
‘hoc sinh’ = ‘hoc sinh’ , ‘truonghoc’ <> ‘hoc sinh’
AD 5 1/ a:=‘nam’; b:=‘nhat’; c:=‘nhatruong’;write(a>b);write(b
1/ false true và 2/ false
Btập 1 - Kiểu xâu (Chuỗi) – 1
BT1: khai báo 1 biến lưu trữ tên 1 học sinh ?
a/ Var a: string ;
b/ Var a: string [40] ;
c/ Var a: char ;
Câu nào đúng ? (trả lời theo nhóm)
a/ và b/ đúng , b/ là hợp lý hơn
BT2: đoạn CT sau :
a:=‘hoc sinh’;
b :=‘truong’ ; c:= ‘trung hoc’ ;
c:= b + c ; c:= c + a ;
writeln ( c );
Cho kết quả gi ? (trả lời theo nhóm)
truongtrung hochoc sinh
Btập 1- Kiểu xâu (Chuỗi) -2
BT3: m:= ‘truong’ < ‘truong trung hoc’ ;
n := ‘anh’ < ‘bac’ ;
p := ‘hoa’ > ‘Hong’ ;
q := ‘nha’ = ‘NHA’ ;
a/ m , n , p , q đều có giá trị TRUE
b/ m , n đều có giá trị TRUE
c/ q có giá trị FALSE
d/ m , n , p đều có giá trị TRUE
Kết quả nào đúng ? (trả lời theo nhóm)
b/ c/ d/
BT4: var a ,b ,c : string;
begin write(‘nhap xau a=’);readln(a);
write(‘nhap xau b=’); readln(b);
c:=‘’ ; c:= c + a;writeln (a>b);Writeln (a=c);Readln;
end.
Cho Kết quả gì khi nhập vào a là nam anh và b là nhat linh? (trả lời theo nhóm)
false và true
Xử lý với Kiểu xâu (Chuỗi) - 1
1. Xem Xâu là mảng 1 chiều với phần tử là các ký tự.
với s là biến kiểu xâu, ta có s[1] là ký tự thứ nhất, s[2] là ký tự thứ 2…
VD : s:=‘hoc tap’; khi đó s[1] là ‘h’ , s[2] là ‘o’ , s[3] là ‘c’ , ..
Hình ảnh xâu s
Length(s) là 7
AD 6 : a:=‘truong hoc’; b:=‘’ ;
1/ writeln(length(a)); 2/ Writeln(a);3/ for i:=1 to 6 do write(a[i]);
4/ For i:=1 to length(a) do write(a[i]);
5/ For i:=8 to length(a) do b:=b+ a[i];
writeln(b);
6/ a:=‘Ong toi di hop som’;dem:=0;
for i:=1 to length(a) do if a[i]=‘o’ then dem:=dem+1;
writeln(dem:4);
Hỏi kết quả khi thực hiện các lệnh ? (trả lời theo nhóm)
1/ 10 2/ truong hoc 3/ truong
4/ truong hoc 5/ hoc 6/ 3
Xử lý trên xâu (Chuỗi) – 2a
? Em hãy phát biểu về các hàm , thủ tục xử lý trên xâu mà em biết.
(trả lời theo từng hs), ghi lại vắn tắt lên bảng
Xử lý trên xâu (Chuỗi) – 2b
2. Các hàm , thủ tục xử lý xâu.
1/ hàm đổi ký tự thành chữ in hoa UPCASE(Ch)
2/ hàm cho độ dài xâu LENGTH(s)
3/ hàm cho vị trí xuất hiện đầu tiên của xâu s1 trong xâu s2
POS(s1,s2)
4/ hàm tạo xâu con gồm n ký tự liên tiếp bắt đầu từ vị trí m của xâu S COPY(s,m,n)
5/ Thủ tục xóa n ký tự của xâu S bắt đầu từ vị trí m
DELETE(s,m,n)
6/ Thủ tục chèn xâu s1 vào xâu s2 bắt đầu ở vị trí m
INSERT(s1,s2,m)
Các VD : Hỏi kết quả khi thực hiện ? (trả lời theo nhóm)
AD 7 : a:=‘hoc o truong hoc’ ; b:=‘hoc’ ; c:=‘nha’ ; t:=pos(c,a); Writeln(pos(b,a)); writeln(t); 1 và 0
AD 8 : a:=‘hoc o truong hoc’ ; b:=copy(a,5,8); writeln(b);
c:=‘nha’ ; delete(a,14,3);insert(c,a,7); writeln(a);
o truong hoc o nhatruong Xem minh họa
Mhọa Xử lý trên xâu (Chuỗi) – 2c
VD2 : a:=‘hoc o truong hoc’ ; b:=copy(a,5,8); writeln(b);
c:=‘nha’ ; delete(a,14,3);insert(c,a,7); writeln(a);
(trả lời theo hs)
o truong
hoc o nhatruong
Đề BT-AD Xử lý trên xâu (Chuỗi)
Các Đề BT- AD:
1/ viết CT đảo ngược 1 chuỗi .
2/ viết CT đổi 1 chuỗi thành toàn chữ in hoa .
3/ viết CT loại bỏ các dấu cách ở đầu và cuối 1 xâu.
4/ viết CT đếm số lần xuất hiện của xâu cần tìm trong 1 xâu cho trước .
5*/ viết CT đếm số lần xuất hiện của từ cần tìm trong 1 câu cho trước .
Vd : câu cho là : toi di hoc rat kho nhoc o truong trung hoc .
Từ cần tìm là : hoc kết quả là 2
6*/ viết CT thay thế 1 từ cần tìm bằng 1 từ mới trong 1 câu cho trước .
(Trả lời theo nhóm), mỗi nhóm tự chọn viết lời giải 1 bài trong các bài từ 1 đến 4, các bài 5,6 nhóm nào viết được càng tốt –
5 phút viết lời giải !!
Giải BT-AD Kiểu xâu (Chuỗi)
1/ viết CT đảo ngược 1 chuỗi .
Hướng giải : Lời giải mẫu
2/ viết CT đổi 1 chuỗi thành toàn chữ in hoa .
Hướng giải : Lời giải mẫu :
3/ viết CT loại bỏ các dấu cách ở đầu và cuối 1 xâu.
Hướng giải : Lời giải mẫu :
4/ viết CT đếm số lần xuất hiện của xâu cần tìm trong 1 xâu cho trước
Vd : câu cho là : toi di hoc o truong trung hoc , di rat met nhoc
Xâu cần tìm là : hoc kết quả là 3
Hướng giải : Lời giải mẫu :
6*/ viết CT thay thế 1 từ cần tìm bằng 1 từ mới trong 1 câu cho trước . Hướng giải : Lời giải mẫu :
5*/ viết CT đếm số lần xuất hiện của từ cần tìm trong 1 câu cho trước . Hướng giải : Lời giải mẫu :
Chạy Magnifer
Tóm tắt về Kiểu xâu (Chuỗi)
? Em hãy nêu tóm tắt những nội dung đã học.
(trả lời theo từng hs, nhóm)
Tóm tắt về Kiểu xâu (Chuỗi)
Khái niệm : nhiều ký tự gộp lại tạo thành xâu. VD : ‘hoc sinh’ , ‘lop 11’ , ‘’
Khai báo biến : Var s : string [ n ] ;
hoặc Var s : string ;
Các phép toán :
1. Phép + ghép 2 xâu theo thứ tự
2. Phép So sánh > , < , >= ,<= , = , <>
Các cách xử lý trên xâu :
1. Xâu được xem như là mảng 1 chiều với các phần tử là ký tự.
2. Sử dụng Các hàm , thủ tục xử lý xâu.
1/ UPCASE(Ch) 2/ LENGTH(s) 3/ POS(s1,s2)
4/ COPY(s,m,n)
5/ DELETE(s,m,n) 6/ INSERT(s1,s2,m)
Dặn dò – chuẩn bị ở nhà :
1/ làm các bài tập còn lại
2/ bài tập thêm BT-AD:
7/ tìm những chữ cái (không phân biệt chữ thường , chữ in hoa) có mặt trong cả 2 xâu.
8/ trong n tên học sinh (n <30), hãy tim những tên có chứa xâu x. Viết ra những tên tìm được.
9/ viết CT nhập họ , tên , điểmtb của n học sinh (n<=30), sau đó viết ra danh sách gồm 2 cột hoten diemtb theo thứ tự tăng dần của tên (hay gọi là thứ tự Alphabet).
10/ viết CT nhập họtên , điểm các môn của n học sinh (n<=30, số môn học <=15), sau đó viết ra danh sách dạng họtên tbhk xloai (tính tbhk và xếp loại giống các bài tập trước đây), cuối cùng viết tỷ lệ % học sinh khá giỏi .
3/ chuẩn bị xem và viết lời giải trước cho các bài tập ở Bài Thực hành 5 , SGK .
** Các nhóm nộp lại bài làm chung của nhóm.
(Gồm có : 5 AD (48) + 4 BT và >=1 BT-AD)
Dặn dò
Kết thúc bài
LG1-Kiểu xâu (Chuỗi)
1/ viết CT đảo ngược 1 chuỗi .
Hướng giải :
Lời giải mẫu :
Var s,s1:string;i:byte;
Begin
write(‘nhap chuoi s= ‘);readln(s);
S1:=‘’;
For i:= length(s) downto 1 do s1:=s1+s[i] ;
writeln(‘chuoi dao nguoc la :’, s1);
readln;
End.
Trở về slide đề bài
Thử trong Pascal
LG2-Kiểu xâu (Chuỗi)
2/ viết CT đổi 1 chuỗi thành toàn chữ in hoa .
Hướng giải :
Lời giải mẫu :
Var s:string; i:byte;
Begin
write(‘nhap chuoi s= ‘);readln(s);
For i:=1 to length(s) do s[i] := upcase ( s[i] ) ;
writeln(‘kq =‘ , s );
readln;
End.
Trở về slide đề bài
Thử trong Pascal
LG3-Kiểu xâu (Chuỗi)
3/ viết CT loại bỏ các dấu cách ở đầu và cuối 1 xâu.
Hướng giải :
Lời giải mẫu :
Var s:string;
Begin
write(‘nhap chuoi s= ‘);readln(s);
while (s[1] =‘ ‘)and(length(s)>0) do delete (s,1,1);
while (s[length(s)] =‘ ‘)and(length(s)>0) do delete (s,length(s),1);
Writeln( ‘ kq = ‘ , s );
Readln;
End.
Trở về slide đề bài
Thử trong Pascal
LG4-Kiểu xâu (Chuỗi)
4/ viết CT đếm số lần xuất hiện của xâu cần tìm trong 1 xâu cho trước
Vd : câu cho là : toi di hoc o truong trung hoc , di duong rat met nhoc
Xâu cần tìm là : hoc kết quả là 3
Lời giải mẫu :
Var s,a :string; vt,d,dem:byte;
Begin
write(‘nhap xau s= ‘);readln(s);
write(‘nhap xau can tim a= ‘);readln(a);
d:=length(a); Dem:=0;
While pos(a,s)>0 do
begin
vt:=pos(a,s) ; dem:=dem+1;
s:=copy(s,vt+d,255);
end;
writeln(‘so lan =‘ , dem );
readln;
end.
Trở về slide đề bài
Thử trong Pascal
LG5-Kiểu xâu (Chuỗi)
5*/ viết CT đếm số lần xuất hiện của từ cần tìm a trong 1 câu s cho trước .
Hướng giải : Lời giải mẫu :
Var s,a :string; vt,d,dem:byte;
Begin
write(‘nhap chuoi s= ‘);readln(s);
write(‘nhap tu can tim a= ‘);readln(a);
d:=length(a); Dem:=0;
While pos(a,s)>0 do
begin
vt:=pos(a,s) ;
if (vt-1=0) and (vt+d-1=length(s)) then dem:=dem+1 ;
if (vt-1=0) and (vt+d-1
if (vt-1>0) and (s[vt-1]=‘ ‘) and (vt+d-1
end;
writeln(‘so lan =‘ , dem ); readln;
end.
Trở về slide đề bài
Thử trong Pascal
LG6-Kiểu xâu (Chuỗi)
6*/ viết CT thay thế 1 từ cần tìm bằng 1 từ mới trong 1 câu cho trước .
Hướng giải : Lời giải mẫu :
Var s,a :string; vt,d,dem:byte;
Begin
write(‘nhap chuoi s= ‘);readln(s);
write(‘nhap tu can tim a= ‘);readln(a);
write(‘nhap tu thay the b= ‘);readln(b);
d:=length(a); dem:=0;
While pos(a,s)>0 do
begin
vt:=pos(a,s) ;
if ( (vt-1=0) and (vt+d-1=length(s)) ) or ( (vt-1=0) and (vt+d-1
end;
end;
writeln(‘so tu da thay the =‘ , dem );
writeln(‘chuoi kq=‘ , s); readln;
end.
Trở về slide đề bài
Thử trong Pascal
Kthúc Bài : Kiểu xâu (Chuỗi)
Cám ơn đã theo dõi bài
Bài học kết thúc
Tiết 28 , 29 ppct
GV Ph.Th – Bmt – 1/2/2010
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Phạm Vân Thái
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)