Tablice dwuwymiarowe.

0

Siema potrzebuje pomocy w programie. Program wypełnia tablice losowymi literami i sortuje je od od a do z. Problem polega na tym iż nie mam pomysłu jak zrobić to na tablicy dwuwymiarowej i żeby sortowało od z do a.

 
program project1;

uses SysUtils;

const
   min=1;
   max=5;
type
   tElem = char;
   tTablica = array [min..max] of tElem;
var
   t:tTablica;

procedure sortuj(l,r: longint);
var
   i,j: integer;
   x,y: tElem;
begin
   i:=l; j:=r; x:=t[(l+r) DIV 2];
   repeat
       while t[i]<x do i:=i+1;
       while x<t[j] do j:=j-1;
       if i<=j then begin
            y:=t[i]; t[i]:=t[j]; t[j]:=y;
            i:=i+1; j:=j-1;
       end;
   until i>j;
   if l<j then sortuj(l,j);
   if i<r then sortuj(i,r);
end;

var
   i:integer;

begin
   randomize;
   for i:=min to max do
       t[i]:=char( random( ord('Z')-ord('A') + 1) + ord('A')
                               );
   for i:=min to max do write(t[i]:2); writeln; writeln;
   sortuj(min, max);
   for i:=min to max do write(t[i]:2); writeln;
   readln;
end.
0

hint:
zrób sobie funkcję sortującą która jako argument przyjmuje tablice jednowymiarową i traktuj tablicę dwuwymiarową jako tablicę tablic.

0

@markon1995 - tablice dwuwymiarowe alokowane są jako ciągłe bloki pamięci, więc możesz spokojnie jechać po wskaźnikach na komórki; Chyba że boisz się wskaźników to możesz przekopiować blok pamięci tablicy dwuwymiarowej do tablicy jednowymiarowej (o takiej samej ilości komórek jak suma komórek tablicy dwuwymiarowej), posortować tę jednowymiarową i z powrotem skopiować blok pamięci - z jednowymiarowej do dwuwymiarowej;

[...] i żeby sortowało od z do a.

Odwróć operator w warunku przed swapem.

0

a Czy to nie zalezy od tego co chcesz osiągnąć?
Przykładowo czy chcesz posortować wszystkie elementy całości - ale wtedy wystarczyłaby tez tablica jednowymiarowa...

aab
bff
xyz

czy posortować elementy każdej "podtablicy":

fyz
aax
bbf
0

Dobra coś podziałałem z sortowaniem coś nie chce działać. potrzebował bym aby całą tablice 5x5 mi sortowało od z do a
chce żeby sortowało tak:
z:
ade
cfb
hgi

na:
ihg
fed
cba

program Project1;
uses
  SysUtils;

const
   min=1;
   max=5;
   zmin=1; //2 wymiar (głębokość) tablicy
   zmax=5; //2 wymiar (głębokość) tablicy
type
   tElem = char;
   tTablica = array [min..max, zmin..zmax] of tElem;        //tablica dwuwymiarowa
var
   t:tTablica;

procedure sortuj(l,r, z: longint);  // z -> dodatkowy indeks 2 wymiaru tablicy
var
   i,j: integer;
   x,y: tElem;
begin
   i:=l; j:=r; x:=t[(l+r) DIV 2,z];
   repeat
       while t[i,z]<x do i:=i+1;
       while x<t[j,z] do j:=j-1;
       if i<=j then begin
            y:=t[i,z]; t[i,z]:=t[j,z]; t[j,z]:=y;
            i:=i+1; j:=j-1;
       end;
   until i>j;
   if l<j then sortuj(l,j,z);
   if i<r then sortuj(i,r,z);
end;

var
   i, zi :integer;

begin
   randomize; // losowanie
   for i:=min to max do
    for zi:=zmin to zmax do
       t[i,zi]:=char( random( ord('Z')-ord('A') + 1) + ord('A') ); //losowanie liter z zakresu a-z

   for i:=min to max do
    begin
     for zi:=zmin to zmax do write(t[i,zi]:2);
     writeln;
    end;

   for zi:=zmin to zmax do  sortuj(min, max, zi); //wielokrotne sortowanie, dla każdego rzędu osobno

   for i:=min to max do write('--');
   writeln;

   for i:=min to max do
    begin
     for zi:=zmin to zmax do write(t[i,zi]:2);
     writeln;
    end;

   readln;
end. 

1 użytkowników online, w tym zalogowanych: 0, gości: 1