Giải bài tập Tin học 11: Bài tập và thực hành 5

Chủ nhật - 30/09/2018 03:54
Giải bài tập Tin học 11: Bài tập và thực hành 5
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 như từ trái sang phải (còn được gọi là xâu palindrome).
Hãy chạy thử chương trình sau:
var i, x: byte;
a, p: string; begin
write('Nhap vao xau: ’); readln(a);
X:= length(a); {xac dinh do dai xau}
p: = ' ', {khoi tao xau rong} for i:= X downto 1 do
p:= p+a[i]; {tao xau dao nguoc} if a= p then
write('xau la palindrome') else
write ( 'xau khong la palindrome' ) ,
readln
end.
Hãy viết lại chương trình trên, trong đó không cần cỏ biến xâu p.
Giải:
a) Khi chạy chương trình, nhập vào xâu: ' vui ma hoc hoc ma vui' thì chương trình đưa ra thông báo: "xau khong la palindrome", còn khi nhập  vào xâu 'abcddcba' thì chương trình đưa ra thông báo: "Xâu là palindroine?".
Kết quả của chương trình cho như hình 52 dưới đây:

b) Để viết lại chương trình dùng biến xâu thì ta cần khai thác khả năng tham chiếu đến từng kí tự trong xâu thông qua vị trí của xâu này. Như vậy, không cần thiết phải tạo một xâu mới để cuối cùng so sánh hai xâu, mà chỉ cần sánh cặp kí tự ở vị trí đối xứng nhau để kết luận có phải hay không.
Bởi vậy, ta có thể dùng một biến logic để ghi nhận sự phát hiện này. Trước vòng lặp thực hiện các so sán nói trên, cần không chuyển biến logic ở mỗi bước lặp, hễ hai kí tự được so sánh khác nhau thì biến logic đó sẽ phải thay đổi giá trị.
Chương trình sau đây dùng để kiểm tra xem xâu nhập vào có phải là xâu palindrome hay không.
vai i, X: byte;
a: string;
palii: boolean;
begin
write (Nhap vao xau: ’ );
reailn(a) ;
X:= length(a); {xac dinh do dai cua xau}
palin:=true;
{khoi tao palin, tam coi xau a la palindrome}
for i:= 1 to X div 2 do {so sanh cap ki tu doi xung}
if a [i. ] oa [x-i + 1 ]
then palin: =false;
if palin then writeln: Xau la palindrome’)
else writeln(’Xau khong la palindrome’);
readln
End.
Khi chạy chương trình, nhập vào xâu: 'He 2007 ' thì chương trình đưa ra thông báo: "xau khong la palindrome”, còn khi nhập vào xau 'abcđdcba' thì chương trình đưa ra thông báo: "xau la palindrome" kết quả của chương trình cho như hình 53 dưới đây:

Tuy nhiên, ta có thể không dùng vòng for-do mà dùng while-do hay repeat-until và có thể không cần dùng biến logic. Chương trinh sau đây đáp ứng được yêu cầu đặt ra:
var x: byte;
a: string;
palin: boolean;
begin
write('Nhap vao xau: ' ) ,
readln(a);
X: =length (a) , {xac dinh do dai cua xa} i:=1;
while (i<=(x div 2)) and (a [i] =a [x-i + 1] ) do i: = i +1,ế if i> (x div 2) then writeln('Xau la palindrome')
else writeln('Xau khong la palindrome');
readln
End.
Khi chạy chương trình, nhập vào xâu: 'tin hoc hoc tin' thì chương trình đưa ra thông báo: 'xau khong la palindrome", còn khi nhập vào xâu ' ABCDDCBD' thì chương trình cũng đưa ra thông báo: “xau khong la palindrome", còn khi nhập vào xâu: ' ABCD0770DCBA' thì chương trình đưa ra thông báo: “xau la palindrome" .
Kết quả cùa chương trình cho như hình 55 dưới đây:

Bài 2. 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ữ hca hay chữ thường).
Giải:
Để giải quyết bài toán này, chúng ta nhận thấy rằng:

Cần ghi nhận số lần xuất hiện của từng chữ cái. Có tất cả 26 chữ cái ' A ' ' z '. Có thể dùng một 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. Bởi vậy, chúng ta dùng một mảng một chiều để đếm số lần xuất hiện của một kí tự trong xâu s. Cụ thể, để ghi nhận sổ lần xuất hiện của kí tự, ta có thể dùng dem[A] để ghi nhận sổ lần xuất hiện kí tự A (hay kí tự a, vì không phân biệt chữ hoa hay chữ thường).
Để giải quyết vấn đề không phân biệt chữ hoa hay chữ thường ta cần dùng hàm Upcase(c).
Do một kí tự xuất hiện trong xâu s có thể không phải là một chữ cái nên khi duyệt lần lượt từng kí tự trong xâu s, cần kiểm tra xem kí tự đó có phải là chữ cái hay không để ghi nhận số lần xuất hiện của nó. Chúng ta đã gặp đoạn chương trình kiểm tra một kí tự có là chữ số hay không ở ví dụ 5 tiết học 12. Từ đó, có thể viết được đoạn chương trinh làm việc duyệt từng phần tử cùa xâu và đếm.
Dàn ý của chương trình:
phần khai báo
begin
{nhập xâu S}
N: = length (S);
{Khởi tạo cho màng Dem}
for i: =1 to N do {Neu s[i] là chữ cái thì đém tăng cho s[1]
for c:='A' to Z do {Thông báo sô lần xuất hiện của c}
End.
Chương trình nhập từ bàn phím một xâu kí tự 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 (không phân biệt chữ hoa hay chữ thường).
Program tinh_ki_tu,
var s,sl: string;
i, j, n: integer;
dem: array [ 'A’ . . 'z ’ ] of integer;
c: char ;
begin
write(’Nhap vao xau: ');
readln(S);
n:= length(s);
for C:= 'A' to 'Z' do {khoi tao cho mang dem} dem[c]:= 0 ; s 1 : = ’ ' ;
readln
End.
Khi nhập vào lần lượt các xâu: 'đfd'2n5fv' 3m.A' , ' 55B7cfcManu07 ' , ' 8gs9'0A6ha5kQ ' thì chương trình cho các kết quả như hình 56 dưới đây:

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 từ 'em'.
Giải:
Đối với bài toán này:
Để thay thế tất cả cụm từ "anh" trong một xâu st thành cụm kí tự 'em', có thể làm một cách tự nhiên: Tìm vị trí xâu con 'anh'  trong xâu st đã 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 st nữa. Đẻ giải quyết vấn đề này, chúng ta cần vận dụng các hàm Pos, thủ tục chuẩn Delete, Insert.
Dàn ý chương trinh:
{phần khai báo}
Begin
{Nhập xâu S}
{Chừng nào còn tìm thấy xâu con ‘anh ' trong xâu st còn làm ba công việc sau: Tìm vị trí bắt đầu cùa xâu 'anh' ;
Xóa xâu ' anh' vừa tìm thấy;
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 xau S kết quả}
end.

Chương trình 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 từ ‘em'
program thay_the_cum_tu;
var vt: byte;
St: string;
Begin
write(’Nhap vao mot xau: ');
readln(st);
while pos ('anh', st)<>0 
begin
Vt : = pos ( ' anh ' , St. : ; delete(St,vt,3);
insert('em',St,vt) ; end;
write ('Xau sau khi da duoc thay the: ' ,st ,')
readln
End.

Khi nhập vào lần lượt các xâu: 'anh' và 'em' ; 'anh em trong mot nha ' thì chương trình cho các kết quả theo thử tự như sau: 'em va em' ,' em em trong mot nha ' . Kết quả chương trình cho như hình 57 dưới đây:

  Ý kiến bạn đọc

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Kênh Bóng đá trực tiếp hôm nay miễn phí
Kênh
90Phut TV full HD ⇔ 32win
69VN ⇔ 78 WIN ⇔ F168 ⇔ 123b

Vmax ⇔ 78Win ⇔ hubet ⇔ 789club
789f ⇔ SHBET ⇔ nh88 ⇔ x88 ⇔ 789f
fo88vic88 ⇔ x88 ⇔ win678 ⇔ okvip
BL555 ⇔ Kkwin ⇔ KJC ⇔ Link MB66
mv66af88 ⇔ 8x bet ⇔ iWinClub
789BET ⇔ B52 club ⇔ BL555 ⇔ 58WIN
OKFUN ⇔ 789F ⇔ MB66 ⇔ 8xbet
https://789betcom0.com/ ⇔ https://hi88.baby/
UU88 ⇔ 86bet ⇔ win678 ⇔ SHBET
zo88 ⇔ ev99 ⇔ Vua88 ⇔ go88
Kubet11 ⇔ topbet ⇔ v8club ⇔ tv88 ⇔ 77win
MB66 ⇔ pu88 ⇔ 789WIN ⇔ Sanclub
188v ⇔ f168 ⇔ QQ88 ⇔ bk8 ⇔ bk8
789club ⇔ iwinclub ⇔ Subnhanh ⇔ Bluphim
vua88 ⇔ Nettruyenviet ⇔ https://hi88o.com/
vn23 ⇔ KUWIN ⇔ kubet ⇔ 888new
NOHU ⇔ hi88 ⇔ https://fun88.social/
88clbxoso66 ⇔ https://vnalo789c.com/
https://qq88.fun/ ⇔ f168 ⇔ 888New ⇔ QQ88
daga ⇔ SHBET ⇔ keo nha cai ⇔ bl-555.site
https://bshbet.com/ ⇔ https://uk88.rocks
BJ88 ⇔ 789f ⇔ mm88 ⇔ RR88 ⇔ 78WIN
https://nohu90.ad/ ⇔ https://hello8880.net/
tv88hi88 ⇔ f168 ⇔ uu88 ⇔ 33win
NOHU ⇔ hi88com ⇔ 32win ⇔ Kuwin
ek333 ⇔ xoso66 ⇔  ⇔ Xóc đĩa online
Fun88 ⇔ https://f168.com.co/ ⇔ 28Bet
NOHU ⇔ KINGFUN ⇔ https://789club24.com/
https://98winlive.com/ ⇔ https://789win.voyage/
https://bet88yk.com/ ⇔ https://alo789apk.app/
https://33win100.com/ ⇔ Cổng game rikvip
69vn ⇔ vn88 ⇔ https://king88com.uk.net/
https://j88usd.com/ ⇔ https://okwin.technology/
game bài đổi thưởng ⇔ https://hello880.net/
https://789club60.com/ ⇔ https://jun88.black/
23win ⇔ 789p ⇔ f168 ⇔ nohu90 ⇔ onbet
nhatvip ⇔ https://789club24.com/ ⇔ 789 bet
win68 ⇔ 8xbet ⇔ go99 ⇔ j88 ⇔ 32 win
XX88 ⇔ 89BET ⇔ QQ88 ⇔ topbet
Uu88 ⇔ V8club ⇔ 78win ⇔ lương sơn tv
https://33win101.com/ ⇔ oxbet ⇔ Min88
78win ⇔ https://shbet.gg/ ⇔ XX88
daga ⇔ SV388 ⇔ 77ball ⇔ Mbet
SHBET ⇔ Kkwin ⇔ Phimbathu ⇔ Hay 88
https://shbet.solar/ ⇔ https://58winbank.com/
https://32winmb.com/ ⇔ 77BET ⇔ 12BET
vmaxVMAX ⇔ vl8838.com ⇔ K8CC
nhà cái uy tín ⇔ https://hi88.gives/
555win35.com ⇔ https://f168.law/
game bài đổi thưởng ⇔ alo88 ⇔ vwin ⇔ sut88
New88 ⇔ nhacaiuytinovn39.com ⇔ 79king
ww88 ⇔ vankhanhtv ⇔ https://13win.vegas/
game bài đổi thưởng ⇔ https://hi88.uno/
https://58win1.info/ ⇔ j88 ⇔ j88 ⇔ 69vn
bl555.com ⇔ 78 win ⇔ 789f ⇔ go 88
MM88 ⇔ Nh88 ⇔ 73bet ⇔ S666
11uu ⇔ 123B ⇔ 78win ⇔ 888win
https://xx88.ink/ ⇔ mv88 ⇔ YO88 ⇔ QQ88
789win ⇔ Bet88 ⇔ Vmax ⇔ Sun Win
tỷ lệ kèo nhà cái hôm nay ⇔ BIN88
https://j88.ventures/ ⇔ https://qq88.studio/
https://oldhamcarnival.org.uk/ ⇔ Leo88
88CLB ⇔ SV388 ⇔ https://cakhiatv88.net/
888Bi9 Bet ⇔ Tv88 ⇔ hi88 ⇔ F8BET
socolive trực tiếp74bet ⇔ VN168
Bong88 ⇔ kèo nhà cái ⇔ Sao789 ⇔ ok365
https://bet88.ventures/ ⇔ trực tiếp bóng đá
https://king88clb.com ⇔ nohu90 ⇔ kingfun
sv66nhà cái thabet ⇔ bong88 ⇔ Nn88
https://32win.vc/ ⇔ 888new ⇔ PG88 ⇔ PG88
EE88 ⇔ B52Club ⇔ B52 Club ⇔ lô đề hôm nay
sky88 ⇔ Vin777 ⇔ SV388 ⇔ MV66 ⇔ 32win
https://vankhanhtvv.com/ ⇔ game bài đổi thưởng
game bài đổi thưởng ⇔ https://u888lm.com/
https://sv66.coupons/ ⇔ https://f168.tech/
https://8kbetbh.com/ ⇔ https://ta88club.kim/
https://jun88.now/ ⇔ https://rr88.com.se/
Game bài đổi thưởng ⇔ tỷ lệ bóng đá
https://58win.jpn.com/ ⇔ https://xin88.sa.com/
https://qq88.photo/ ⇔ https://79king1.best
lô đề online ⇔ https://78winvina.com/
for88 ⇔ https://shbetasia.com/ ⇔ Bet88
https://888b-link.cc/ ⇔ https://sunwinn.deal/
https://sunwinn.team/ ⇔ https://bong88vn.wiki/
https://mb66az.com/ ⇔ https://shbet.racing/
789f ⇔ 88i ⇔ https://new88blog.org/
Jun88 ⇔ Jun88 ⇔ jun88 ⇔ 67bet
MM88 ⇔ https://789betw.co/ ⇔ UU88
https://qq887p.com/ ⇔ https://w88link1.com/
xocdia88 ⇔ 77ball ⇔ vuabet88 ⇔ betvisa
https://789freal.com/ ⇔ https://2789f.com/
https://fun88link0.com/ ⇔ https://fun88link1.com/
https://188betlink0.com/ ⇔ https://188betlink1.com/
https://188betlink2.com/ ⇔ https://w88link0.com/
thabet ⇔ 32WIN ⇔ J88 ⇔ ax88 ⇔ 789F
QQ88 COM ⇔ https://xx88.sale/ ⇔ 78win
https://bet88.pictures/ ⇔ https://xo88.group/
https://86bet.tech/ ⇔ https://nohu90.consulting/
789BET ⇔ https://i9betz4.com/ ⇔ đá gà 88
w88link2.com ⇔ w88link3.com ⇔ luck8
https://8dayvip.mobi/ ⇔ https://8dayvip.com/
QQ88 Com ⇔ af88 ⇔ https://79kingsr.com/
https://pg99yk.com/ ⇔  hm88.com ⇔ J88
https://luongson161.tv/ ⇔ 78WIN ⇔ MB66
78win ⇔ U888 ⇔ nn88 ⇔ 99win ⇔ hi88
https://8kbettt.com/ ⇔ https://hi88.biz/
https://thabetcasino.us.com/ ⇔ 789Win ⇔ vn88
https://hello88net.com/ ⇔ https://pg88.jpn.com/
https://az8888.org/ ⇔ https://fly88.gifts/
lc88 ⇔ VN88 ⇔ 69vn ⇔ nh88 ⇔ vn88
https://go800s.com/ ⇔ 888newport.com
tỷ lệ kèo nhà cái 88 ⇔ PG66 ⇔ 68win
BL555 ⇔ 23win ⇔ SV388 ⇔ SHBET ⇔ vua88
Game bài đổi thưởng ⇔ https://saobet.shop/
https://99ok99ok.com/ ⇔ hb88 ⇔ HM88
https://bet88.ventures/ ⇔
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây