program Ordonarea_matricei; uses crt; const ne = 10; cdelay = $ffff; var a: array[1..ne,1..ne] of integer; {Matricea} b: array[1..ne*ne] of integer; {Shirul utilizat la ordonarea matricei} d: integer; i, j: 1..ne; c, r: 1..ne; {nr. de coloane si randuri} nb, k: 0..ne*ne; di, dj: boolean; begin clrscr; writeln('Introdu nr. de coloane si randuri ale matricei:'); readln(c,r); {Generarea elementelor tabelului} randomize; for i:=1 to r do for j:=1 to c do a[i,j]:=random($7fff); {Introducerea elementelor de la tastatura} Writeln('Doriti sa introduceti elementele de la tastatura? (Da / Nu)'); if(upcase(readkey)='D') then for i:=1 to r do for j:=1 to c do begin write('[',i,':',j,'] = ');readln(a[i,j]); end; clrscr; {Urmeaza extragerea elementelor matricei intr-un shir ordonat de elemente} nb:=0; for i:=1 to r do for j:=1 to c do begin inc(nb); b[nb]:=a[i,j]; k:=1; while(kb[nb] then begin d:=b[k]; b[k]:=b[nb]; b[nb]:=d; end; inc(k); end; end; {Acum intoarcem elementele din shir in matrice, in ordinea dorita} i:=1; j:=1; k:=1; d:=1; while(k<=nb)do begin {Afisarea elementului curent si o pauza} textcolor(8+(d+1)); gotoxy((i-1)*7+2, j+1); write(b[k]); delay(cdelay); {readkey;} a[i,j]:=b[k]; di:=(i+d<1)or(i+d>r); dj:=(j-d<1)or(j-d>c); {Abra-Cadabra --- Begin} if(di)or(dj)then begin {pentru marginile matricei} if(dj and ((di and(d<0))or not di))then inc(i); if(di and ((dj and(d>0))or not dj))then inc(j); d:=-d; {se schimba directia de parcurgere} end else begin {pentru interiorul matricei} inc(i,d); dec(j,d); end; {Abra-Cadabra --- End} inc(k); end; {Afisarea matricei} { writeln(#10); for j:=1 to c do begin for i:=1 to l do write(a[i,j]:7); writeln; end; } readkey end.