Witam.
Mam problem z którym nie jestem w stanie się uporać. Chodzi o wyszukiwanie liniowe na tablicy rekordów wg kilku cech.
Sprawa wydaje się banalna, algorytm napisany, ale progrtam nie działa prawidłowo.
Oto co naskrobałem:
procedure liniowe();
var
a,i,j,k: integer;
opcje: array[1..7] of integer;
begin
//ZBIORKA DANYCH O POLACH
if (Form1.combobox1.Text <> 'Marka') and (Form1.combobox1.Text <> '') then
opcje[1]:=1
else
opcje[1]:=2;
if (Form1.combobox2.Text <> 'Model') and (Form1.combobox2.Text <> '') then
opcje[2]:=1
else
opcje[2]:=2;
//KONIEC ZBIORKA DANYCH O POLACH
SetLength(tab2,high(tab)+1);
for i:=low(tab) to high(tab) do
tab2[i]:=i;
for j:=1 to 7 do
begin
if ((j=1) and (opcje[j]=1)) then
begin
//marka
a:=0;
for i:=low(tab2) to high(tab2) do
begin
k:=tab2[i];
if Form1.ComboBox1.Text = tab[k].Marka then
begin
tab2[a]:=i;
a:=a+1;
end;
end;
//koniec marka
end;
if ((j=2) and (opcje[j]=1)) then
begin
//model
a:=0;
for i:=low(tab3) to high(tab3) do
begin
k:=tab3[i];
if Form1.ComboBox2.Text = tab[k].Model then
begin
tab3[a]:=i;
a:=a+1;
end;
end;
//koniec model
end;
setlength(tab2,a-1);
end;
odswierz_wyniki();
end;
Na początku program sprawdza które cechy są podane i na ich podstawie przechodzi do wyszukiwania liniowe. Dla pojedynczych cech wszystko działa ok, ale w momencie podania więcej niż jednej cechy program zwraca 'idiotyczne' wyniki.
Dodam tylko że tablicatab to tablica rekordów numerowana od 0 do x elementów, jest to tablica dynamiczna. Samo wyszukiwanie działa na zasadzie wpisywania do tab2 nr indeksów rekordów spełniających kryteria.
Ktoś widzi co robię nie tak?