Delphi przeszukiwanie macierzy pętlą while, konkretne zadanie

0

Cześć mam taki problem:
Dla podanej przez uzytkownika liczby szuka za pomoca petli while czy ona jest w
tablicy i wyswietla albo informacje ze jej nie ma albo wyswietla nr wiersza i kolumny znalezionego elementu.
Mam tablice i cały program., jednak pomysłu na zrealizowanie tego podpunktu nie mam. Jakieś sugestie lub przykładowy kod mile widziany. Tablica dwuwymiarowa jest. Jeśli coś jest jeszcze potrzebne to proszę pisać. Wolałbym sugestie jak to zrobić niż kod. Programuje w Delphi7.

0

Za pomocą dwóch pętli for (X, Y) szukasz po całej tablicy. Przed szukaniem pobierz od użytkownika tę wymaganą liczbę. Zapisz ją do zmiennej, przypuśćmy "LI". Oraz stwórz zmienną typu Boolean (niech będzie miała nazwę "ZN").
Szukanie:
Ustaw ZN na False.
Przeleć pętlą po całej tablicy. Jeżeli Tablica[X, Y] = LI, to przerwij pętlę (break) oraz ustaw ZN na True.
Jeżeli ZN jest False, to wyświetl, że liczba nie istnieje w tablicy.
Jeżeli ZN jest True, to wyświetl, że liczba znajduje się w kolumnie Y, a wierszu X.
Jeżeli ZN ma inną wartość, to wywal bluescreen'a.

0

Nie o to chodzi... spójrz proszę na polecenie.
Pętle while ma być użyta. Z for to sam wymyśliłem ;-)

1
for I := 1 to 20 do
  begin
    {...}
  end;

Zauważ, że to to samo, co:

I := 1;
while I <= 20 do
  begin
    {...}
    I := I + 1;  //albo Inc(I);
  end;
1

Chyba że "za pomocą pętli" trza rozumieć że za pomocą jednej pętli.
Wtedy:

x:=0;
y:=0;
while y<YSize do
begin
   // sprawdź tab[x,y]
   if x<XSize then Inc(x);
   else
   begin
     x:=0;
     Inc(y);
   end;
end;
1
var
  Tablica: array[0..m, 0..n] of Integer;

begin
  i:= 0;
  JestLiczba:= false;
  while i < (m+1)*(n+1) do begin
    Wiersz:= i div (n+1);
    Kolumna:= i mod (n+1);
    if Tablica[Wiersz, Kolumna] = Liczba then begin
      JestLiczba:= true;
      Break;            // Jeśli liczby w tablicy nie powtarzają się
    end;
    Inc(i);
  end;
  if JestLiczba then    // Wyświetl wiersz i kolumnę
  else ;                // Wyświetl, że nie ma "Liczby" w tablicy
end;
0

Z waszą pomocą skleciłem kod. Zrobiłem najpierw z for później zmieniłem na while. I jak pod for'em wszystko działało, tak pod while'm sprawdza tylko pierwszy wiersz.

  writeln('Podaj szukana liczbe');
  readln(sz);
  byt:= false;
  i:=1  ;
  j:=1  ;
while i<=m do
  begin
    while j<=n do
      begin
        if MojaTablica[i][j]=sz
          then begin
          writeln('Kolumna ', j, ' Wiersz ', i);
          byt:= true;
          j:=j +1;
               end
          else begin
          j:=j +1;
               end;
      end;
  end;
    if byt=false
    then begin
    writeln('Szukanej liczby nie ma w tablicy');
    end;
0

wiersz:
j:=1 ;
przenieś tuż przed:
while j<=n do

0

Jak zrobię jak sugerujesz, to program zaczyna wariować i w kółko wyświetla się ta sama wiadomość,np "Wiersz .. Kolumna ..." i w kółko pętelka się nakręca.

0

Specjalnie dla tych którzy nie potrafią czytać że zrozumieniem:

  writeln('Podaj szukana liczbe');
  readln(sz);
  byt:= false;
  i:=1  ;
while i<=m do
  begin
  j:=1  ;
    while j<=n do
      begin
        if MojaTablica[i][j]=sz
          then begin
          writeln('Kolumna ', j, ' Wiersz ', i);
          byt:= true;
          end;
          j:=j +1;
      end;
      i:= i+1;
  end;
    if byt=false
    then begin
    writeln('Szukanej liczby nie ma w tablicy');
    end;
0

Eee, sorki ale tak właśnie mam. I wciąż działa jak wyżej opisałem ;) Dziękuje, już działa.

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