Tin Học Phổ Thông

ltbthao137@gmail.com

Hướng dẫn bài tập và thực hành 5 – lớp 11

HƯỚNG DẪN BÀI TẬP VÀ THỰC HÀNH 5 (tiết 2)

Bài 1: Hãy viết chương trình nhập từ bàn phím một xâu kí tự s và thông báo ra màn hình số lần xuất hiện của mỗi chữ cái tiếng Anh trong S (không phân biệt chữ hoa chữ thường).

Hướng dẫn:

1.      Để biết số lần xuất hiện của mỗi chữ cái tiếng Anh trong s ta phải đếm xem mỗi chữ cái tiếng Anh đó xuất hiện bao nhiêu lần, khi đó ta dùng mảng một chiều với các phần tử được đánh số từ 1 đến 26 dùng để ghi nhận số lần xuất hiện của các kí tự tương ứng từ ‘A’ đến ‘Z’ trong xâu s.
    Ví dụ:

-          dem[1] ghi nhận số lần xuất hiện của ‘A’

-          dem[2] ghi nhận số lần xuất hiện của ‘B’

-          …

-          dem[26] ghi nhận số lần xuất hiện của ‘Z’

2.      Vậy để ghi nhận số lần xuất hiện của kí tự đang xét ở vị trí i nào trong mảng dem thì ta làm như thế nào? Gợi ý: dùng hàm ord(ch): hàm này cho giá trị là mã ASCII của kí tự trong ch.

Ví dụ:

-          ord(‘A’) – ord(‘A’) +1= ord(‘A’) – 64= 65-64 =1( i=1)

-          ord(‘B’) – ord(‘A’) +1 = ord(‘B’) – 64=  66-64 =2(i=2)

-          …

-          ord(‘Z’) – ord(‘A’) + 1 = ord(‘Z’) – 64= 90 – 64 =26 (i=26)

3.      Ngược lại, từ vị trí i trong mảng dem ta cũng có thể biết được phần tử thứ i ghi nhận số lần xuất hiện của kí tự nào, bằng cách dùng hàm chr(X). Hàm chr(X) cho giá trị là kí tự có mã ASCII tương ứng với X.

Ví dụ:

-          i =1: chr( i +ord(‘A’) -1) = chr( 1 + 64) = chr(65) = ‘A’

-          i = 2: chr( i +ord(‘A’) -1) = chr( 2 + 64) = chr(66) = ‘B’

-          …

-          i = 26: chr( i +ord(‘A’) -1) = chr( 26 + 64) = chr(90) = ‘Z’

4.     Thuật toán: Duyệt i từ 1 đến length(s), kiểm tra xem s[i] có phải là kí tự chữ cái hay không, nếu s[i] là chữ cái thì đếm tăng cho phần tử lưu số lần xuất hiện của nó, nghĩa là tăng 1 cho dem[ord(s[i]) – 64].

5.     Tới đây bài toán xem như đã gần hoàn thành, chỉ còn một vấn đề là nếu chữ cái đang xét không phải là chữ cái in hoa thì kết quả sẽ không đúng. Nhưng theo yêu cầu đề bài là ‘không phân biệt chữ hoa và chữ thường’. Giải quyết vấn đề này rất đơn giản, bằng cách dùng hàm upcase(c) đã học.

6.     Gợi ý cài đặt:

{Phần khai báo}
         begin
{ Nhập xâu }
N:= length(s);
{ Khởi trị cho mảng dem }
         for i:=1 to N do
{ Nếu s[i] là chữ cái thì đếm tăng cho s[i] }
         for i:=1 to 26 do
{ Thông báo số lần xuất hiện của chr(i+64) }
         end.

Bài 2:Viết chương trình nhập vào từ bàn phím một xâu s. Thay thế tất cả các cụm kí tự ‘anh’ bằng cụm kí tự ‘em’.

Hướng dẫn:

1.     Để thay thế tất cả cụm kí tự ‘anh’ trong xâu s thành cụm kí tự ‘em’, có thể làm một cách tự nhiên dễ dàng như sau: tìm vị trí xâu con ‘anh’ trong xâu s đã cho, xóa xâu con này đi rồi chèn xâu ‘em’ vào vị trí đó. Lặp đi lặp lại điều này cho đến khi không tìm thấy xâu ‘anh’ cần thay thế trong xâu s nữa. Để làm được điều trên cần phải giải quyết một số vấn đề dưới đây:

-          Gọi vt là vị trí xuất hiện của xâu ‘anh’ trong s, để tính được vt ta dùng hàm gì?

-          Để xóa xâu ‘anh’ trong xâu s với vị trí vtvừa tìm được thì làm như thế nào?

-          Chèn xâu ‘em’ vào xâu s tại vị trí vt?

2.     Gợi ý cài đặt:

{Phần khai báo}
          begin
{ Nhập xâu s }
{ Chừng nào còn tìm thấy xâu ‘anh’ trong xâu s còn làm ba việc sau:
– Tìm vị trí bắt đầu của xâu ‘anh’;
– Xóa xâu ‘anh’ vừa tìm được.
– Chèn xâu ‘em’ vào xâu s tại vị trí trước đây xuất hiện xâu ‘anh’.}
{ in xâu s kết quả }
          end.

==================================================================

Download file hướng dẫn tại đây »

==================================================================

28/02/2012 Posted by | Bài tập và thực hành 5 - lớp 11 | 1 Phản hồi

   

Theo dõi

Get every new post delivered to your Inbox.