[Pascal] Matrizes

1 resposta
ingoguilherme

Estou fazendo um trabalho da faculdade sobre matrizes em pascal, já fiz todos menos 1, no qual n consegui resolver.
É o seguinte:
"Faça uma procedure para preencher uma determinada matriz conforme:
1.....0.....0.....0.....0
6.....2.....0.....0.....0
10...7.....3.....0.....0
13...11...8.....4.....0
15...14...12...9.....5"

o máximo que consegui chegar disso foi isso:
1.....0.....0.....0.....0
2.....6.....0.....0.....0
3.....7.....10...0.....0
4.....8.....11...13...0
5.....9.....12...14...15

meu código:
procedure criaMatriz (var mat :tMatriz; var lin,col :integer);
var
   i, j, k, aux :integer;
begin
   aux:=1;
   write(' Insira o numero de linhas: ');
   readln(lin);
   write(' Insira o numero de colunas: ');
   readln(col);

   for k:=1 to lin do
   for i:=k to lin do begin
      for j:=k to col do begin
         if (k=j) then begin
            mat[i,j]:=aux;
            Inc(aux);
            break;
         end;
         mat[i,j]:=aux;
         Inc(aux);
      end;
   end;

end;
Alguma sugestão ou ajuda de que mudar pra que saia o resultado desejado na questao? ja tentei de vários jeitos e ainda n consegui

1 Resposta

G
type
  tMatriz = array of array of Integer;

procedure criaMatriz (var mat :tMatriz; const cLen : Integer = 5);
var
   x, y, auxY, auxX : Integer;
begin
  SetLength(mat, cLen, cLen);
  auxY := 1;
  for y := 0 to cLen - 1 do
  begin
    auxX := auxY;
    for x := 0 to cLen - 1 do
    begin
      mat[x, y] := auxX;
      if auxX > 0 then
      begin
        Dec(auxX, cLen - y + x);
        if auxX < 0 then
          auxX := 0;
      end;
    end;
    Inc(auxY, cLen - y);
  end;
end;

uso:

procedure TForm1.Button1Click(Sender : TObject);
var
  m : tMatriz;
  x, y : Integer;
  s : String;
const
  l = 5;
begin
  criaMatriz(m, l);
  for y := 0 to l-1 do
  begin
    s := '';
    for x := 0 to l-1 do
      s := s +Format('%3d', [m[x, y]]) +' ';
    Memo1.Lines.Add(s);
  end;
end;
Criado 27 de julho de 2012
Ultima resposta 27 de jul. de 2012
Respostas 1
Participantes 2