Wyszukiwanie danych na liście.

0

Witam. Mam liste oraz StringGrida na którego wprowadzam dane. Pozostały mi do napisanie tylko procedury na podmienianie danych i wyszukiwanie. Mam rekord o nazwie samochod z 13 informacjami marka, klasa itp.. Chciałam zrobić tak, że wpisuje sobie do jakiegoś TEdit to z jaką marką powinno wyszukać i wyświetlić rekordy w StringGridzie. Próbowałam cos takiego, ale niespecjalnie to działa ^^.

function search(m : string) : ptr;
var
  prev : ptr;
begin
  while (prev <> nil) and (prev^.daneauto.marka <> m) do prev := prev^.next;
  search := prev;
end; 

Bardzo bym prosiła o pomoc jak to powinno wyglądać, bo to moje początki z programowaniem i trochę mi nie wychodzi. :)

0

Jaka jest początkowa wartość tego prev?

0

Łe faktycznie nie przypisałam, ale powinno być prev:=first;. Jak dopisałam prev:=first to wyszukiwanie nadal nie działa :/, ale już błędy nie wyskakują. W procedurze przycisku mam coś takiego

 procedure TForm1.SzukajClick(Sender: TObject);
begin
   search(szukanie.text);
      display(StringGrid1);
end;
0

funkcja search zwróciła wartość i co dalej z ta zwróconą wartością?

0

To znaczy chciałam, żeby pokazywała ją w tym StringGridzie, tylko właśnie nie wiem za bardzo jak się za to zabrać.

0

Aha, czyli miałaś nadzieje że kompilator przeczyta twe myśli i jakoś przekaże wynik tego search do display ?

0

Nie, wiem, że to nie zadziała, ale nie wiem co zrobić, żeby wyświetlał je w StringGridzie.

0

Aha, czyli masz nadzieje że ktoś z nas współpracuje z wróżką i po przeczytaniu twoich myśli będziemy wiedzieć czym jest u ciebie ptr i jak działa ten display ?

0

Tak mam zadeklarowane rekordy

type samochod=record
 marka:string[64];
 typ:string[64];
 klasa:string[64];
 cena:string[64];
 max_pred:string[64];
 licz_cyl:string[64];
 licz_KM:string[64];
 zuz_paliwa:string[64];
 czas_przys:string[64];
 ABS:string[64];
 wsp_kier:string[64];
 pod_pow:string[64];
 poj_siln:string[64];

 end;
 type  ptr=^Telement;
 Telement=record
 daneauto:samochod;
 next:ptr;
 data:string[64];
  end; 

A tak działa procedura Display:

var first:ptr;
  procedure Display(StringGrid: TStringGrid);                     // wyœwietlanie
    var temp:ptr;
    i,j:integer;
      begin
        temp:=first;
        i:=1;
        j:=1;

          while (temp<>nil) do
          begin
      StringGrid.Cells[0,i]:=IntToStr(j);;
      StringGrid.Cells[1,i]:=temp.daneauto.marka;
      StringGrid.Cells[2,i]:=temp.daneauto.typ;
      StringGrid.Cells[3,i]:=temp.daneauto.klasa;
      StringGrid.Cells[4,i]:=temp.daneauto.cena;
      StringGrid.Cells[5,i]:=temp.daneauto.max_pred;
      StringGrid.Cells[6,i]:=temp.daneauto.licz_cyl;
      StringGrid.Cells[7,i]:=temp.daneauto.licz_KM;
      StringGrid.Cells[8,i]:=temp.daneauto.zuz_paliwa;
      StringGrid.Cells[9,i]:=temp.daneauto.czas_przys;
      StringGrid.cells[10,i]:=temp.daneauto.ABS;
      StringGrid.cells[11,i]:=temp.daneauto.wsp_kier;
      StringGrid.cells[12,i]:=temp.daneauto.pod_pow;
      StringGrid.cells[13,i]:=temp.daneauto.poj_siln;
          temp:=temp.next;
          i:=i+1;
          j:=j+1;
          end;

      end; 
0
  1. wywal z funkcji Display zmienną j bo ma dokładnie taką samą wartość co i
  2. przekaż do funkcji Display dodatkowy parametr current_pos;
  3. wewnątrz pętli przed temp:=temp.next; dodaj if temp=current_pos then StringGrid.Row=i;

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