Sắp xếp xoắn ốc trong Pascal

Viết chương trình sắp xếp mảng vuông hai chiều (n hàng, n cột) theo hình xoắn ốc như sau:

Dữ liệu vào file: XOANOC.INP dòng đầu chứa n, các dòng sau chứa mảng vuông 2 chiều n hàng, n cột

Dữ liệu ra file: XOANOC.OUT chứa mảng 2 chiều n hàng, n cột đã sắp xếp

VD:

XOANOC.INP XOANOC.OUT
31    3    52    4    68    7    9 1    2   38    9   47    6   5

Chú ý: Có thể yêu cầu sắp xếp như sau:

  code 1

uses crt;
var i,j,k,t,s,n: integer;

begin
 clrscr;
 write('Nhap n: ');
 readln(n);
 i:=1; j:=0;
 s:=n; t:=1; k:=0;
 for k:=1 to n*n do
 begin
  case t of
    1 : j:=j+1;
    2 : i:=i+1;
    3 : j:=j-1;
    4 : i:=i-1;
  end;
  gotoxy(j*3,i+2);
  write(k);
  if k=s then
  begin
   n:=n-(t mod 2);
   t:=t+1;
   s:=s+n;
   if t=5 then t:=1;
  end;
 end;
 readln
end.

code 2

var i,j,k,t,s,n,m,tem: integer;
    a: array[1..50,1..50] of integer; b:array[1..2500]of integer;
   F:text;
begin
{---doc file ra mang mot chieu b-}
assign(F,'xoanoc.inp');reset(F);
 read(F,n);
 k:=1;
    for i:=1 to n do
    for j:=1 to n do
    begin
        read(f,b[k]);
        k:=k+1;
    end;
 close(F);
for j:=1 to n*n do write(b[j],' ');
{-- sap xep mang mot chieu-------}
for i:=1 to n*n-1 do
    for j:=i+1 to n*n do if b[i]>b[j] then
        begin
            tem:=b[i];
            b[i]:=b[j];
            b[j]:=tem;
        end;
 //for j:=1 to n*n do write(b[j],' ');
{-------------Dat mang b vào mang a theo hinh xoan oc----------------}
 m:=n-1;i:=1;j:=1;k:=1;
 while m>0 do
    begin
        for t:=1 to m do begin
                            a[i,j]:=b[k];
                            j:=j+1; k:=k+1;
                        end;
        for t:=1 to m do begin
                            a[i,j]:=b[k];
                            i:=i+1; k:=k+1;
                        end;
        for t:=1 to m do begin
                            a[i,j]:=b[k];
                            j:=j-1; k:=k+1;
                        end;
        for t:=1 to m do begin
                            a[i,j]:=b[k];
                            i:=i-1; k:=k+1;
                        end;
        i:=i+1; j:=j+1;m:=m-2
    end;
  if m=0 then a[n div 2+1,n div 2+1]:=b[n*n];

{-- xuat file ------}
 assign(F,'XOANOC.OUT');
 rewrite(F);
 for i:=1 to n do
 begin
  for j:= 1 to n do
   write(f,a[i,j]:5);
  writeln(f);
 end;
 close(F);
end.

 

Read:   Lập trình chuyển một xâu văn bản sang xâu chỉ có kí tự đầu từ viết hoa trong Pascal
Hình đại diện của người dùng

admin

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 *