Gõ chương trình pascal kiểu xâu

Xâu là gì? Để xử lý các chuỗi văn bản, Pascal đưa ra một kiểu dữ liệu mới gọi là xâu ký tự và được định nghĩa bằng từ khóa STRING. Xâu ký tự là dữ liệu bao gồm một dãy các ký tự trong bảng mã ASSCII.

Cách khai báo:

Var ten_xau: STRING[độ dài của xâu];

hoặc Var ten_xau:string;

Xâu ký tự trong bộ nhớ nó chiếm số byte bằng số ký tự cực đại được khai báo cộng với byte đầu tiên chứa số ký tự hiện có của xâu. Độ dài tối đa của xâu ký tự là 255.

- Cách nhập/xuất: Cách đọc hay viết kiểu STRING cũng tương tự như các kiểu dữ liệu khác, ta sử dụng các thủ tục READ, hoặc WRITE.
Ví dụ: 
Readln(st);
Writeln(st);

- Truy cập từng phần tử của xâu ký tự: tương tự mảng 1 chiều: thông qua tên biến kiểu STRING và chỉ số của nó
Ví dụ: 
St := 'Le Thanh Lam';
write(st[4]);
-> Kết quả: cho ra chữ T.

Các thao tác trên xâu ký tự:

1/ Phép cộng xâu:

Ví dụ:

st1:=’Le’; st2:=’Thanh’; St=st1 + st2; 

-> KQ: ‘Le Thanh’

2/ Phép so sánh: 
Hai xâu ký tự có thể so sánh với nhau bằng các phép so sánh =, >, <…
Nguyên tắc so sánh thực hiện như sau, chúng sẽ đem từng ký tự tương ứng với nhau để so sánh, xâu nào có ký tự có số thứ tự trong bảng mã ASCII lớn hơn thì xâu đó lớn hơn.
Hai xâu ký tự được gọi là bằng nhau khi chúng hoàn toàn giống nhau (có độ dài như nhau).
Ví dụ: ‘FILENAME’ = ’FILENAME ‘

3/ Các thủ tục và hàm chuẩn xử lý xâu ký tự
a. Hàm length(st): cho độ dài thực của xâu ký tự
ví dụ: st:=’le thanh’ thì LENGTH(st) cho bằng 8.

b/ Thủ tục DELETE(st, pos, num): xóa num ký tự trong xâu st kể từ vị trí pos
Ví dụ: st= ‘FILENAME’
Delete(st,5,4) lúc đó st cho ra là ‘FILE’

c/ Thủ tục INSERT(obj, st, pos): Thủ tục cho kết quả bằng cách chèn xâu ký tự có tên là Obj vào xâu st tại vị trí pos, những ký tự đứng sau pos sẽ được dời vềphía sau của xâu ký tự obj.
Ví dụ: obj:= ‘Thanh ‘
st:=’Le Lam’;
INSERT(obj,st,4) lúc đó st=’Le Thanh Lam’;

d/ Thủ tục STR(value, st): Thủ tục này thực hiện việc chuyển đối giá trị kiểu số(value) sang dạng xâu ký tự và gán cho biến st.
Ví dụ: n là một só nguyên có giá trị: n:=150;
STR(n:5,st) sẽ cho kết quả xâu st là: st=’ 150’;

e/ Thủ tục VAL(st, value,code) đối một xâu ký tự st sang dạng số và gán cho biến value, nếu biến đối thành công thì code sẽ nhận giá trị bằng 0. ngược lại thì cho giá trị khác không
Ví dụ: VAL(‘123’,value,code) lúc này code sẽ nhận giá trị bằng 0 và value=123

f/ Hàm COPY(st, pos, num): sao chép trong xâu st, num ký tự tại vị trí pos,
Ví dụ: st=’Le Thanh Lam’
COPY(st,4,5) = ‘Thanh’;

g/ Hàm CONCAT(s1,s2,…,sn): hàm cho ra 1 xâu mới bằng cách nối đuôi các xâu s1,s2,…,sn lại với nhau.
Ví dụ: CONCAT(‘Le ’,’Thanh ‘, ‘Lam’) = ‘Le Thanh Lam’;

h/ Hàm POS(st1,st2): hàm cho tavị trí tìm thấy đầu tiên của xâu s1 trong xâu s2.
Ví dụ: POS(‘Lam’,‘Le Thanh Lam’) = 10;

i/ Hàm Length(st): cho kết quả là một số nguyên chỉ chiều dài của chuỗi st.

ví dụ: lenght('PASCAL') --> 6

j/ Hàm UPCASE(Ký_tự)--> Đổi Ký_tự thành "KÝ_TỰ" in hoa

4. Truy xuất từng ký tự trong chuỗi

Có thể kết hợp dùng vòng lặp truy xuất các ký tự trong chuỗi.

Ví dụ: In ra các ký tự của chuỗi st[i] ra màn hình theo từng dòng

st:='PASCAL';

for i:=1 to 6 do writeln(st[i]);

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àm Ví 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. ch2:=’a’; ch2:=’E’; kt1:=Upcase(ch2); 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.

Gõ chương trình pascal kiểu xâu

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.

Gõ chương trình pascal kiểu xâu

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.

Gõ chương trình pascal kiểu xâu

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!