czy jest możliwość zmieniania liczby wymiarów tablicy i w jaki sposób można to dynamicznie dokonać?
0
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;