Sắp xếp qua lại trong Pascal

Viết chương trình sắp xếp mảng hai chiều (m hàng, n cột) (m,n <= 100) theo nguyên tắc sau:

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

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

VD:

SORTZ.INP SORTZ.OUT
4  31    3    52    4    68    7    911 10 12 1    2    36    5    47    8    912 11 10

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

var i,j,k,m,n,tem:integer;
    a:array[1..100,1..100]of integer;b:array[1..10000]of integer;
   F:text;
begin
{---doc file ra mang mot chieu b-}
assign(F,'sortz.inp');reset(F);
 read(F,m,n);
 k:=1;
    for i:=1 to m do
    for j:=1 to n do
    begin
        read(f,b[k]);
        k:=k+1;
    end;
 close(F);
//for j:=1 to m*n do write(b[j],' ');
{-- sap xep mang mot chieu-------}
for i:=1 to m*n-1 do
    for j:=i+1 to m*n do if b[i]>b[j] then
        begin
            tem:=b[i];
            b[i]:=b[j];
            b[j]:=tem;
        end;
//    writeln;
// for j:=1 to m*n do write(b[j],' ');

{-- dat vao mang 2 chieu-------}
  i:=1;k:=1;
  for i:=1 to m do
    begin
      if i mod 2 = 1 then for j:=1 to n do begin
                                              a[i,j]:=b[k];
                                              k:=k+1;
                                           end
      else  for j:=n downto 1 do begin
                                              a[i,j]:=b[k];
                                              k:=k+1;
                                           end;
    end;
{-- xuat file ------}
 assign(F,'SORTZ.OUT');
 rewrite(F);
 for i:=1 to m do
 begin
  for j:= 1 to n do
   write(f,a[i,j]:5);
  writeln(f);
 end;
 close(F);
end.

 

Read:   Đề luyện thi HSG Tin 11 - THPT Yên Thành - Có code tham khảo
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 *