Usuwanie elementu z tablicy dynamicznej

0

Witam,

Teraz mam kolejny problem ,a mianowicie usuwanie elementu z tablicy dynamicznej. W założeniu element ma zostać usunięty a elementy i indeksie wyższym od usuniętego mają się cofnąć o 1. Nie wiem czy to najleprzą metoda ale tylko taką wymyśliłem do tego jeszcze nie działa ;(

procedure TGlowneOkno.UsunZTablicy(NumerIndex: Integer;
                                   var Tablica: Array of string);
var
  Lista: TStringList;
  i, j: integer;
begin
  Lista.Create; //Tworzymy Liste

  //Ładujemy elementy z tablicy do listy
  for i := 0 to High(Tablica) do
  begin
    Lista.Add(Tablica[i]);
  end;
  //Usuwamy element z listy
  Lista.Delete(NumerIndex);

  //Czyścimy tablice
  SetLength(Tablica, 0);

  //Ladujemy do tablicy nową liste
  for j := 0 to Lista.Count do
  begin
    if j = 0 then
    begin
      SetLength(Tablica, 1);
      Tablica[0] := Lista[j];
    end else
    begin
      SetLength(Tablica, High(Tablica)+2);
      Tablica[High(Tablica)] := Lista[j];
    end;
  end;
  Lista.Free //Zwalnianie nie będzie nam już potzrebna.
end;

I przy próbie kompilacji wywala błędy do linijek z SetLength o treści:

[Error] glowna.pas(101): E2008 Incompatible types

0
procedure TGlowneOkno.UsunZTablicy(NumerIndex: Integer;
                                   var Tablica: Array of string);
var
  i: integer;
begin
  for i := NumerIndex to High(Tablica) - 1 do
    Tablica[i] := Tablica[i+1];
  SetLength(Tablica, Length(Tablica) - 1);
end;

Pisane na sucho wiec moze nie dzialac, jak chcesz to warto by bylo dodac jakies zabezpiecznia typu if Length() = 0.

0

chodziło Ci o coś takigo?

for i:=NumerIndex+1 to high(Tablica)-1 do
  Tablica[i]:= Tablica[i+1];

SetLength(Tablica, High(Tablica));

// eh, byłeś pierwszy ; :P

0

W obydwu przypadkach przy prubie kompilacji wywala mi ten bład przy SetLength:

[Error] glowna.pas(101): E2008 Incompatible types

A po zmianie Tablica na nazwę tablicy program się kompiluje, ale przy próbie wywołania funkcji wywala błąd :/

user image

Edit:

Działa:) Błąd był w innej funkcji:P

0

A na przyszłość, jak chcesz przekazywać jakąś tablicę dynamiczną w argumencie funkcji, to rób tak(zakładając, że będziesz przekazywał array of integer), np:

type
  TArrayOfInteger = array of integer;

I przekazuj zmienną typu TArrayOfInteger.
Bo inaczej możesz dostawać(będziesz dostawał) incompatible types

0
Juhas napisał(a)

A na przyszłość, jak chcesz przekazywać jakąś tablicę dynamiczną w argumencie funkcji, to rób tak(zakładając, że będziesz przekazywał array of integer), np:

type
  TArrayOfInteger = array of integer;

I przekazuj zmienną typu TArrayOfInteger.
Bo inaczej możesz dostawać(będziesz dostawał) incompatible types

[green] A w którym miejscu wywołujesz funkcję SetLength()?

0

przecież napisał, że już działa [glowa]

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