Lay doi xung qua tam (2 cap so)

Một phần của tài liệu Sáng tạo trong thuật toán và lập trình với ngôn ngữ Pascal và C# Tập 1 - Chương 8 pptx (Trang 27 - 29)

Bài 8.4 Ma phương

Lay doi xung qua tam (2 cap so)

Lay doi xung qua tam (2 cap so) ---*) procedure Tam(i,j: word);

begin

M[n-i+1,n-j+1] := Num(i,j); M[n-i+1,j] := Num(i,n-j+1); M[i,n-j+1] := Num(n-i+1,j); end;

(*--- Doi xung doc Doi xung doc

---*) procedure Doc(i,j: word); procedure Doc(i,j: word);

begin

M[i,j] := Num(i,n-j+1); M[i,n-j+1] := Num(i,j); end;

(*---

Doi xung ngang

---*) procedure Ngang(i,j: word); procedure Ngang(i,j: word); begin

M[i,j] := Num(n-i+1,j); M[n-i+1,j] := Num(i,j); end;

Mỗi lần xử lớ xong một dũng ta cần quay xõu mẫu s thờm một vị trớ theo chiều kim đồng hồ, kớ tự cuối xõu được đưa về đầu xõu, cỏc kớ tự khỏc được dịch qua phải một vị trớ.

Thớ dụ về quay xõu mẫu s: Với n = 18 ta cú:

s = 'TTTTDNBBB'

sau lần quay thứ nhất ta thu được

s = 'BTTTTDNBB'

sau lần quay thứ hai ta thu được

s = 'BBTTTTDNB'

Để quay xõu s[1..k] ta lấy kớ tự cuối cựng s[k] ghộp lờn khỳc đầu s[1..k-1], tức là đặt

s := s[k]+s[1..k-1]

Để lấy đoạn s[1..k-1] ta gọi hàm copy:

copy(s,1,len-1)

trong đú len chớnh là chiều dài xõu s. Lệnh

copy(s,i,m)

sẽ tạo ra một xõu con của xõu s với m kớ tự kể từ kớ tự thứ i:

copy(s,i,m) = s[i..(i+m-1)] (*---

Quay xau mau s 1 vi tri ---*) procedure QuayXauMau;

var len: byte; begin

len := length(s);

s := s[len] + copy(s,1,len-1); end; end; (adsbygoogle = window.adsbygoogle || []).push({});

Sau đõy là thủ tục tạo ma phương bậc chẵn.

Một phần của tài liệu Sáng tạo trong thuật toán và lập trình với ngôn ngữ Pascal và C# Tập 1 - Chương 8 pptx (Trang 27 - 29)