Я решал похожую задачу, вот:
Код
program matrix;
uses crt;
var i,j,nom,dio,dios:byte;
zad:integer;
mat:array [1..25,1..25] of byte;
 begin
   clrscr;
   textcolor(white);
   writeln('vvedite zadergku vivoda matrizi');
   readln(zad);
   clrscr;
   randomize;
   textcolor(green);
   for i:=1 to 20 do
    begin
      for j:=1 to 20 do
       begin
       mat[i,j]:=random(10);
       end;
    end;
   dios:=0;
   for i:=20 downto 1 do
    begin
      dios:=dios+1;
      dio:=dios;
       if (i mod 2)<>0 then
       begin
       dio:=20;
       for j:=i downto 1 do
      begin
        gotoxy(j,dio);
        write(mat[dio,j]);
        delay(zad);
        dio:=dio-1;
      end;
      end
      else
      for j:=1 to i do
       begin
       gotoxy(j,dio);
       write(mat[dio,j]);
       delay(zad);
       dio:=dio+1;
       end;
    end;
{} dios:=0;
   for i:=20 downto 1 do
    begin
      dios:=dios+1;
      dio:=dios;
       if (i mod 2)=0 then
       begin
       dio:=20;
       for j:=i downto 1 do
      begin
        gotoxy(dio,j);
        write(mat[j,dio]);
        delay(zad);
        dio:=dio-1;
      end;
      end
      else
      for j:=1 to i do
       begin
       gotoxy(dio,j);
       write(mat[j,dio]);
       delay(zad);
       dio:=dio+1;
       end;
    end; 
end.