0

(Pascal) Chủ đề 7 – Kiểu xâu (STRING)

1. Khai báo

Cú pháp: Var <Tên biến>:String[Độ dài lớn nhất của xâu];

Khai báo: Var st:String;có ý nghĩa  là xâu  st có độ dài tối đa 255 kí tự.

Tham chiếu đến vị trí thứ 3 viết: St[3], vị trí thứ 5 viết St[5], vị trí thứ i viết: St[i].

– Có thể xem xâu là mảng một chiều mà các phần tử là một kí tự.

– Cho xâu: St=’Tin hoc ung dung’ g Kết quả St[3] là ‘n

2. Các thao tác xử lý xâu

a) Ghép xâu

Phép ghép xâu dùng kí hiệu “+

Chú ý: Phép ghép xâu sử dụng kí tự dấu “+” nhưng không có tính chất giao hoán.

b) So sánh (Cho xâu A và B)

  • A>B: Kí tự đầu tiên khác nhau tính từ bên trái qua trong xâu A có mã Ascii lớn hơn.
  • A=B: Giống nhau hoàn toàn.
  • Hai xâu B có độ dài lớn hơn xâu A và xâu A là đoạn đầu của xâu B thì xâu B>A.
Thủ tục / HàmVí dụKết quả
Delete(st,vt,n);St:=’Cong nghe thong tin’; Delete(st,5,5)st=’Cong thong tin’
Insert(s1,s2,vt);s2:=’May tinh IBM PC’; s1:=’ vi ’; Insert(s1,s2,4);s2=’May vi tinh IBM PC’
Copy(S,vt,N)S:=’Truong THPT NBKCS’; St:=Copy(S,13,5);St=’NBKCS’
Length(s)S:=’Truong THPT NBKCS’; n:=Length(S);n=17
Pos(s1,s2)s2:=’May vi tinh IBM PC’;
s1:=’vi ’; vt:=Pos(s1,s2);
vt=5
Upcase(ch) * Free Pascal thì ch có thể là một xâu.ch1:=’a’; ch2:=’E’; kt1:=Upcase(ch1); kt2:=Upcase(ch2);kt1=’A’ kt2=’E’
Ord(ch)m:=Ord(‘A’);=65; n:=Ord(‘a’);=97;m=65; n=97
Chr(n)kt1:= Chr(65); kt2:= Chr(97);kt1=’A’; kt2=’a’

– Hàm trả về giá trị duy nhất, hàm sẽ được dùng trong các biểu thức, phép gán và trong các hàm, thủ tục khác.

– Các thủ tục được sử dụng như các lệnh chuẩn của Pascal.

* Một ví dụ về sử dụng kiểu xâu để thực hiện các phép toán số học với số lớn:

Số a=234509…1 (hàng trăm chữ số)

Số b=1244 ….2 (hàng trăm chữ số)

Tính: a+b; a*b;Xây dựng kiểu dữ liệu lớn dùng mảng 1 chiều hoặc kiểu xâu.

3. Một số ví dụ

Bài 1: Lập chương trình nhập vào 2 xâu st1,st2 và đưa ra màn hình xâu dài hơn, nếu bằng nhau thì đưa ra màn hình xâu thứ 2.

Program vidu1;
Var st1,st2:String[30];
Begin
Write(‘Nhap ho ten thu nhat:’); readln(st1);
Write(‘Nhap ho ten thu hai:’); readln(st2);
If length(st1)>length(st2) then   Write(st1)
Else Write(st2);
Readln;
End.

Bài 2: Lập chương trình nhập vào một xâu st và hiện ra màn hình xâu đảo ngược của nó.

Program daoxau;
Var St, St1:String;
Begin
Write(‘Nhap xau St=’); Readln(st);
st1:=’’;
For i:=length(st) downto 1 do st1:=st1+st[i];
Write(‘Xau dao nguoc la:’,st1);
Readln;
End.

Bài 3: Lập chương trình nhập vào một xâu st hiện ra màn hình các kí tự là các chữ số trong xâu đó.

Program hienchuso;
Var St:String;
Begin
Write(‘Nhap xau St=’); Readln(st);
Write(‘Cac chu so:’);
For i:=1 to length(st) do
If (st[i]>=’0’) and (st[i]<=’9’) Then  Write(st[i]:4);
Readln;
End.

Bài 4: Lập chương trình nhập vào 1 xâu, đếm số lượng kí tự là chữ số trong xâu.

Hướng dẫn

* Nhập xâu
* Khởi tạo d=0, duyệt từ đầu xâu đến cuối xâu, nếu kí tự thứ i trong xâu: thì S[i] là chữ số, khi đó tăng biến d lên 1 đơn vị.
* Duyệt xong, thông báo kết quả là d.

Program demso;
Var St:String; i,d:byte;
Begin
        Write(‘Nhap xau St=’); Readln(st);
        For i:=1 to length(st)do  
        If(st[i]>=’0’)and(st[i]<=’9’)Then      
                d:=d+1;
        Write(‘So chu so trong xau la:’,d);
Readln;
End.

Bài 5: Lập chương trình nhập vào một xâu bất kỳ, đổi xâu đó thành xâu in thường.

Program doiktthuong;
Var St:String;   i:byte;
Begin
  Write(‘Nhap xau St=’); Readln(st);
For i:=1 to length(st) do
    If (St[i] >=’A’) And (St[i]<=’Z’) Then
      St[i]:=Chr(Ord(St[i])+32);
&nbsp Write(‘Xau doi ra chu thuong la:’,st);
Readln;
End.

Bài 6: Lập chương trình nhập vào một xâu và kiểm tra xâu đó có đối xứng gương hay không?

Program daoxau;
Var St, St1:String;
Begin
Write(‘Nhap xau St=’); Readln(st);
st1:=’’;
For i:=length(st) downto 1 do
st1:=st1+st[i];
If st1=st then Write(‘Xau doi xung guong!’)
Else Write(‘Xau khong doi xung guong!’);
Readln;
End.
Program KT_csc;
Uses crt;
Var A:Array[1..100] of Integer; d,i,n:byte; kt:boolean;
Begin
Clrscr;
{Nhap so pt N}
Write(‘Nhap so phan tu N=’); Readln(n);
  {Nhap day A[1],A[2],…,A[N]}
   For i:=1 to n do
     Begin
       write(‘A[‘,i,’]=’);  readln(A[i]);
     End;
     d:=A[2]-A[1];
For i:=3 to n do
        If A[i] = A[1]+(i-1)*d then kt:=true
        Else
          Begin
             kt:=false;
             break;
          End;
i:=3; kt:=true;
While kt and (i<=N) Do
       Begin
         if A[i]-A[i-1]<>d then kt:=false;
       i:=i+1;
       End;
If kt then write(‘Day A la CSC’)
Else write(‘Day A ko la CSC’);
readln;
End.
Program Dem_snt;
Uses crt;
Var A:Array[1..100] of Integer;
    du,snt,i,k,n:byte;
Begin
clrscr;
write(‘Nhap so phan tu N=’);
readln(n);
{Nhap day A[1],A[2],…,A[N]}
For i:=1 to n do
   Begin
       write(‘A[‘,i,’]=’); readln(A[i]);
   End;
  snt:=0;
For i:=1 to n do
  Begin
      du:=0;
      For k:=1 to abs(A[i]) do
        If A[i] mod k =0 Then du:=du+1;
      If du=2 Then snt:=snt+1;
    End;
    write(‘So luong SNT la:’,snt);
Readln;
End.
Program Tim_FiboN;
Uses crt;
Var F1,F2,F: Word; N,i:Word;
Begin
clrscr;
write(‘Nhap gia tri N=’);
readln(n);
F1:=1; F2:=1;
For i:=3 to N do
    Begin
       F:=F1+F2;
F1:=F2;
F2:=F; 
    End;
write(‘So Fibo thu ’,N,’la:’,F);
readln;
End.

Xin chào, hẹn các bạn ở chuyền đề kế tiếp >>

Thanks!

Đào Đình Ngọc

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *