Jak wyrzucić z tabeli
Tabela1:array of double;
co trzeci element z rownoczesna zmiana wymiariow tej tabeli ??
Może tak:
var
a: array of double;
b: array of double;
i,j: integer;
begin
j:=0;
// przypisanie czegoś do "a"
for i := low(a) to high(a) do
begin
if not( i div 3 = 0) then
begin
b[j] := a[i];
j:=j+1;
end;
end;
end;
type
TDoubleArray = array of Double;
function Concat(S1, S2: TDoubleArray): TDoubleArray;overload; //nie ma takiej konieczności, ale na wszelki wypadek jakby się chciało dopisać inne wersje.
begin
SetLength(Result, Length(S1)+Length(S2));
Move(S1[0], Result[0], Length(S1)*SizeOf(Double));
Move(S2[0], Result[Length(S1)], Length(S2)*SizeOf(Double));
end;
procedure Delete(var S: TDoubleArray; Index, Count:Integer);overload;
begin
S := Concat(Copy(S, 0, Index), Copy(S, Index+Count, Length(S)-Index-Count));
end;
Użycie:
Delete(Tablica, 2, 1); //Usuwa 1 element zaczynjąc od nr 2
Aby usunąć co trzeci, to trzeba w pętelce (tylko wziąć pod uwagę, że liczba elementów się zmienia).
<font color=darkblue>if not( i div 3 = 0)</font>
Co oznacza ten fragment ? Bo cos mi sie knoci.
<font color=darkblue>if not( i div 3 = 0)</font>
Co oznacza ten fragment ? Bo cos mi sie knoci.
To znaczy jeśli różnica z dzielenia i przez 3 jest inna niż 0 - innymi słowy "jeśli i nie jest podzielne przez 3"
if not( i div 3 = 0) then
No to czy nie powinno byc , zamiast powyzszego :
if not( i div 3 <font color=red><></font> 0) then
Ale poza tym i tak wyskakuje blad EAcsessViolation w lini
b[j] := a[i];
a ja nie wiem dlaczego ? ;-(
Sama procedura jest dobrze, spróbuj teraz:
type
tablica = array of double;
var
a,b: tablica
i,j: integer;
begin
j:=0;
// przypisanie czegoś do "a"
for i := low(a) to high(a) do
begin
if not( i div 3 = 0) then
begin
b[j] := a[i];
j:=j+1;
end;
end;
end;
aaaa juz kapuje.
- div zwraca 0 gdy wynik dzielenia jest real
- tablica nie miala przydzielonej pamieci
dzieki
mialo byc
- div zwraca reszte z dzielenia
ps: sory ale nie moglem przeedytowac poprzedniego tekstu bo zapomnialem sie zalogowac
Oczywiscie mi sie wydaje, ze powinno byc tak, jak zrozumial to Dry... a jesli chodzi o metode DETOX'a... to po co uzywac zaprzeczenia div'a, skoro mozna uzyc mod'a a w ogole to po co w ogole to porownanie skoro mozna uzyc w petli for parametru step 3... ;-)
<font color="green">skoro mozna uzyc w petli for parametru step 3... </span>
No wreszcie ktoś napisał to... długo szukam tej składni - jak umiesz napisać pętle For ze "stepem to napisz jak to się robi... nigdzie znajść nie mogę.
W C++ wiem, że jest tak:
<font color="green"> for( i=1, i =7, i+=3) {}</span>
Ale nie wiem jak w Object Pascal napisać ten "step" żeby był 3.
To ja RiccoXXX pisalem to, ale nie zalogowany, bo na tym kompie brat zablokowal cookiesy, bo sie cyka... Wiec odpowiadam, w C++ widze, ze umiesz. W Pascalu to jest tak: dla samej operacji for nie ma czegos takiego jak step,ale... bardzo latwo zamienic ta petle w petle while, gdzie incrementujesz sobie o tyle, o ile ci sie podoba np.:
while (i<60) do
begin
...
...
inc(i,3);
end;
w podobny sposób nalezy przerobić tamta petle, w razie klopotow moge to zrobic(ale to jest banalnie proste). ;-)
Spoko, myślałem, że znasz jakiś kod na "step" przy pętli for, o to tylko mi chodziło. :) Pozdrawiam