Bài tập và thực hành 5
Chia sẻ bởi Trần Hữu Duy |
Ngày 10/05/2019 |
65
Chia sẻ tài liệu: Bài tập và thực hành 5 thuộc Tin học 11
Nội dung tài liệu:
Em hãy nhắc lại:
Cấu trúc khai báo kiểu xâu.
Cấu trúc và ý nghĩa các hàm và thủ tục trong xâu.
Cú pháp: Var: String[độ dài lớn nhất của xâu];
Khai báo xâu:
1. Thủ tục delete(S, vt, n)
Ý nghĩa: xoá n kí tự của biến xâu S bắt đầu từ vị trí vt.
2. Thủ tục insert(S1, S2, vt)
Ý nghĩa: Chèn xâu S1 vào xâu S2, bắt đầu ở vị trí vt.
3. Hàm copy(S, vt, n)
Ý nghĩa: Tạo xâu gồm n kí tự liên tiếp bắt đầu từ vị trí vt của xâu S.
4. Hàm length(S)
Ý nghĩa: cho giá trị là độ dài xâu S.
5. Hàm pos(S1, S2)
Ý nghĩa: Cho vị trí xuất hiện đầu tiên của xâu S1 trong xâu S2.
6. Hàm upcase(ch)
Ý nghĩa: Cho chữ cái in hoa ứng với chữ cái trong ch.
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 ?
Ví dụ:
A:= ‘23432’
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).
Không phải
Phải
Input:
Output:
Nhập vào xâu.
Xuất ra kết quả có phải là xâu đối xứng.
B:= ‘abcaabc’
C:= ‘abccba’
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.
b) Hãy viết lại chương trình mà không sử dụng biến trung gian p.
Cần phải so sánh bao nhiêu cặp kí tự trong xâu để biết để biết được xâu đó là xâu đối xứng?
So sánh tối đa length() div 2.
Nhận xét về các cặp ở vị trí đối xứng nhau trong xâu?
Giả sử xâu này là xâu đối xứng
Các kí tự ở vị trí này giống nhau.
Kí tự thứ i đối xứng với kí tự vị trí nào?
Kí tự thứ i đối xứng với kí tự vị thứ length() –i+1.
1 2 3 4 5 6 7 8 9
Dùng cấu trúc lặp nào để so sánh?
Có thể dùng for hoặc while.
Uses crt;
Var s: string;
x,i: byte;
p: Boolean;
Begin
Clrscr;
Write(` Nhap xau s=`);
readln(s);
x:=length(s);
p:=true;
For i:=1 to (x div 2) do
begin
If s[i]<> s[x-i+1] then p:=false;
break;
end;
If p then write(`doi xung`)
else write(`khong doi xung`);
readln;
End.
Ngoài ra còn có cách thứ 2:
While i<=(x div2) And (a[i]=a[x-i+1] Do
i:=i+1
If i>(x div 2) Then Write(‘Xau là palindrome) Else Write(‘Xau khong phai la palindrome);
Bài 2: 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’.
Input:
Output:
Nhập vào một xâu
Xuất ra xâu kết quả đã thay thế cụm từ ‘anh’ bằng cụm từ ‘em’
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
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.
Bài 3: 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 )
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.
S=’AbaCDacd’
Hãy cho biết 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)?
a
c
b
d
3 lần
1 lần
2 lần
2 lần
Trong bảng chữ cái tiếng Anh có bao nhiêu chữ cái?
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 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.
Gồm 26 chữ cái.
begin
s[i]:=upcase(s[i]);
if (s[i]>=`A`) and (s[i]<=`Z`) then
a[s[i]]:=a[s[i]]+1;
end;
Hãy viết đoạn chương trình đếm số lần xuất hiện chữ cái trong tiếng Anh?
Program bai02;
Uses crt;
Var a: array[`A`.. `Z`] of byte;
s: …;
i: …;
c: …;
Begin
clrscr;
write(`nhap xau :`);
readln(s);
for c:=`A` to `Z` do a[c]:=0;
for i:=1 to length(s) do
begin
………….
end;
for c:=`A` to `Z` do
if a[c]<>0 then
writeln( `So lan xuat hien`, c,`: `,a[c]);
readln;
End.
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.
Kiến thức cần nhớ:
Cần nắm cách khai báo biến xâu, các hàm và thủ tục xử lý xâu,...
Cần nắm thuật toán đếm số lần xuất hiện chữ cái tiếng anh, kiểm tra xâu đối xứng và thay thế tất cả các cụm kí tự .
Những kiến thức cần chuẩn bị:
Kiến thức về kiểu dữ liệu có cấu trúc.
Câu hỏi và bài tập trang 79 (SGK).
Cấu trúc khai báo kiểu xâu.
Cấu trúc và ý nghĩa các hàm và thủ tục trong xâu.
Cú pháp: Var
Khai báo xâu:
1. Thủ tục delete(S, vt, n)
Ý nghĩa: xoá n kí tự của biến xâu S bắt đầu từ vị trí vt.
2. Thủ tục insert(S1, S2, vt)
Ý nghĩa: Chèn xâu S1 vào xâu S2, bắt đầu ở vị trí vt.
3. Hàm copy(S, vt, n)
Ý nghĩa: Tạo xâu gồm n kí tự liên tiếp bắt đầu từ vị trí vt của xâu S.
4. Hàm length(S)
Ý nghĩa: cho giá trị là độ dài xâu S.
5. Hàm pos(S1, S2)
Ý nghĩa: Cho vị trí xuất hiện đầu tiên của xâu S1 trong xâu S2.
6. Hàm upcase(ch)
Ý nghĩa: Cho chữ cái in hoa ứng với chữ cái trong ch.
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 ?
Ví dụ:
A:= ‘23432’
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).
Không phải
Phải
Input:
Output:
Nhập vào xâu.
Xuất ra kết quả có phải là xâu đối xứng.
B:= ‘abcaabc’
C:= ‘abccba’
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.
b) Hãy viết lại chương trình mà không sử dụng biến trung gian p.
Cần phải so sánh bao nhiêu cặp kí tự trong xâu để biết để biết được xâu đó là xâu đối xứng?
So sánh tối đa length() div 2.
Nhận xét về các cặp ở vị trí đối xứng nhau trong xâu?
Giả sử xâu này là xâu đối xứng
Các kí tự ở vị trí này giống nhau.
Kí tự thứ i đối xứng với kí tự vị trí nào?
Kí tự thứ i đối xứng với kí tự vị thứ length() –i+1.
1 2 3 4 5 6 7 8 9
Dùng cấu trúc lặp nào để so sánh?
Có thể dùng for hoặc while.
Uses crt;
Var s: string;
x,i: byte;
p: Boolean;
Begin
Clrscr;
Write(` Nhap xau s=`);
readln(s);
x:=length(s);
p:=true;
For i:=1 to (x div 2) do
begin
If s[i]<> s[x-i+1] then p:=false;
break;
end;
If p then write(`doi xung`)
else write(`khong doi xung`);
readln;
End.
Ngoài ra còn có cách thứ 2:
While i<=(x div2) And (a[i]=a[x-i+1] Do
i:=i+1
If i>(x div 2) Then Write(‘Xau là palindrome) Else Write(‘Xau khong phai la palindrome);
Bài 2: 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’.
Input:
Output:
Nhập vào một xâu
Xuất ra xâu kết quả đã thay thế cụm từ ‘anh’ bằng cụm từ ‘em’
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
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.
Bài 3: 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 )
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.
S=’AbaCDacd’
Hãy cho biết 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)?
a
c
b
d
3 lần
1 lần
2 lần
2 lần
Trong bảng chữ cái tiếng Anh có bao nhiêu chữ cái?
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 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.
Gồm 26 chữ cái.
begin
s[i]:=upcase(s[i]);
if (s[i]>=`A`) and (s[i]<=`Z`) then
a[s[i]]:=a[s[i]]+1;
end;
Hãy viết đoạn chương trình đếm số lần xuất hiện chữ cái trong tiếng Anh?
Program bai02;
Uses crt;
Var a: array[`A`.. `Z`] of byte;
s: …;
i: …;
c: …;
Begin
clrscr;
write(`nhap xau :`);
readln(s);
for c:=`A` to `Z` do a[c]:=0;
for i:=1 to length(s) do
begin
………….
end;
for c:=`A` to `Z` do
if a[c]<>0 then
writeln( `So lan xuat hien`, c,`: `,a[c]);
readln;
End.
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.
Kiến thức cần nhớ:
Cần nắm cách khai báo biến xâu, các hàm và thủ tục xử lý xâu,...
Cần nắm thuật toán đếm số lần xuất hiện chữ cái tiếng anh, kiểm tra xâu đối xứng và thay thế tất cả các cụm kí tự .
Những kiến thức cần chuẩn bị:
Kiến thức về kiểu dữ liệu có cấu trúc.
Câu hỏi và bài tập trang 79 (SGK).
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Trần Hữu Duy
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)