Tablica dynamiczna jako paramter funkcji

0

chciał bym zrobić sobie funkcję która będzie usuwała z tablicy dynamicznej komórkę o zadanym indeksie.

function DeleteCell( const _tabDyn : Txxx; const index : integer ): boolean;

problem w tym, że nie mam pomysłu jakiego typu powinien być pierwszy parametr, żeby funkcja działa ze wszystkimi tablicami.

0

z tego co wiem tablica dynamiczna nie zajmuje jednego kawałka pamięci. Tylko każda jej komórka może być zupełnie gdzie indziej w pamięci, więc pointer w postaci nazwy tablicy musi wskazywać na jakiąś ogólną tablice wskaźników na poszczególne komórki. Dało by się jakoś to zrealizować w ten sposób?

3

Zupełnie nie rozumiem o jakie problemy wam chodzi...

function DoDelete(var ptr:pointer;size:integer;index:integer):boolean;
var
  p,p2:PByte;
  len:dword;
begin
  p:=ptr;
  dec(p,4);
  len:=PDword(p)^;
  if (index>len)or(index<0)or(len<=0) then exit(false);
  p:=ptr;
  inc(p,size*index);
  p2:=p;
  inc(p2,size);
  move(p2^,p^,(len-index)*size);
  p:=ptr;
  dec(p,4);
  PDword(p)^:=len-1;
  result:=true;
end;

Wywołanie: DoDelete(pointer(tab),sizeof(tab[0]),4);

0

var ptr:pointer - specjalnie jest var? zdaje się, że const był by bezpieczniejszy. czy czegoś nie zakumałem.

Jeżeli lepiej niż ja wiesz co robisz, to czyń to co słuszne. Już po twoich poglądach widać że nie rozumiesz że ten kod nie wspiera paru rzeczy... Nie oczekuj jakiegokolwiek mojego wsparcia tego kodu, ten kod to żart, nie realny kod. var jest potrzebne, natomiast brakuje implementacji potrzebnych działań. Wobec tego ten kod najprawdopodobniej będzie wykrzaczał kod przy bardziej zaawansowanych zastosowaniach.

pamiętam, ze były jakieś problemy z wykorzystnaiem ZeroMemory na dynamicznych tablicach. Znalazłem gdzieś, że uzywając dyamicznych tablic najbezpieczniej jest odwoływać się do każdej komórki. Może faktycznie zbyt pochopnie doszedłem do błędnych wniosków :)

Nie, po prostu nie umiesz używać tablic dynamicznych ani szukać. Już parę razy postowałem jak poprawnie to robić.

z tego co wiem tablica dynamiczna nie zajmuje jednego kawałka pamięci. Tylko każda jej komórka może być zupełnie gdzie indziej w pamięci, więc pointer w postaci nazwy tablicy musi wskazywać na jakiąś ogólną tablice wskaźników na poszczególne komórki. Dało by się jakoś to zrealizować w ten sposób?

Seriously, lepiej wróć do swoich zwykłych metod skracania tablic, bo wtedy chociaż wszystko rozumiesz.

To kod spod FPC;

Na Delphi powinno działać, być może po jakichś poprawkach.

I bądź taki dobry i zmerguj mi posty...

0

dzięki za słowa otuchy :) próbuję się tu czegoś dowiedzieć, zdobyć wiedzę, żeby kiedyś, za parę lat zbesztać jakiegoś początkującego programistę tak jak Ty mnie teraz ;)

Wiesz co? Po prostu olej ten kod który jest na prawdę bardzo źle napisany, i to właśnie czyni go świetnym do naśmiewania się z innych. Tylko na to czekałem...
Swoją drogą, nie słyszałem żeby początkujący programista używał Delphi XE2. Twój tata to Bill Gates? Do what you want cuz pirate is free...

var jest potrzebne,.
przekazywany przez var jest pointer na tablice. Więc chyba nie powinno być można zmienić go w tej funkcji?

A ten dalej ze swoim... Ja już wytłumaczyłem, że var jest potrzebne jeżeli chcemy doimplementować inne potrzebne rzeczy (a jest ich sporo). Inaczej ten kod tylko udaje że działa, bo ma wyrąbane na wiele spraw, których 90% forum i tak nie rozumie. var dopisałem początkowo żeby doimplementować jeszcze coś, ale zmieniłem zdanie, bo uznałem że za dużo rzeczy bym musiał zrobić (nie jestem przekonany czy wszystko da się zrobić, jeżeli się da to na pewno wymaga to sporo magii). Po prostu tak jak @Patryk27 pewnego razu sobie hackował prywatne metody klas, to ja sobie pohackowałem tablice dynamiczne. Ani jego ani moja metoda nie są przeznaczone ani dla początkujących ani do zastosowania produkcyjnego. Deal with it, enjoy code and STFU.

Zwracam uwagę na słownictwo; Kod jest spod FPC

Jeżeli:

  1. Ktoś ma nick z kosmosu
  2. Ma pomysłowy kod
  3. Wyzywa innych
    To na 99,99999999% to jestem ja. A jak niektórzy wiedzą, używam FPC... Więc w sumie nic odkrywczego.

co do exit(false) to wypada mi się po prostu śmiać z osób które tłuką się z Delphi...

Zamiast pytać - sprawdź

Dobrze powiedziane, jak pisałem ten kod to nie pytałem nikogo tylko z 3 razy sobie odpaliłem to pod debuggerem i patrzyłem czy dobrze zgaduje jak to jest zbudowane...

0

to mam pytanie, tylko już nie krzycz na mnie biednego :(

nie rozumiem tego var'a. Faktycznie bez niego kod nie działa.
ale przecież w procedurze nie zmieniamy jego wartości? wchodzi i wychodzi taki sam.

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