Bài tập thực hành 5 (tiết 1)

Bài tập thực hành 5 (tiết 1)

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.

 

doc 10 trang Người đăng quocviet Lượt xem 1878Lượt tải 2 Download
Bạn đang xem tài liệu "Bài tập thực hành 5 (tiết 1)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Bà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ị NhungA
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ể
ổn định lớp(1p)
Kiểm tra sĩ số : Tổng số : ...........................Vắng :........
 Có phép :
 Không phép :
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.
Mộ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 (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 xứng?
- 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.
HS: Đọc bài
+ 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.
- 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.
- 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’);
*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 có 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]=’A’)
 then inc(dem[s[i]]);
for j:=’A’ to ‘Z’ do
 if dem[j] 0 then
 writeln(‘so lan xuat hien’,dem[j],’la’,dem[j],’lan’);
end.
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
- a: array[1..10] of integer;
- Cùng giáo viên viết chương trình hoàn chỉnh.
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?
- 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.
Đọ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);
 - 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
III 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.
Nhận xét của giáo viên hướng dẫn

Tài liệu đính kèm:

  • docBai tap thuc hanh 2.doc