zmiana wymiarowości tablic

0

czy jest możliwość zmieniania liczby wymiarów tablicy i w jaki sposób można to dynamicznie dokonać?

0

Nie sądzę, żeby się dało. A zresztą, po co ci niewiadomoiluwymiarowa tablica? Przecież jak tworzysz jakieś rozwiązanie oparte na tablicach, to chyba wiesz, z ilu wymiarów korzystasz?

0

mozna zasymulowac tablice o dynamicznie zmiennej liczbie wymiarów, najłatwiej przy użyciu tablicy jednowymiarowej.

var
  a:array of integer;
  x,y,x:integer;
begin
  setlength(a,20*30*40);  // tablica 3d o wym. 20x30x40 (x,y,z)
  a[((z*40)+y)*30+x]:=0; // zamiast a[z,y,x]
end.

Możesz sobie stworzyć klasę, która będzie wszystko sama autoamtycznie przeliczała.

0

moze to coś pomoze (potrzebujesz buttona i 3 labele)

procedure TForm1.Button1Click(Sender: TObject);
type
  Ttab1 = array[1..10] of integer; //typ 1 tablicy
  Ttab2 = array[1..2,1..5] of integer; //typ 2 tablicy
  TTab3 = array[1..2,1..4,1..5] of byte; //typ 3 tablicy
  Ptab1 = ^Ttab1; //typy wskazników
  Ptab2 = ^Ttab2; //  do wyzej wymieniaonych
  Ptab3 = ^Ttab3; //  typów tablic
var t1: Ttab1;
    p1: Ptab1;
    p2: Ptab2;
    p3: Ptab3;
    x : byte;//pomocnicza
begin
p1:=@t1; //przypisanie adresu t1 do wskaznika na t1
for x:=1 to 10 do p1^[x]:=x;
for x:=1 to 10 do label1.Caption:=label1.Caption+'-'+inttostr(t1[x]);
p2:=Ptab2(p1); //za pomoca rzutowania przekazanie adresu t1
               //do wskaznika na tym t2
p3:=@Ttab3(t1); // przypisanie adresu przez troszke inne rzutowanie
p2^[1,1]:=5;  //jak odnosic sie do elementów tablicy poprzes wskaźnik
for x:=1 to 10 do label2.Caption:=label2.Caption+'-'+inttostr(t1[x])+'-';
p3^[2,1,1]:=66;
for x:=1 to 10 do label3.Caption:=label3.Caption+'-'+inttostr(t1[x])+'-';
end;

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