Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Sklep ElwronSklep Elwron
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Delphi : kopiowanie tablic dynamicznych ..

12 Mar 2005 07:05 3617 7
  • Poziom 14  
    Mam pytanie czy jest jakaś funkcja zaimplementowana w delphi pozwalająca kopiować jedną tablicę dynampiczna i wklejać do drugiej ? Cos w stylu Kopiuj (tab1,tab2). Mam sporo tablic w programiku i ułatwiłoby mi to życie . Z góry dziękuję za wszystkie odpowiedzi . Pozdrawiam Wojtek
  • Sklep ElwronSklep Elwron
  • Pomocny post
    Poziom 19  
    Jak utworzone tablice dynamiczne masz na mysli? Zdaje mi sie, ze od pewnego momentu w delphi sa dwa typy tablic dynamicznych.
    Takie, ktorym mozna zmieniac rozmiar oraz takie w stylu C z reczna alkokacja pamieci.
    W kazdym z tych przypadkow mozesz przeciez skopiowac dane po prostu, element do elementu, nagle jedna petla for.

    Poza tym, byc moze zadziala przypisanie. Oczywiscie nie w przypadku uzycia wskaznikow :D

    Ok, juz mam:

    Mozesz zdefiniowac tablice w ten sposob:

    var
    A: array of integer;
    begin
    SetLenght(A,10);

    W przypadku takich tablic dynamicznych powinno sie dac kopiowac przez proste przypisanie.

    Caladan
  • Sklep ElwronSklep Elwron
  • Poziom 14  
    Hmm proste przypisania typu (tab1:=tab2) niestety nie działają :( wlasciwie dzialaja ale wtedy jakoś łączą się obydwie tablice i modyfikując jedną modyfikuje i 2-ga- no i Zonk . Chyba ,że o czymś nie wiem !!! (co jest wysoce prawdopodobne ). W moim programie mam tablice 2 -3 wymiarowe a nie wiem czy jeszcze jakas lista tablic 3 wymiarowych mi nie dojdzie :| . Troche glupio do kazdego typu tablic robic sobie procedury kopiujące jednoczesnie alokowac pamiec za kazdym razem gdy moze jest jakies zwykle przypisanie ? Mimo wszytko dzięki .Pozdrawiam i czekam na kolejne propozycje.
  • Pomocny post
    Poziom 42  
    icos13 napisał:
    Hmm proste przypisania typu (tab1:=tab2) niestety nie działają :( wlasciwie dzialaja ale wtedy jakoś łączą się obydwie tablice i modyfikując jedną modyfikuje i 2-ga- no i Zonk .
    I tak ma być, w ten sposób kopiujesz wskaźniki a nie wartości tablic. Podaj dokładnie w jaki sposób deklarujesz tablice i alokujesz pamięć.
  • Pomocny post
    Poziom 19  
    Uzycie dynamicznych tablic w Delphi jest rzeczywiscie tylko schowanym interfejsem dla wskaznikow.

    W takim wypadku to co zostalo, to kopiowanie elementow z tablicy do tablicy, recznie. O ile sie nie myle, Delphi nie pozwala na zabawe pamiecia, to nie C, wiec nie da chyba rady zrobic czegos jak memcpy - przynajmniej nie spotkalem takiej fkcji w Delphi.

    Fkcja copy oraz slice, ktore sa dostepne w Delphi tak samo nie nadaja sie do tworzenia tablic. Moga byc najwyzej argumentami dla fkcji.

    Z drugiej strony jak napiszsz sobie wlasne fkcje do kopiowania, to bedziesz tylko podawal dwa wskazniki i ilosc eltow do skopiowania. Wiec do tego sachecam, to nie jest duzo pracy :D
  • Poziom 14  
    type
    tab2wym= array of array of integer ;
    tab3wym= array of array of array of currency;
    .
    .
    .
    var
    glownatab3wym; // tab na tmp przechwujaca dane wart
    strukturytab2wym; // tab tmp przechodzujaca informacje o strukturach
    Wart_pocztab3wym; //tablica przechowująca wartosci
    str_pocztab2wym; // tablica przechowująca dane o strukturach
    .
    .
    .
    alokuje poprzez SetLength(tab... w glab
    widac w ponizszej funkcji kopiujacej
    .
    .
    .
    procedure TForm2.kopiuj(tab1tab3wym ;var tab2 tab3wym ;tab3 tab2wym; var tab4 tab2wym );
    var
    i ,j,k integer ;
    begin
    //KOPIOWANIE 3X3
    setlength(tab2,length(tab1)-1);
    for k=0 to length(tab1)-2 do
    begin
    setlength(tab2[k] ,(length(tab1[k])));
    for j=0 to (length(tab1[k])-1 )do
    begin
    setlength(tab2[k,j] ,(length(tab1[k,j])));
    for i=0 to (length(tab1[k,j])-1 ) do
    begin
    tab2[k,j,i]=tab1[k,j,i];
    end;
    end;
    end;// koniec k
    //KOPIOWANIE 2X2
    setlength(tab4,length(tab3)-1);
    for j=0 to (length(tab3)-2 )do
    begin
    setlength(tab4[j],(length(tab3[j])));
    for i=0 to (length(tab3[j])-1 ) do
    begin
    tab4[j,i]=tab3[j,i];
    end;
    end;
    end;

    Jezeli ktos ma jakies pomysly czekam ...

    Dodano po 5 [minuty]:

    Aha pewnie ale to zauwazycie ale pomijajac nie kopiuje ostatniego j w 2-wym i k w 3-wymiarowym ..ale to juz tak potrzebuje wewnatrz.
  • Pomocny post
    Poziom 19  
    A czy dobrze zaprojektowales same struktury danych i czy mozna by dostac mniej wiecej jak wygladaja? Moze uda sie cos scisnac, i jakos inaczej to zrobic :D

    Byc moze wogole enkapsulacja i uobiektowienie tego daloby jakies efekty?
  • Poziom 14  
    Powiedzmy szczerze informatykiem to ja nie jestem :D ale coz projekty jakos trzeba robic...Tablice dynamiczne maja mi przechowywac nst rzeczy:
    glowna - niezawodnosc poszczegolnych elementow jakiejs struktury (szeregowej,rownoleglej, mostkowej ..)
    struktury - informacje o danym typie struktury (typ, liczba elementow, itp)
    W sumie to nie wyjdzie to pewnie zbyt gornolotnie :[ ale... Na jakies powazniejsze rzeczy przyjdzie czas z nastepnym projektem .Dzieki wszystkim za porady.Pozdrawiam Wojtas