Wyszukiwanie liniowe wg kilku cech.

0

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?

0

Heh... przepraszam za zamieszanie, ale wkleiłem zły kod...
Prawidłowy to:

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(tab2) to high(tab2) do
                begin
                k:=tab2[i];
                  if Form1.ComboBox2.Text = tab[k].Model then
                  begin
                  tab2[a]:=i;
                  a:=a+1;
                  end;
                end;

                //koniec model
          end;

setlength(tab2,a);
end;

 odswierz_wyniki();

end;

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