Witajcie. Znalazłem na stronie 4prog (http://4programmers.net/view_faq.php?id=424) krótkie info o tym jak usunąć komórkę talblicy dynamicznej... próbowałem to przerobić, ale efekt nie był zbytnio odpowiednim, więc mam pytanie: jak (mając daną tablicę 20 komórkową, nie dynamiczną) usunąć jedną z komórek a resztę przesunąć, tym samym, aby puste pola były na samym końcu.
Nie da się zmienić rozmiarów tablicy niedynamicznej (chyba, że jakąś okrężną drogą), lepiej zastosować od razu typ TList, jest to jakby tablica, jednak dane w niej same przesuwają się odpowiednio po usunięciu.
pisze z glowy:
for k:=do_czyszczenia to dlugosc_tablicy do
if k<>dlugosc_tablicy then
tablica[k]:=tablica[k-1] else tablica[k]:=0;
//do_czyszczenia - komorka ktorej chcesz sie pozbyc
dlugosc_tablicy - chyba wiadome
k - jakas zmienna pomocnicza
tablica - twoja tablica
Ja bym to zrobil tak
begin
for i := nr_elementu to length(tab)-1 do tab[i] := tab[i+1];
tab[length(tab)] := 0;
end;
Dziękuję za pomoc, wesoledi --- k+1 zamiast k-1, w Twoim wypadku wszystko sie zakisi... (tablica[k..length(tablica)]:=tablica[k]), ale dziekuje bo na Twoim przykladnie sie wzorowalem <-].
w Twoim wypadku wszystko sie zakisi... [...] ale dziekuje bo na Twoim przykladnie sie wzorowalem
dlatego pisalem ze pisze z glowy i nie testowalem, ale prosze bardzo, ciesze sie ze pomoglem :D
Usunięcie jednego elementu z tablicy jest strasznie długotrwałe (szczególnie gdy element ma niski indeks). Polecam poczytać trochę o listach (jedno-, dwukierunkowych lub cyklicznych). Tam nie ma problemu z szybkim usuwaniem elementu.
Co do list jednokierunkowych... Z teorii (poczytałem) i z praktyki (sprawdziłem) wychodzi, że aby dobrać się do 10 pozycji muszę napisać coś w stylu:
Korzen.nast.nast.nast.nast.nast.nast.nast.nast.nast.Dane:=.....
Delikatnie mówiąc - nie jestem wariatem, więc prosiłbym o delikatne wyprostowanie moich myśli
Uczyłem się z:
http://www.binboy.org/index.php?show=a_list1k.htm
Korzen.nast.nast.nast.nast.nast.nast.nast.nast.nast.Dane:=.....
nast := korzen;
for i := 1 to 10 do nast := nast.nast;
A nie ma odpowiednika bibliotek STL z BCB w Delphi? Na pewno coś jest. W takim razie można wykorzystać odpowiednik szablonu deque, vector lub list - w zależności od potrzeb.