procedura z tablica2D

0

Przeszukalem forum i wiele znalazlem na temat tworzenia procedur z tablicami ale niestety wszystko to bylo jako tablica 1 wymiarowa.

jak zapisac procedurke do ktorej bedziemy wstawiac tablice dynamiczna dwu wymiarowa?

Procedure tablica(var T:array of array of string);

takie cos niestety nie chce mi dzialac :( jak to powinno byc poprawnie zapisane?

0

Chyba nie umiesz tablic....

Procedure tablica(var Tablica : array[0..1, 0..1] of String);

Powinno dzialac, nie sprawdzalem

0

chyba zle zrozumiales...
to co podales to jest procedura z tablica statyczna a ja potrzebuje z dynamiczna, z tego co czytalem to niestety ale jest w tym roznica.

0

jeżeli chcesz żeby był taki zapis to chyba musisz stworzyć najpierw typ
type tab:array.. coś tam

procedure tablica(var tab);

0
vir2000 napisał(a)

chyba zle zrozumiales...
to co podales to jest procedura z tablica statyczna a ja potrzebuje z dynamiczna, z tego co czytalem to niestety ale jest w tym roznica.

Przepraszam, rzeczywiście.... Twoj kod wydaje mi sie dobry w takim badz razie... Powiedz co chcesz w tej tablicy zamiescic moze uda mi sie zastapic ten kod innym

0

Jeśli rozmiar tablicy nie ma być znany, to nie da się tego zrobić inaczej niż (tab : array of typ), więc nie użyjesz tablicy kilku wymiarowej. Jedyne co mogę zaproponować, to abyś tablicę array[1..a, 1..b] zrzutował na tablicę array[1..a*b] i wtedy używał jej jako 2-wymiarowej, tyle, że w jednym wymiarze...

PS: Albo zadeklaruj typ

d =array[1..10000] of string;
t =^d;

i w deklaracji procedury napisz (tab : array of t) - oczywiście trza by wcześniej zarezerwować pamięć na zmienną typu t.

Pozdrawiam.

0
Dannte napisał(a)

Jeśli rozmiar tablicy nie ma być znany, to nie da się tego zrobić inaczej niż (tab : array of typ), więc nie użyjesz tablicy kilku wymiarowej.

I tu się nie zgodzę, bo poniższy kod nie dość że się kompiluje to nawet się wykonał :-D

type
  tabl = array of array of byte;
{...}
public
  procedure Test(var tab:tabl);
{...}
var
  tab:tabl;
{...}
procedure TForm1.Test(var tab:tabl);
begin
  setlength(tab,10,10);
  showmessage(inttostr(high(tab))+' '+inttostr(high(tab[1])));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  test(tab);
end;

I nawet dał oczekiwany wynik "9 9"

0
Loloki napisał(a)

I tu się nie zgodzę, bo poniższy kod nie dość że się kompiluje to nawet się wykonał :-D

Już chciałem napisać, że nie wiedziałem tego i że codzienne można nauczyć się czegoś nowego, ale jednak nie. Ty mówisz o delphi, a ja mówiłem o turbo pascalu i dlatego to nieporozumienie. W TP nie da się wpisać array bez indeksu w tym miejscu :(. Tak samo np. w delphi (chyba :P) wynikiem funkcji może być rekord, a w TP niestety nie. Pełno jest takich kosmetycznych różnic.

Pozdrawiam.

PS: Sorry, jeśli kogoś w błąd wprowadziłem.

0

Tyle tylko, że w Turbo Pascalu W OGÓLE nie było tablic dynamicznych. Taka subtelna różnica ;).

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