ERRO 201 E PROBLEMAS DE ARRAY DINÂMICOS

18/06/2018

3

Pessoal, estou com problema de array dinâmico. O DELPHI aponta para erro 201 quando executo o programa. Vocês podem dar uma olhada no meu trecho de código abaixo:

UNIT Geral;

Interface

TYPE

TYPE1 = ARRAY OF ARRAY OF ARRAY OF DOUBLE;

VAR

imax,jmax : INTEGER;
xyn : TYPE1;

Implementation

____________________________________________________________________________________________

PROCEDURE READ(VAR imax,jmax:INTEGER;VAR xyn:TYPE1);

f1 : TEXTFILE;
i,j : INTEGER;

BEGIN

ASSIGNFILE(f1,''DATAS2.DAT'');
RESET(f1);

READ(f1,imax);
READ(f1,jmax);

FOR i := 1 TO imax DO

FOR j := 1 TO jmax DO

READLN(f1,xyn[i,j,1],xyn[i,j,2])

CLOSEFILE(f1);

_____________________________________________________________________________________

BEGIN

SETLENGTH(xyn,imax,jmax,2);

END.

Eu não sei o que está errado nele. Vocês podem olhar e ver se encontram o erro? Fico no aguardo, Edisson Sávio.]
Responder

Posts

31/07/2018

Felipe Morais

Quando você adiciona o breakpoint e executa o programa linha por linha, onde ele para? Qual a Exception levantada?
Responder
estou enferrujado em Delphi... mas SetLength() não define cada dimensão individualmente?

o correto seria algo assim:

SETLENGTH(xyn,2) // aqui informa que xyn tem 2 elementos (1a. dimensão)
SETLENGTH(xyn[0],5) // aqui informa que o primeiro elemento de xyn tem 5 elementos (2a.dimensão)
SETLENGTH(xyn[1],5) // aqui informa que o segundo elemento de xyn também tem 5 elementos (2a.dimensão)

e assim sucessivamante...
SETLENGTH(xyn[0,0],3)
SETLENGTH(xyn[0,1],3)
SETLENGTH(xyn[0,2],3)
SETLENGTH(xyn[0,3],3)
SETLENGTH(xyn[0,4],3)

SETLENGTH(xyn[1,0],8)
SETLENGTH(xyn[1,1],8)
SETLENGTH(xyn[1,2],8)
SETLENGTH(xyn[1,3],8)
SETLENGTH(xyn[1,4],8)

Pra somente depois atribuir o valor:
xyn[0,0,0] := 13
xyn[1,4,3] := 8.5

Não seria assim?

Responder

31/07/2018

Felipe Morais

Seu código não é Delphi, deve ser Pascal. Fiz um exemplo básico de array dinâmico multidimensional, espero que te ajude:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  // Define do array dinâmico;
  MultiArray : Array of Array of byte;
  I, J : Integer;
begin
  // Define o tamanho do array principal;
  SetLength(MultiArray, 3);

  // Define o tamanho dos 3 sub-arrays;
  SetLength(MultiArray[0], 1);
  SetLength(MultiArray[1], 2);
  SetLength(MultiArray[2], 3);

  // Define e mostra o tamanho de todos os elementos dentro do array principal;
  for I := 0 to High(MultiArray) do
    for J := 0 to High(MultiArray[I]) do
    begin
      MultiArray[I, J] := I + J;
      ShowMessage('MultiArray[' + IntToStr(I) + ', ' + IntToStr(J) + '] = ' + IntToStr(MultiArray[I, J]));
    end;
end;

end.



Responder

31/07/2018

Edisson Maciel

Prezados, Eu estou seguindo o livro do Marcelo Leão e lá um array dinâmico tridimensional é definido como segue:

xyn : ARRAY OF ARRAY OF ARRAY OF DOUBLE;
SETLENGTH(xyn,5,13,20);

e só. Você tem alguma outra sugestão? Fico no aguardo, Edisson Sávio.
Responder

31/07/2018

Felipe Morais

Seu SetLenght está errado. Leia novamente o código que postei, ele possui um array idêntico ao seu.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira