Bài tập Turbo Pascal kiểu xâu - Phần 1

Đề: Nhập vào một xâu S từ bàn phím rồi kiểm tra xem đó có phải là xâu đối xứng hay không.
Xâu đối xứng là xâu mà đi từ phải sang thì cũng giống như đi từ bên trái sang, ví dụ: 'khanhnahk' 'abccba' .

#Cách 1

Cách này trong SGK Tin Học 11 cũng đã viết, chũng ta sẽ tạo ra một xâu đảo ngược so với xâu S - Để tạo được xâu S1 đảo ngược so với xâu S ta sẽ cho vòng lặp chạy từ length(s) tới 1 rồi cộng vào xâu S1 từng kí tự S[i].
Sau đó ta sẽ so sánh xâu S1 và S ban đầu, nếu hai xâu bằng nhau thì xâu S đối xứng, ngược lại xâu S không đối xứng.
Bên dưới là chương trình:
PROGRAM XAU_DOI_XUNG;
USES CRT;
VAR S,S1:STRING;
    i:INTEGER;
BEGIN
clrscr;
   writeln('Nhap xau '); readln(s);
   for i:= (length(s)) downto 1 do
        S1:=S1+S[i];
   if (S1=S) then write('Xau doi xung') else writeln('Xau khong doi xung');
readln;
END.

#Cách 2

Cách này sẽ nhanh hơn khoảng 2 lần so với cách 1.
Đối với cách này ta sẽ chạy vòng lặp For Do từ 1 tới một nửa xâu (Length(s) Div 2) và biến kiểm tra KT thuộc kiểu Boolean .Ban đâu thì KT:=TRUE,  trong quá trình chạy ta sẽ so sánh kí tự với kí tự đối xứng của nó (S[length(s) - i + 1]) nếu nó bằng ta tiếp tục so sánh nếu không bằng ta sẽ gán KT:=FALSE và dừng vòng lặp bằng lệnh BREAK; 
Sau khi chạy vòng lặp xong ta hãy kiểm tra biến KT, nếu nó TRUE tức là xâu đối xứng, ngược lại thì xâu không đối xứng.
program xaudoixung;
uses crt;
var s : string;
    k: integer;

procedure xdx(s : string );
var i : integer;
    kt: boolean;
begin
k := (length(s));
kt:=true; {gia su xau s doi xung}

    for i:= 1 to  (k div 2) do
      begin
         if s[i] <> s[k-i+1] then
            begin
               kt:=false; 
               break;
            end;
      end;
   
if kt= true then  writeln('Xau doi xung')
else writeln('Xau khong doi xung');
end;

begin
clrscr;
writeln('Nhap xau '); readln(s);
xdx(s);
readln;
end.

Comments