IV. CÁC THỦ TỤC VÀ HÀM VẾ XÂU Kí TỰ 4.1 Hàm lấy chiều dài của xõy ký tự
B. PHƯƠNG PHÁP: nờu vấn đố, gợi mỡ C CHUẨN BỊ CỦA THẦY VÀ TRề
C. CHUẨN BỊ CỦA THẦY VÀ TRề
GV: Bài tập, phũng mỏy HS: Làm cỏc bài tập ở nhà
D. TIẾN TRèNH LấN LỚP1. Ổn định: Sĩ số 1. Ổn định: Sĩ số
2. Thực hành
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. Thụng bỏo lờn màn hỡnh cỏc chữ cỏi cú trong xõu và số lượng của chỳng ( Khụng phõn biệt chữ hoa hay chữ thường).
í tưởng:
- Dựng một mảng dem với chỉ số là cỏc chữ cỏi để lưu trữ số lượng của cỏc chữ cỏi trong xõu.
- Duyệt qua tất cả cỏc ký tự của xõu St: Nếu ký tự đú là chữ cỏi thỡ tăng ụ biến mảng dem[St[i]] lờn 1 đơn vị.
Uses Crt; Var St:String;
dem: Array[‘A’..’Z’] Of Byte; i:Byte;
ch:Char; Begin
Write(‘Nhap xau St: ‘); Readln(St); {Khởi tạo mảng}
For ch:=’A’ To ‘Z’ Do dem[ch]:=0; {Duyệt xõu}
For i:=1 To Length(St) Do
If Upcase(St[i]) IN [‘A’..’Z’] Then Inc(dem[Upcase(St[i])]); {Liệt kờ cỏc ký tự ra màn hỡnh}
For ch:=’A’ To ‘Z’ Do
If dem[ch]>0 Then Writeln(ch,’ : ’,dem[ch]); Readln;
End.
Bài tập 2: Viết chương trỡnh xúa cỏc ký tự chữ số trong một xõu ký tự được nhập vào từ bàn phớm.
Uses Crt; Var St:String;
{Hàm POSNUM kiểm tra xem trong xõu St cú ký tự chữ số hay khụng? Nếu cú, hàm trả về vị trớ đầu tiờn của ký tự chữ số, ngược lại hàm trả về giỏ trị 0}
Function POSNUM(St:String):Byte; Var OK:Boolean; i:Byte; Begin OK:=False; i:=1;
While (i<=Length(St)) AND (Not OK) Do If St[i] IN [‘0’..’9’] Then OK:=True Else i:=i+1;
If OK Then POSNUM:=i Else POSNUM:=0; End;
Begin
Write(‘Nhap xau St: ‘); Readln(St);
While POSNUM(St)<>0 Do Delete(St,POSNUM(St),1); Write(‘Xau sau khi xoa: ‘,St);
Readln;
End.
Bài tập 3: Viết chương trỡnh nhập vào một xõu ký tự từ bàn phớm. Tỡm và in ra màn hỡnh một từ cú độ dài lớn nhất trong xõu.
Gợi ý:
Tỏch từng từ để so sỏnh
IV. CŨNG CỐ: Nhận xột giờ thực hành V.HƯỚNG DẪN, DẶN Dề
Bài tập 1: Viết chương trỡnh nhập một xõu vào từ bàn phớm và thụng bỏo lờn màn hỡnh xõu đú cú phải đối xứng khụng theo 2 cỏch: Đệ qui và khụng đệ qui. (Vớ dụ: abba, abcba là cỏc xõu đối xứng).
Gợi ý:
- Nếu xõu Length(st)<=1 thỡ st là xõu đối xứng - Ngược lại:
+ Nếu st[1]<>st[Length(st)] thỡ st khụng đối xứng
+ Ngược lại: Gọi đệ qui với xõu st sau khi bỏ đi ký tự đầu và ký tự cuối. *******************************************************
Ngày soạn: 11/1/2009 Ngày dạy:17/1/2009
Tiết 67-68 -69: XÂU KÍ TỰ ( STRING)
1.Kiến thức: Học sinh năm được cấu trỳc dữ liệu kiểu xõu, biết viết cỏc chương
trỡnh xữ lớ cỏc bài toỏn trờn xõu kớ tự
2.Kỹ năng: Cú kĩ năng phõn tớch bài toỏn, sữ dụng chớnh xỏc cỏc thủ tục xữ lớ
xõu kớ tự
3.Thỏi độ: Học sinh tớch cực, tự giỏc, hứng thỳ trong giờ học B. PHƯƠNG PHÁP: Thuyết trỡnh, gợi mở, vấn đỏp
C. CHUẨN BỊ CỦA THẦY VÀ TRề
GV: Bài tập, phũng mỏy HS: Làm cỏc bài tập ở nhà
D. TIẾN TRèNH LấN LỚP1. Ổn định: Sĩ số 1. Ổn định: Sĩ số
2. Bài mới
Bài 1: Viết chương trỡnh tỡm cỏc vị trớ xuất hiện chuổi S1 trong chuổi S ? Dữ liệu vào: Chuổi s và chuổi s1.
Kết quả ra: Cỏc v ị trớ tỡm thấy s1 trong s. Vớ dụ: Input Output Test 1 ‘aaahocjhochoc’ ‘hoc’ 4 8 11 Test 2 ‘adddddee’ ‘dd’ 2 3 4 5 Giải var s,s1:string; begin readln(s); readln(s1);
while pos(s1,s)>0 then
begin write(pos(s1,s):4); s[pos(s1,s)]:=chr(1); end; readln; end. Bài 2:
Nhập vào một chuổi sau đú xuất ra cỏc từ dài nhất trong chuỗi Dữ liệu vào: một chuổi.
Kết quả ra: cỏc từ dài nhất trong chuỗi Vớ dụ:
Input Output
Test 1 Tran Nguyen dao Nguyen Test 2 Tran quang dao bgggg quang
bgggg Giải var s,s1:string; a:array[1..128]of string; i,j,max:integer; begin readln(s); while s[1]=#32 do delete(s,1,1);
while s[length(s)]=#32 do delete(s,length(s),1); while pos(#32#32,s)>0 do delete(s,pos(#32#32,s),1); j:=1;
for i:=1 to length(s) do begin
if s[i]<>#32 then a[j]:=a[j]+s[i] else inc(j);
end;
max:=length(a[1]); for i:=1 to j do
if length(a[i])>max then max:=length(a[i]); writeln('(cac) tu dai nhat: (co ',max,' ky tu:)'); for i:=1 to j do
if length(a[i])=max then writeln(a[i]); readln;
end.
Bài 3:
Bụứm vaứ cuoọi laứ 2 hóc sinh raỏt gioỷi tin hóc vaứ thửụứng liẽn lác vụựi nhau baống thử ủieọn tửỷ (Email). Nhửng nhửừng bửực thử maứ hai bán gụỷi cho nhau chổ toaứn laứ daừy nhửừng chửừ soỏ liền nhau. Caỷ hai bán ủều coự chửụng trỡnh maừ hoaự caực con soỏ thaứnh nhửừng kyự tửù vaứ ngửụùc lái giaỷi maừ caực con soỏ thaứnh kyự tửù, theo qui ủũnh hai bán seừ chuyeồn nhửừng kyự tửù mỡnh ủũnh gụỷi thaứnh caực con soỏ laứ thửự tửù cuỷa kyự tửù ủoự trong baỷng maừ ASCII (vớ dú :
A:65; B:66) tửứ chửừ thửụứng maựy chuyeồn thaứnh chửừ hoa rồi maừ hoaự thaứnh caực con soỏ.(vớ dú: aA65, bB66). Sau khi maừ hoaự seừ chuyeồn thử ủi. Ngửụứi nhaọn coự chửụng trỡnh ủeồ giaỷi maừ caực con soỏ thaứnh nhửừng kyự tửù in hoa (vdú: 6566326768AB CD). Em haừy vieỏt
a) Chửụng trỡnh 1 ủeồ maừ hoaự 1 xãu kyự tửù thaứnh caực chửừ soỏ. Vớ dú:
Input Output
Di an che? 68733265783267726963
b) Chửụng trỡnh ủeồ giaỷi maừ 1 chuoồi soỏ thaứnh caực kyự tửù Vớ dú: Input Output 79326865853286658963 O dau vay? Giải a. Mahoa.pas uses crt; var s:string; i:integer; begin clrscr;
writeln('Nhap chuoi can ma hoa:'); readln(s);
writeln('Ma hoa thanh cac con so la:'); for i:=1 to length(s) do
begin s[i]:=upcase(s[i]); write(ord(s[i])); end; readln; end. b. Giaima.pas uses crt; var s,s2:string; ch:char; i,x,d:integer; begin clrscr;
writeln('Nhap chuoi so mat ma:'); readln(s);
writeln('Giai ma chuoi so tren la:'); while length(s)>0 do
begin
s2:=copy(s,1,2); {lay moi lan 2 ky tu dau tien} delete(s,1,2); {xoa 2 ky tu da lay di}
val(s2,x,i); {chuyen thanh so x}
write(chr(x)); {chuyen thanh ma asscii}
end; readln; end.