tính bằng cách ấn nút power để khởi động máy tính.
Bài Tập Và Thực Hành 5
- Sau khi khởi động máy tính xong ta Start →Program → Pascal7.
Input của bài này là gì ?
Output của bài này là gì ? + Chương trình này linh hoạt duyệt xâu ban đầu theo thứ tự ngược lại (từ cuối xâu quay ngược về đầu xâu) nên tạo được xâu đảo ngược của xâu ban đầu và giải quyết được bài toán đặt ra (kiểm tra xâu có là palindrome hay không).
b) Với yêu cầu không dùng biến xâu p, cần gợi ý cho HS khai thác khả năng tham chiếu đến từng kí tự trong xâu thông qua vị trí của kí tự này.Như vậy không cần thiết phải tạo 1 xâu mới để cuối cùng so sánh hai xâu, mà chỉ cần so sánh các cập kí tự ở vị trí đối xứng nhau để kết luận xâu có là palindrome hay không. ? Hãy nhận xét về các kí tự ở vị trí đối xứng nhau trong 1 xâu palindrome?
? Kí tự ở đầu xâu đối xứng với kí tự cuối xâu, kí tự thứ hai trong xâu đối xứng với kí tự đứng ngay trước kí tự cuối xâu, kí tự ở vị trí thứ i đối xứng với kí tự ở vị trí nào ?
? Phải so sánh bao nhiêu cặp kí tự trong xâu để biết được xâu đó có là palindrome hay không? Hãy dùng vòng lặp để thực hiện các phép so sánh này.
+ Nhập vào một xâu kí tự
+ In lên màn hình xâu đảo ngược.
Bài 1 : Nhập vào từ bàn phím một xâu. Kiểm tra xâu đó có phải là xâu đối xứng hay không. Xâu đối xứng có tính chất : đọc nó từ phải sang trái cũng thu được kết quả giống như đọc từ trái sang phải( còn được gọi là xâu palindrome).
a) Hãy chạy thử chương sau :
Program Xaukitu ;
Var i, x : byte ; A, p :String ;
Begin
Write(‘nhap vao xau ‘) ; Readln(a) ;
X :=length(a) ; P :=’ ‘ ;
For i:= x downto 1 do
p := p + a[i] ; if a= p then
write(‘xau là palindrome’)
else
write(‘xau khong la palindrome’) ; readln ;
end.
b) Hãy viết lại chương trình trên, trong đó không vùng biến xâu p.
Sau đây là 1 ctrình đáp ứng được yêu cầu thêm của bài 1 :
Program Xaukitu ;
Var i, x : byte ; a : String ; Palin :boolean ;
Begin
Write(‘nhap vao xau ‘) ; Readln(a) ;
X :=length(a) ;
palin := true ;{ khởi tạo palin, tam coi xau a la palindrome }
For i:= 1 to x div 2 do
? ?
Bài Tập Và Thực Hành 5 Tiết 32 Có thể không dùng vòng lặp for – do mà dùng while – do và có thể không cần dùng biến gôlic. Một chương trình như vậy vẫn có thể đáp ứng được yêu cầu, chẳng hạn như ctrình sau :
Program Xaukitu ;
Var i, x : byte ; a : String ;
Begin
Write(‘nhap vao xau ‘) ; Readln(a) ;
X :=length(a) ; i :=1 ;
While (i <= ( x div 2)) and
( a[i]= a[ x-i +1]) do i := i+1 ; If i > (x div 2) then
write(‘xau la palindrome’)
Else write(‘xau khong la palindrome’) ;
readln ;
end.
+ giải quyết vấn đề không phân biệt chữ hoa hay chữ thường bằng cách dùng hàm upcase(c) ; - tuỳ theo trình độ của HS, GV có thể đưa ra 1 dàn ý ctrình và yêu cầu HS chi tiết hoá bằng các câu lệnh để có 1 ctrình chạy đúng. Dàn ý ctrình có thể được đưa ra trong giờ thực hành hoặc đưa ra cho HS chuẩn bị ở nhà trước buổi thực hành. Sau đây là 1 ctrình :
{phần khai báo }
Begin
{ nhập xâu s}
N :=length(s) ;
{ khởi tạo cho mảng đếm }
For i := 1 to N do
{ nếu s[i] là chữ cái thì đếm
(* so sanh cap ki tu doi xung*) If a[i] <> a[ x – i +1] then
palin := False ;
If palin Then
write(‘xau la palindrome’)
else
write(‘xau khong la palindrome’) ; readln ;
end.
Bài 2 : VCT nhập từ bàn phím 1 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 hay chữ thường)
o Một phương án khác, GV có thể hướng dẫn dùng 1 mảng với chỉ số là kí tự từ ‘A’ đến ‘Z’ để ghi nhận số lần xuất hiện của các kí tự trong xâu S. Khi đó, dàn ý ctrình có thể như sau {phần khai báo } Begin { nhập xâu s} N :=length(s) ; { khởi trị cho mảng đếm } For i := 1 to N do
{ nếu s[i] là chữ cái thì đếm tăng cho s[i] }
For c := ‘A’ to ‘Z’ do
Bài Tập Và Thực Hành 5
tăng End.
cho s[i] }
For i := 1 to 26 do
{ thông báo số lần xuất hiện của chr(i + ord(‘A’) – 1 ) }
End.
+ Để thay thế tất cả cụm kí tự ‘anh’ trong xâu st thành cụm kí tự “em”, có thể làm 1 cách tự nhiên : tìm vị trí xâu con “anh” trong xâu st đã cho, xoá 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 st nữa.Có thể hỏi HS rằng với các hàm và thủ tục chuẩn đã biết(đối với kiểu xâu) có thể làm được việc đó hay không (việc tìm vị trí xuất hiện 1 xâu con, xoá 1 xâu con, chèn 1 xâu con) câu hỏi này giúp HS nhớ lại và vận dụng hàm pos, các thủ tục chuẩn delete, insert.
- phương án này chỉ dành cho các HS khá, giỏi, do sách giáo khoa không trình bày kiểu chỉ số khác với đoạn số nguyên liên tiếp.
Bài 3 : Nhập vào từ bàn phím một xâu. Thay thế tất cả các cụm kí tự ‘anh’ bằng cụm kí tự ‘em’. Chương trình : Program Xaukitu ; Var vt : byte ; St : String ; Begin
Write(‘nhap vao mot xau : ‘) ; Readln(st) ; While pos(‘anh’, st ) <> 0 do Begin Vt :=pos(‘anh’,st) ; Delete(st, vt, 3) ; End ; write(st) ; Readln ; end. 4. Củng cố :(4’)
- Cần nắm rõ cấu trúc của một xâu kí tự và cách vận dụng các xâu kí tự cũng như cách dùng các thủ tục và hàm chuẩn trong xâu kí tự. .
- Cần phân biệt các dấu : . , ; : khi tham gia viết chương trình.
- Cách sửa lỗi chương trình cũng như cách thực hiện chương trình.
5. Dặn dò :(1’)
- Các em về nhà viết lại các chương trình đơn giản và thử lại với nhiều bộ dữ liệu khác nhau.Sau đó quan sát kết quả trên màn hình.
- Khi ra khởi phòng phải tắt máy tính, tắt quạt, tắt đèn và đậy tất cả các máy tính lại.
- Các em về nhà học bài và chuẩn bị trước Bài 13. Kiểu Bản Ghi trong SGK trang 74 .
Hoà Lợi,ngày……Tháng ……Năm 200 Duyệt
Bài 13 Kiểu Bản Ghi
Tuần : 17 Ngày soạn : 10/11/08 Tiết : 33 Ngày Dạy: / /