Jak przeszukiwać rekord w macierzy?

0

ma oto taki swój kodzik w którym mam problem zatrzymaniem pętli aby pytanie o szukany rekord padło raz ale gdy usunę te pętle for wyskakuje mi jeśli jest dany rekord to go nie ma prosiłbym o pomoc w na kierowaniu gdzie jest błąd

procedure znajdz(var bib:maciez2);
var
       zmienna:string;
       i,j:integer;

       begin
       for I:=1 to 4 do
            for j:=1 to 3 do
            begin
                    zmienna:=upcase(zmienna);
                    writeln('podaj szukane autora');
                    readln(zmienna);
                   if (bib[i,j].autor= zmienna) then
                    bib[i,j].jest:= true

                   else bib[i,j].jest:=false;
                   writeln('znalazlez autora',bib[i,j].autor,' ',bib[i,j].tytul,' ',bib[i,j].rokWydania) ;
                   writeln(' ma autora');

            end;
        end;
0

Wskażać błąd? Przede wszystkim tragiczne coś, co ma przypominać formatowanie. Nie umiesz formatować samodzielnie to używaj: Lazarusa i jego formattera, Delphi i alternatywnej wersji GExperts z jego formaterem, ewentualnie JEDI Code Formatter. Niech Twój kod jakoś wygląda, a nie jak jakieś - za przeproszeniem - wymiociny. A jeżeli pobranie zmiennej ma się pokazać raz, to chyba logiczne, że musi wystąpić przed pętlą. Natomiast w pętli ustawił bym zmienną typu boolean w stylu JakasZmiennaTypyBoolean := Bib[I, J].Autor = Zmienna;. Następnie daj if ZmiennaTypuBoolean then begin Break; end;. A po skończeniu pętli w zależności od wartości zmiennej, pokazał bym odpowiedni komunikat. A i ludzie nauczcie się wreszcie, do stu tysięcy niesformatowanych kodów! Pytania o takie banalne podstawy zadaje się w dziale Newbie. Do tego celu on służy! Tam przenoszę. Pamiętaj też, że od podawania języka jest tag, a nie temat wątku.

0

Wg tego co piszesz, to potrzebujesz czegoś w tym guście:

function znajdz(const bib:maciez2;const autor:String;var fY,fX:Integer):Boolean;
var y,x:Integer; 
begin
  for y:=1 to 4 do
  begin
    for x:=1 to 3 do
    begin
      if upcase(bib[y,x].autor)=autor then
      begin
        fY:=y;
        fX:=x;
        Result:=true; // znajdz:=true;
        Exit;
      end;
    end;
  end;
  Result:=false; // znajdz:=false;
end;

procedure ZnajdzPokaz(const bib:maciez2)
var y,x:Integer;
var autor:String;
begin
  Write('podaj szukanego autora: ');
  ReadLn(autor);
  if znajdz(bib,upcase(autor),y,x) then WriteLn('znalazlez autora ',bib[y,x].autor,' ',bib[y,x].tytul,' ',bib[y,x].rokWydania)
  else WriteLn('nie znaleziono'); 
end;

Ale założę się że nie o to ci chodzi bo to jest jakiś błąd projektowy skoro książki masz w tablice dwuwymiarowej. Jeszcze może by było do przyjęcia jeżeli druga kolumna oznacza nr szafy, ale że w każdej szafie jest dokładnie tyle samo książek to jakieś dziwadło.

0

antimonium dzięki wielkie oto mi chodziło działa dobrze;

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