Bài tập và thực hành 5
1. Mục đích, yêu cầu
Làm quen với việc tìm kiếm, thay thế và biến đổi xâu.
2. Nội dung
Bài 1: Nhập 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?
Gợi ý làm bài:
Xâu đối xứng có tính chất: Đọc nó từ trái sang phải cũng thu được kết quả giống như đọc từ phải sang trái (còn được gọi là xâu Palindrome).
- Xác định bài toán:
+ Input: Nhập vào xâu.
+ Output: Xuất ra kết quả có phải là xâu đối xứng?
- Mô tả thuật toán:
+ Bước 1: Nhập Xâu S;
+ Bước 2: Tính chiều dài xâu S;
+ Bước 3: Tạo xâu P (xâu rỗng);
+ Bước 4: Với I = length(S) à 1 thì P:=P+S[i];
+ Bước 5: Nếu S=P thì S là xâu đối xứng, ngược lại thì không phải là xâu đối xứng.
- Cài đặt chương trình:
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 la Palindrome’)
else
write(‘Xau khong la Palindrome’);
readln;
END.
- Viết lại chương trình trên trong đó không dùng biến xâu p:
Uses crt;
Var s: string;
x,i: byte;
palin: Boolean;
Begin
Clrscr;
Write(' Nhap xau s=');
readln(s);
x:=length(s);
palin:=true;
For i:=1 to (x div 2) do
begin
If s[i]<> s[x-i+1] then palin:=false;
break;
end;
If palin then write('doi xung')
else write('khong doi xung');
readln;
End.
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ữ hoa hay chữ thường ).
Gợi ý làm bài:
- Xác định bài toán:
+ Input: Nhập vào xâu
+ Output: Xuất ra số lần xuất hiện của các chữ cái tiếng Anh trong xâu vừa nhập.
- Mô tả thuật toán:
+ Bước 1: Nhập vào xâu S.
+ Bước 2: Tạo mảng A lưu trữ số lần xuất hiện của chữ cái tiếng Anh.
+ Bước 3: Khởi tạo cho từng phần tử mảng.
+ Bước 4: Nếu trong xâu S chữ cái A \(\rightarrow\) Z thì tăng giá trị của phần tử trong mảng.
+ Bước 5: Xuất ra mảng vừa tạo.
- Cài đặt chương trình:
Program bai02;
Uses crt;
Var a: array['A'.. 'Z'] of byte;
s: string;
i: byte;
c: char;
Begin
clrscr;
write('nhap xau :');
readln(s);
for c:='A' to 'Z' do a[c]:=0;
for i:=1 to length(s) do
begin
s[i]:=upcase(s[i]);
if (s[i]>='A') and (s[i]<='Z') then
a[s[i]]:=a[s[i]]+1;
end;
for c:='A' to 'Z' do
if a[c]<>0 then
writeln( 'So lan xuat hien', c,': ',a[c]);
readln;
End.
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'.
Gợi ý làm bài:
- Xác định bài toán:
+ Input: Nhập vào một xâu.
+ Output: Xuất ra xâu kết quả đã thay thế cụm từ ‘anh’ bằng cụm từ 'em'.
- Mô tả thuật toán:
+ Bước 1: Tìm vị trí bắt đầu của xâu 'anh';
+ Bước 2: Xóa xâu 'anh' vừa tìm thấy;
+ Bước 3: Chèn xâu 'em' vào xâu S tại vị trí trước đây xuất hiện xâu 'anh' (lặp lại các bước trên cho đến khi không còn xâu 'anh');
+ Bước 4: In ra xâu S.
- Cài đặt chương trình:
Uses crt;
Var s: string;
i: byte;
Begin
Clrscr;
Write('Nhap xau S:'); Readln(s);
i:=Pos('anh',s);
While i<> 0 do
Begin
Delete(s,i,3);
Insert('em',s,i);
I:=Pos('anh',s);
End;
writeln(S);
readln;
End.
1. Mục đích, yêu cầu
Làm quen với việc tìm kiếm, thay thế và biến đổi xâu.
2. Nội dung
Bài 1: Nhập 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?
Gợi ý làm bài:
Xâu đối xứng có tính chất: Đọc nó từ trái sang phải cũng thu được kết quả giống như đọc từ phải sang trái (còn được gọi là xâu Palindrome).
- Xác định bài toán:
+ Input: Nhập vào xâu.
+ Output: Xuất ra kết quả có phải là xâu đối xứng?
- Mô tả thuật toán:
+ Bước 1: Nhập Xâu S;
+ Bước 2: Tính chiều dài xâu S;
+ Bước 3: Tạo xâu P (xâu rỗng);
+ Bước 4: Với I = length(S) à 1 thì P:=P+S[i];
+ Bước 5: Nếu S=P thì S là xâu đối xứng, ngược lại thì không phải là xâu đối xứng.
- Cài đặt chương trình:
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 la Palindrome’)
else
write(‘Xau khong la Palindrome’);
readln;
END.
- Viết lại chương trình trên trong đó không dùng biến xâu p:
Uses crt;
Var s: string;
x,i: byte;
palin: Boolean;
Begin
Clrscr;
Write(' Nhap xau s=');
readln(s);
x:=length(s);
palin:=true;
For i:=1 to (x div 2) do
begin
If s[i]<> s[x-i+1] then palin:=false;
break;
end;
If palin then write('doi xung')
else write('khong doi xung');
readln;
End.
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ữ hoa hay chữ thường ).
Gợi ý làm bài:
- Xác định bài toán:
+ Input: Nhập vào xâu
+ Output: Xuất ra số lần xuất hiện của các chữ cái tiếng Anh trong xâu vừa nhập.
- Mô tả thuật toán:
+ Bước 1: Nhập vào xâu S.
+ Bước 2: Tạo mảng A lưu trữ số lần xuất hiện của chữ cái tiếng Anh.
+ Bước 3: Khởi tạo cho từng phần tử mảng.
+ Bước 4: Nếu trong xâu S chữ cái A \(\rightarrow\) Z thì tăng giá trị của phần tử trong mảng.
+ Bước 5: Xuất ra mảng vừa tạo.
- Cài đặt chương trình:
Program bai02;
Uses crt;
Var a: array['A'.. 'Z'] of byte;
s: string;
i: byte;
c: char;
Begin
clrscr;
write('nhap xau :');
readln(s);
for c:='A' to 'Z' do a[c]:=0;
for i:=1 to length(s) do
begin
s[i]:=upcase(s[i]);
if (s[i]>='A') and (s[i]<='Z') then
a[s[i]]:=a[s[i]]+1;
end;
for c:='A' to 'Z' do
if a[c]<>0 then
writeln( 'So lan xuat hien', c,': ',a[c]);
readln;
End.
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'.
Gợi ý làm bài:
- Xác định bài toán:
+ Input: Nhập vào một xâu.
+ Output: Xuất ra xâu kết quả đã thay thế cụm từ ‘anh’ bằng cụm từ 'em'.
- Mô tả thuật toán:
+ Bước 1: Tìm vị trí bắt đầu của xâu 'anh';
+ Bước 2: Xóa xâu 'anh' vừa tìm thấy;
+ Bước 3: Chèn xâu 'em' vào xâu S tại vị trí trước đây xuất hiện xâu 'anh' (lặp lại các bước trên cho đến khi không còn xâu 'anh');
+ Bước 4: In ra xâu S.
- Cài đặt chương trình:
Uses crt;
Var s: string;
i: byte;
Begin
Clrscr;
Write('Nhap xau S:'); Readln(s);
i:=Pos('anh',s);
While i<> 0 do
Begin
Delete(s,i,3);
Insert('em',s,i);
I:=Pos('anh',s);
End;
writeln(S);
readln;
End.