Tải bản đầy đủ (.ppt) (21 trang)

chương 6: Xử lý chuỗi

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (421.45 KB, 21 trang )



Nhóm 12:
Thị Đông Hoan Huyền Mai Quý
Thu Nga Thị Thêm
Lớp: Sư Phạm Tin 1


Tóm Tắt:

Học cách đọc báo cáo Read và Readln với các số giá trị. và
ký tự

Học cách sử dụng chức năng kết thúc của dòng EOLN để đọc
một dòng văn bản từ bàn phím, và chức năng kết thúc tập tin
của EOF để đọc một tập tin văn bản.

Học được một số chức năng quan trọng xử lý chuỗi và thủ tục
mà có sẵn trong các triển khai hiện đại của Pascal:
CONCAT
COPY
POS
INSERT
DELETE


4.
4.
Đọc một dòng văn bản: EOLN
Đọc một dòng văn bản: EOLN
5.


5.
Đọc một tập tin của văn bản: EOF
Đọc một tập tin của văn bản: EOF
6.
6.
Thao tác chuỗi
Thao tác chuỗi


7.
7.
String Chức năng và Thủ tục
String Chức năng và Thủ tục


1. Thao tác với dữ liệu văn bản:
1. Thao tác với dữ liệu văn bản:
2.Lời khuyên về báo cáo OUTPUT
2.Lời khuyên về báo cáo OUTPUT
3.
3.
Lời khuyên về báo cáo INPUT
Lời khuyên về báo cáo INPUT
8.Bài tập
8.Bài tập

1. Thao tác với dữ liệu văn bản:
1. Thao tác với dữ liệu văn bản:

Các file

Các file
INPUT tiêu chuẩn (bàn phím)
INPUT tiêu chuẩn (bàn phím)

C
C
ác
ác
file
file


OUTPUT
OUTPUT
tiêu chuẩn (màn hì
tiêu chuẩn (màn hì
nh)
nh)
1. Sử dụng lệnh READ, READLN: cần phải hiểu về báo cáo
đầu vào và cách làm việc với các loại dữ liệu khác nhau.

Dữ liệu kiểu số: Readln(biến 1, biến 2,…,biến k);

Dữ liệu kiểu kí tự hay chuỗi: Readln(biến);
Lưu ý: Lệnh READLN cần phải dùng để kiểm tra kết quả của
chương trình(Nếu không thì khi chạy chương trình sẽ trở về
màn hình soạn thảo văn bản mà không hiển thị KQ).
2.Các loại đầu vào của hỗn hợp: nên sử dụng từng lệnh
READLN riêng biệt cho từng loại kiểu dữ liệu khác nhau,
làm hạn chế lỗi trong chương trình

3. Dữ liêu nhập phải phù hợp với kiểu dữ liệu của biến
Biến kiểu Logic không nhập đươc từ bàn phím.
2.
2.
Lời khuyên về báo cáo INPUT
Lời khuyên về báo cáo INPUT




ví dụ 2.1
ví dụ 2.1
PROGRAM cthonhop;
PROGRAM cthonhop;
Const
Const
LF = CHR (10);
LF = CHR (10);
CR = CHR (13);
CR = CHR (13);
VAR
VAR
A, B: CHAR;
A, B: CHAR;
X, Y: INTEGER;
X, Y: INTEGER;
BEGIN
BEGIN
WRITE ('Enter hai nhân vật:');
WRITE ('Enter hai nhân vật:');

READLN (A, B);
READLN (A, B);
WRITE ('Nhập hai số nguyên:');
WRITE ('Nhập hai số nguyên:');
READLN (X, Y);
READLN (X, Y);
WRITELN ('đầu vào của bạn đã được giao cho các biến như sau:', CR,
WRITELN ('đầu vào của bạn đã được giao cho các biến như sau:', CR,
LF,
LF,
'A =', A, CR, LF,
'A =', A, CR, LF,
'B =', B, CR, LF,
'B =', B, CR, LF,
'X =', X, CR, LF,
'X =', X, CR, LF,
'Y =', Y)
'Y =', Y)
END.
END.


Ví dụ 2:
PROGRAM ReadLnNumbers (INPUT, OUTPUT);
Const
CR = CHR (13);
LF = CHR (10);
VAR
A, C, D, E: INTEGER;
B: REAL;

BEGIN
WRITE ('Nhập A, B, C:');
{Nếu bạn nhập nhiều hơn ba giá trị, chỉ là người đầu tiên ba sẽ được đọc}
READLN (A, B, C);
{Trả một READLN tiếp theo sẽ bắt đầu đọc các giá trị sau khi Line End-Of-
đánh dấu, bỏ qua bất kỳ thức ăn thừa từ đọc trước}
WRITE ('Nhập D, E:');
READLN (D, E);
WRITELN ('A =', A, ', B =', B: 00:02, ', C =', C, CR, LF,
'D =', D ', E =', E)
END.


3.Lời khuyên về báo cáo OUTPUT
3.Lời khuyên về báo cáo OUTPUT
Muốn hiển thị nhiều dòng văn bản hoặc hiển thị kết
Muốn hiển thị nhiều dòng văn bản hoặc hiển thị kết
quả số trên riêng biệt, có thể sử dụng nhiều WRITELN
quả số trên riêng biệt, có thể sử dụng nhiều WRITELN
báo cáo là số lượng các dòng cần thiết hoặc là
báo cáo là số lượng các dòng cần thiết hoặc là
sử dụng
sử dụng
mã ASCII 13 và 10.
mã ASCII 13 và 10.
In tất cả các kết quả sử dụng một WRITE hoặc
In tất cả các kết quả sử dụng một WRITE hoặc
WRITELN.
WRITELN.



Ví dụ 3:
Ví dụ 3:
PROGRAM Display1(INPUT,OUTPUT);
PROGRAM Display1(INPUT,OUTPUT);
CONST
CONST
LF = CHR(10);
LF = CHR(10);
CR = CHR(13);
CR = CHR(13);
VAR
VAR
X, Y, Z :INTEGER;
X, Y, Z :INTEGER;
BEGIN
BEGIN
WRITE(‘Nhập ba số nguyên: ');
WRITE(‘Nhập ba số nguyên: ');
READLN(X, Y, Z);
READLN(X, Y, Z);
WRITELN(‘X=‘,X,CR,LF, 'Y=', Y, CR, LF, 'Z=', Z)
WRITELN(‘X=‘,X,CR,LF, 'Y=', Y, CR, LF, 'Z=', Z)
END.
END.
CR(carriage return):phím xuống dòng
CR(carriage return):phím xuống dòng
LF( line feed): tín hiệu xuống dòng, thể hiện kết quả trên
LF( line feed): tín hiệu xuống dòng, thể hiện kết quả trên
các dòng riêng biệt.

các dòng riêng biệt.
CR + LF cho tác dụng như là ENTER
CR + LF cho tác dụng như là ENTER


4.
4.
Đọc một dòng văn bản: EOLN
Đọc một dòng văn bản: EOLN
L
L
à một chức năng Boolean
à một chức năng Boolean
dùng
dùng
để
để
chỉ vị trí
chỉ vị trí
cuối
cuối
dòng trong
dòng trong
read
read
của file INPUT.
của file INPUT.
C
C
hức năng là

hức năng là
cho giá trị F
cho giá trị F
ALSE cho đến khi cuối
ALSE cho đến khi cuối
cùng của dòng nhãn hiệu phát hiện, sau đó nó sẽ
cùng của dòng nhãn hiệu phát hiện, sau đó nó sẽ
trở thành TRUE.
trở thành TRUE.
Nếu đang ở giá trị False có thể sử dụng vòng
Nếu đang ở giá trị False có thể sử dụng vòng
lặp WHILE NOT EOLN DO(đưa con trỏ về
lặp WHILE NOT EOLN DO(đưa con trỏ về
cuối dòng) để trở về giá trị True.
cuối dòng) để trở về giá trị True.


5.
5.
Đọc một tập tin của văn bản: EOF
Đọc một tập tin của văn bản: EOF
Là một chức năng Boolean, kết thúc tập tin, được sử
dụng để phát hiện cuối cùng của tập tin đánh dấu. Khi
con trỏ ở phần cuối của tập tin thì giá trị trả về là true,
ngược lại là False.
Khi sử dụng bàn phím cho đầu vào phần cuối tập tin sẽ
hoàn thành nếu bạn nhấnCtrl + Z (ASCII 26)Chức
năng này rất hữu ích để đọc một vài dòng văn bản
(một tập tin).



6.
6.
Thao tác chuỗi
Thao tác chuỗi


Ví dụ6:
Ví dụ6:
PROGRAM
PROGRAM
string1;
string1;
Const
Const
LF = CHR (10);
LF = CHR (10);
VAR
VAR
Tên: STRING [30];
Tên: STRING [30];
I: INTEGER;
I: INTEGER;
BEGIN
BEGIN
WRITE ('Hãy nhập tên
WRITE ('Hãy nhập tên
bạn
bạn
:');

:');
READLN (Tên);
READLN (Tên);
FOR
FOR
I: = 1 TO
I: = 1 TO
LENGTH
LENGTH
(Tên) DO
(Tên) DO
WRITE
WRITE
(Tên [I], LF)
(Tên [I], LF)
;
;
READLN;
READLN;
END.
END.
Các thao tác trên chuỗi:
Các thao tác trên chuỗi:
Phép cộng chuỗi
Phép cộng chuỗi
Phép so sánh chuỗi
Phép so sánh chuỗi
Vd: ‘tin’ + ‘học’ = ‘tinhọc’
Vd: ‘tin’ + ‘học’ = ‘tinhọc’



thanh’ > ‘thao’ vì ‘n’ > ‘o’
thanh’ > ‘thao’ vì ‘n’ > ‘o’


thanh’> ‘than’
thanh’> ‘than’

có thể xây dựng một mảng của kiểu
có thể xây dựng một mảng của kiểu
STRING để lưu trữ các mục liên quan như tên
STRING để lưu trữ các mục liên quan như tên
hay địa chỉ
hay địa chỉ



có thể sắp xếp tên theo thứ tự bằng cách sử dụng
có thể sắp xếp tên theo thứ tự bằng cách sử dụng
cùng một thuật toán mà bạn đã sử dụng trước để
cùng một thuật toán mà bạn đã sử dụng trước để
sắp xếp các con số.
sắp xếp các con số.




7.
7.
String Chức năng và Thủ tục

String Chức năng và Thủ tục


a/Các hàm:
a/Các hàm:

LENGTH(st):
LENGTH(st):
cho biết độ dài của chuỗi kí tự
cho biết độ dài của chuỗi kí tự
Ví dụ:
Ví dụ:


với St:=‘ngochan’ thì Length(St) có giá trị là 7.
với St:=‘ngochan’ thì Length(St) có giá trị là 7.
ST:=‘’ thì length có giá trị là 0.
ST:=‘’ thì length có giá trị là 0.

POS(S, st):
POS(S, st):
cho ta vị trí đầu tiên của xâu S gặp trong xâu St.
cho ta vị trí đầu tiên của xâu S gặp trong xâu St.
Ví dụ:
Ví dụ:
Với St:=‘1234545’;S:=’45’ thì
Với St:=‘1234545’;S:=’45’ thì
Pos (S,st)cho giá trị bằng 4
Pos (S,st)cho giá trị bằng 4
Pos(4S,st) cho giá trị bằng 0 vì không tìm thấy

Pos(4S,st) cho giá trị bằng 0 vì không tìm thấy



COPY( st, k ,m):
COPY( st, k ,m):
coppy m kí tự của chuỗi st từ vị trí k.
coppy m kí tự của chuỗi st từ vị trí k.
Ví dụ:
Ví dụ:
St:=‘123456789’;St1 là một xâu kí tự khác.
St:=‘123456789’;St1 là một xâu kí tự khác.
St1:=copy(St,3,2) sẽ cho St1:=’34’
St1:=copy(St,3,2) sẽ cho St1:=’34’

CONCAT( st1, st2… stn):
CONCAT( st1, st2… stn):
là hàm ghép nối các xâu kí tự
là hàm ghép nối các xâu kí tự
st1,st2,…,stn thành 1 xâu kí tự như xâu đã viết, có thể dùng
st1,st2,…,stn thành 1 xâu kí tự như xâu đã viết, có thể dùng
phép ‘+’ để ghép nối xâu kí tự.
phép ‘+’ để ghép nối xâu kí tự.
b. Các thủ tục:
b. Các thủ tục:



DELETE( St,k,m):
DELETE( St,k,m):

là thủ tục xóa đi m kí tự từ vị trí k trong xâu
là thủ tục xóa đi m kí tự từ vị trí k trong xâu
St.
St.
Ví dụ:
Ví dụ:
St:=‘ngochan’;
St:=‘ngochan’;
Sau khi goi delete(St,1,4) thì St;=‘han’
Sau khi goi delete(St,1,4) thì St;=‘han’
Chú ý
Chú ý
:
:
P+N> length(st) thì St chỉ xóa những kí tự nằm trong length(st)
P+N> length(st) thì St chỉ xóa những kí tự nằm trong length(st)



INSERT(S,St,k):
INSERT(S,St,k):
chèn xâu kí tự S vào xâu St từ vị trí k.
chèn xâu kí tự S vào xâu St từ vị trí k.
St:=‘ngochan’
St:=‘ngochan’
Insert(12,St,4);
Insert(12,St,4);
St1:=‘ngoc12han’
St1:=‘ngoc12han’
Chú ý:

Chú ý:
k> length(st) thì S được nối vào cuối của st
k> length(st) thì S được nối vào cuối của st

STR(x, st):
STR(x, st):
biến đổi giá trị số nguyên (thực)thành một
biến đổi giá trị số nguyên (thực)thành một
dãy kí tự biểu diễn số và gán cho chuỗi St.
dãy kí tự biểu diễn số và gán cho chuỗi St.
Ví dụ;
Ví dụ;
Str( 4752, st’) thì St:= ‘4752’;
Str( 4752, st’) thì St:= ‘4752’;
x=34.95
x=34.95
Str(x:7:3,st) thì St:=‘ 34.950’
Str(x:7:3,st) thì St:=‘ 34.950’



Val(St,x,code)
Val(St,x,code)
là hàm chuyển xây kí tự St sang x giá trị số,
là hàm chuyển xây kí tự St sang x giá trị số,
code là số ngyên phát hiện lỗi
code là số ngyên phát hiện lỗi
Ví dụ:
Ví dụ:
St:=‘123.56’

St:=‘123.56’
Val(St,x,k) thì cho x=123.56, code=0
Val(St,x,k) thì cho x=123.56, code=0
Nếu St:=‘123A’(ko biểu diễn đúng kiểu số thực do có A)
Nếu St:=‘123A’(ko biểu diễn đúng kiểu số thực do có A)
Val (St,x,code) cho x không xác định và code=4
Val (St,x,code) cho x không xác định và code=4
Chú ý
Chú ý
: các thủ tục và hàm không được sử dụng đối với file
: các thủ tục và hàm không được sử dụng đối với file
dạng texteek,filePos,fileSize
dạng texteek,filePos,fileSize


1. Viết chương trình Pascal để đọc một dòng văn bản từ bàn phím
và thay đổi tất cả ký tự chữ thường thành chữ hoa.
Bài tập:
2. Một trong những ứng dụng thú vị của xử lý văn bản được mã hóa
và giải mã, một chương trình đơn giản để mã hóa một chuỗi là viết
nó về phía sau. Viết chương trình đọc dòng văn bản từ bàn phím và
hiển thị nó về phía sau.
3. Viết một chương trình để đọc một dòng văn bản hoặc một tập tin văn
bản chuyển từ chữ hoa thành chữ thường và ngược lại.
4.Viết chương trình để mã hóa một chuỗi văn bản mà mỗi kí tự
được thay thế bằng kí tự kế tiếp nó. Ngoài ra viết chương trình giải
mã chuyển đổi thành các văn bản ban đầu trước khi mã hóa


1.Program BT_1;

Var Ch:string[30]; I:integer; T: boolean;
Begin
Write(‘nhap mot chuoi ki tu:’); Readln(Ch);
For I:=1 to length(Ch) do
Begin
T:=(ORD(Ch[I])>96) AND(ORD(Ch[I])<123);
If T then Ch [I]:=CHR(ORD(Ch[I])-32);
Write(Ch[I]);
End;
Readln;
End.


2. Program bt_2;
Var Ch:string; I:integer;
Begin
Write(‘moi ban nhap mot chuoi va nhan enter:’);
Readln(Ch);
Writeln(‘chuoi duoc dao nguoc la:’);
For I:= length(Ch) down to 1 do
Writeln(Ch[I]);
Readln;
End.


3. Program bt_3;
Var Ch: string[30];I: integer; T,H: boolean;
Begin
Write(‘nhap mot chuoi ki tu:’);
Readln(Ch);

For I:=1 to length(Ch) do
Begin
T:=(ORD(Ch[I])>96) AND(ORD(Ch[I])<132);
H:=(ORD(Ch[I])>65) AND((ORD(Ch[I])<90);
If T then Ch[I]:=CHR(ORD(Ch[I])-32) else if H then
Ch[I]:=CHR(ORD(Ch[I])+32);
Write(Ch[I]);
End;
Readln;
End.


4. Program bt_4;
Var Ch: string; I:integer;
Begin
Writeln(‘moi ban nhap va nhan enter:’); Readln(Ch);
For I:=1 to length (Ch) do
Begin
Ch[I]:=SUCC(Ch[I]);
Write(Ch[I]); Readln(Ch[I]);
END;
For I:=1 to length(Ch[I]) do
Begin Ch[I];= PRED(Ch[I]);
Writeln(‘chuoi giai ma la:’ Ch[I]);
End;
Readln;
End.



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×