chương trình thể hiện cho việc kiểm Whileilengths div 2 then Writeln‘ xâu đối xứng’ Else Writeln‘xâu không đối xứng’; - Gi¸o viªn nhËn xÐt vµ yªu cÇu häc sinh về nhà viết chương trình ho[r]
Trang 1Bài tập thực hành 5(tiết 1)
Ngày soạn, ngày tháng năm 2008 Ngày giảng, ngày tháng năm 2008 Người soạn: Nguyễn Thị Nhung A
Giáo viên hướng dẫn: Ngô Thị Tú Quyên
I Mục đích yêu cầu
Củng cố cho học sinh những hiểu biết về kiểu xâu.Sau khi đã chuẩn bị bài tập ở nhà, học sinh cần có được những kỹ năng cơ bản làm việc với xâu trong lập trình Cụ thể là:
Khai báo dữ liệu cho xâu, đưa ra màn hình giá trị của xâu
Duyệt qua tất cả các kí tự của xâu để thực hiện xử lý tương ứng vói từng kí tự đó
Sử dụng được các hàm và thủ tục chuẩn đã trình bày ở SGK
Cung cấp cho học sinh một vài thuật toán cơ vản và đơn giản thường gặp khi xử lý văn bản, rèn luyện một số kỹ năng cài đặt:
Tạo một xâu mới từ một xâu ban đầu
Đếm số lần xuất hiện của một chữ cái trong một văn bản
Góp phần hình thành và ràn luyện tư duy lập trình, tác phong của người lập trình
II Nội dung cụ thể
1 ổn định lớp(1p)
Kiểm tra sĩ số : Tổng số : Vắng :
Có phép :
Không phép :
2 Triển khai bài mới
*Hoạt động 1 : Hướng dẫn học sinh giải quyết bài 1(SGK)(17p’)
Hoạt động của giáo viên Hoạt động của học sinh
GV : Một em hãy đọc yêu cầu của
bài tập1
HS: Đọc bài
Trang 2Một em hãy xác định Input và
Output của bài toán trên ?
- Nhận xét, đưa ra 2 ví dụ
VD: Xâu 1: aabccbaa
Xâu 2: accshkaa
- Xâu nào là xâu đối xứng? Vì sao?
- Cách khai báo một xâu s?
- Hãy nêu ý tưởng của thuật toán
dựa vào định nghĩa của xâu đối
xứng theo bài toán đã nêu?
- Dựa vào VD3-VD4 (sgk-71,72)
mà các em đã được học từ tiết
trước, một em hãy viết cách tạo một
xâu p ngược lại xâu ban đầu là xâu
s?
- Sau khi tạo xâu P ta cần làm gì?
- Vậy để kiểm tra ta dùng câu lệnh
nào ?
- Một em hãy kiểm tra dùng câu
lệnh này
- Các em hãy quan sát chương trình
+ Input: Xâu s + Output: Xâu s là xâu đối xứng hoặc s không phải là xâu đối xứng
- Xâu 1 là xâu đối xứng vì đọc từ phải sang trái cũng thu được kết quả như đọc từ trái sang phải
- Xâu 2 không phải xâu đối xứng tương tự như cách giải thích của xâu 1
- s: string;
- Tạo 1 xâu mới ngược với xâu ban
đầu và so sánh xem 2 xâu này có giá trị bằng nhau hay không?
X:= length(s);
P:=”;
For i:= x down to 1 do P:=P+s[i];
- Ta cần kiểm tra xem xâu P có bằng với xâu s không
- Câu lệnh If….Then…
- If s=p then writeln(‘xâu đối xứng’)
Else Writeln(‘xâu không đối xứng’);
- Học sinh quan sát đoạn chương trình trong sách
Trang 3(phần a-bt1-sgk73)
- VD xâu aaabffbaaa
Gọi một học sinh đứng tại chỗ chạy
chạy chương trình trên với xâu đã
cho
- Nhận xét : Ngoài cách trên ta còn
có cách khác như:
+ Dựa vào vị trí các ký tự đối xứng
trong xâu mà không cần phải tạo 1
xâu mới như chương trình trên
VD: aabccbaa
- Nhận xét ký tự đầu và ký tự cuối?
Ký tự thứ 2 và ký tự đứng ngay
trước ký tự cuối
- Vậy xâu có độ dài n, ký tự tại vị
trí thứ i trong xâu sẽ đối xứng với
ký tự ở vị trí nào trong xâu?
- Để kiểm tra xem xâu đó có phải là
xâu đối xứng không thì ta cần phải
kiểm tra xem tất cả các kí tự ở vị trí
đối xứng nhau trong xâu có bằng
nhau hay không Nếu gặp một cặp
vị trí đối xứng nào trong xâu vi
phạm thì kết luận luôn là xâu không
phải là xâu đối xứng Như vậy ta
dừng việc kiểm tra các cặp đối xứng
trong xâu khi nào?
- Xâu s có độ dài là n nếu phải kiểm
tra tất cả các vị trí đối xứng ta phải
kiểm tra bao nhiêu cặp vị trí đối
- Học sinh chạy chương trình trên bằng thuyết trình
- Đây là hai cặp vị trí đối xứng của xâu, và hai cặp vị trí đối xứng này các kí tự tương ứng đều bằng nhau
- Ký tự ở vị trí i đối xứng với ký tự
ở vị trí: n-i+1
- Nếu quá trình kiểm tra ta thấy 1 cặp vị trí đối xứng mà cặp kí tự đó không có giá trị bằng nhau thì ta sẽ dừng ngay việc kiểm tra Còn không thì ta phải kiểm tra tất cả các cặp vị trí đối xứng của xâu
- Ta sẽ phải kiểm tra (n div 2) cặp
vị trí đối xứng
Trang 4- Việc kiểm tra này được thực hiện
lặp đi lặp lại với các cặp vị trí đối
xứng trong xâu vậy ta sẽ dùng câu
lệnh nào trong trường hợp này?
- Trong trường hợp này ta nên dùng
câu lệnh lặp nào? Vì sao?
- Một em hãy lên bảng viết đoạn
chương trình thể hiện cho việc kiểm
tra trên Giả sử nhập vào xâu s
- Giáo viên nhận xét và yêu cầu học
sinh về nhà viết chương trình hoàn
chỉnh theo cách thứ 2, không dùng
biến xâu p
- Ta sẽ sử dụng câu lệnh lặp
- Ta nên sử dụng câu lệnh lặp while do Vì trong quá trình kiểm tra nếu gặp một cặp vị trí nào đối xứng thì ta dừng việc kiểm tra ngay không cần phải kiểm tra các vị trí còn lại của xâu nữa
i :=1;
While(i<= length(s) div 2) and (s[i]=s[length(s)-i+1]) do
i:=i+1;
If i>(length(s) div 2) then Writeln(‘ xâu đối xứng’) Else
Writeln(‘xâu không đối xứng’);
Trang 5
-*Hoạt động 2: Hướng dẫn học sinh giải quyết bài tập 2(SGK-73)(20p’) Hoạt động của giáo viên Hoạt động của học sinh
GV : Một em hãy đọc yêu cầu của
bài tập 2 (SGK-73)
- Hãy xác định input và output của
bài toán
- VD: cho xâu aAyxz123
Số lần xuất hiện kí tự a là 2 lần, kí
tự y là 1 lần, kí tự x là 1 lần, kí tự z
là 1 lần
- GV: Từ ví dụ nêu trên em nào hãy
nêu ý tưởng để giải bài toán này?
- GV: Nhận xét ý tưởng của học
sinh và đưa ra ý tưởng để giải quyết
bài toán
*ý tưởng:
- Dùng mảng dem có chỉ số từ
‘A’ ’Z’.Khởi tạo giá trị cho mảng
- Chuyển tất cả các kí tự của xâu s
thành các kí tự in hoa
- Duyệt lần lượt các kí tự của xâu
và kiểm tra xem kí tự nào là kí tự
chữ cái thì tăng biến dem cho kí
tự đó
- Kiểm tra lại các phần tử của
mảng nếu phần tử nào của mảng
HS: Đọc bài
+ input: xâu s;
+ output: Thông báo số lần xuất hiện của mỗi chữ cái tiếng anh trong xâu s(Không phân biệt chữ hoa hay chữ thường)
- HS : Nghe giảng và ghi bài
- HS: Đưa ra ý tưởng của mình
- Chú ý nghe ý tưởng của giáo viên
Trang 6có giá trị khác 0 thì đưa ra số lần
xuất hiện của kí tự tương ứng với
chỉ số của dem
GV: Phân tích qua thuật toán cho
học sinh hiểu
- Một em hãy nêu cách khai báo
một biến thuộc kiểu mảng
- Chỉ số của mảng là kiểu chữ số
tương tự như vậy ta cũng có thể
khai báo chỉ số theo kiểu kí tự là
từ ‘A’ ’Z’
- Giáo viên vứa phân tích ý tưởng
và cùng viết chương trình hoàn
chỉnh với học sinh
Viết chương trình
Var
i: integer;
dem: array[‘A’ ’Z’] of integer;
s: string;
j: char;
begin
write(‘nhap xau s’); readln(s);
for j:= ‘A’ to ‘Z’ do
dem[j]:=0;
for i:=1 to length(s) do
s[i]:= upcase(s[i]);
for i:=1 to length(s) do
if (s[i]<= ‘Z’) and (s[i]>=’A’)
then inc(dem[s[i]]);
- a: array[1 10] of integer;
- Cùng giáo viên viết chương trình hoàn chỉnh
Trang 7for j:=’A’ to ‘Z’ do
if dem[j] <>0 then
writeln(‘so lan xuat
hien’,dem[j],’la’,dem[j],’lan’);
end.
Hoạt động 3: Hướng dẫn học sinh làm bài tập 3(sgk-73)(10p’)
Hoạt động của giáo viên Hoạt động của học sinh
- Yêu cầu học sinh đọc đề bài
- Hãy xác định bài toán
- Ví dụ s=’anh den trong con mua’
-> s=’em den trong con mua’
- Hãy nêu ý tưởng của bài toán
- Tìm vị trí của xâu ‘anh’ thì ta sử
dụng hàm nào?
- Xóa cụm kí tự ta dùng hàm nào?
- Chèn từ ‘em’ ta dùng hàm nào?
- Đọc bài tập
+Input: xâu s + Ouput: Thay thế tất cả cụm kí
tự ‘anh’ bằng cụm kí tự ‘em’
- Ta tìm vị trí của từ ‘ạnh’ trong xâu s Xoá cùm kí tự đó đi và chèn ‘em’ vào vị trí ‘anh’ vừa xoá trong xâu s Viết xâu vừa thay thế
ra màn hình
- Pos(‘anh’,s)=vt
- Delete(s,vt,3);
- Insert(‘em’,s,vt);
Trang 8- Trong trường hợp này chúng ta
chưa biết được có bao nhiêu cụm
từ ’anh’ trong xâu s nên ta phải sử
dụng câu lệnh nào ?
- Cùng học sinh viết chương trình
hoàn chỉnh
Viết chương trình
Var
Vt: byte;
St: string;
Begin
Writeln(‘nhap vao xau :’);
Readln(s);
While pos(‘anh’,s) <> 0 do
Begin
Vt:=pos (‘anh’,s);
Delete(st,vt,3);
Insert(‘em’,st,vt);
End;
Writeln(st);
Readln;
End.
- Ta sẽ sử dụng câu lệnh While do
- Theo dõi giáo viên cùng giáo viên viết chương trình hoàn chỉnh
Trang 9III Củng cố(2p’)
- Qua các bài tập trên chúng ta về cách tạo xâu mới từ xâu ban đầu, cách
sử dụng một số hàm chuẩn như upcase(),Pos(), Delete(),Insert()
IV.Bài tập về nhà
Các em về nhà tự chạy lại các chương trình trên bộ test và trên máy tính Và làm một số bài tập trong sách bài tập bài 4.39, 4.40, 4.42 giờ sau chúng ta sẽ thực hành trên phòng máy
Trang 10Nhận xét của giáo viên hướng dẫn