Ir ao conteúdo
  • Cadastre-se

Erro Pesquisa sequencial


Linehx

Posts recomendados

Boa tarde , eu fiz um programa para fazer uma pesquisa dentro de uma matriz bidimensional, porém mesmo se o numero nao existir dentro da matriz o programa informa que sim.

Código :

Program BuscaMatriz;
var
m:array[1..3,1..3] of integer;
l,c,n:integer;
busca:boolean;
Begin
for l:=1 to 3 do
for c:= 1 to 3 do
begin
write(l,',',c,'=');
readln(m[l,c]);
end;
clrscr;
write('Digite o número a ser buscado.');
readln(n) ;

l:=1;
c:=1;

Repeat

If m[l,c]=c then
busca:=true Else
inc (l);

If (l=3) Then
begin

inc (c);
l:=l-2;
end;

Until busca or (c<=3) ;

If busca Then
writeln('O valor existe na matriz.')Else
writeln('O valor não existe na matriz.');

End.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá,

Erros simples:

if m[l,c]=c then

Por que igual a "c"??? ^_^

Tem que ser igual a "n"!

Until busca or (c<=3) ;

O until também está com erro. Veja, ou "ele achou" ou "chegou a fim". Logo deveria ser c>3.

Faltou também inicializar o "buscar".

busca:=false;

Obs.: Por padrão (se não me engano) ela já é automaticamente inicializada com false, mas de qualquer forma, por questão de lógica, é melhor inicializar. Além do mais, essa regra não vale dentro de procedures e functions (em procedimentos, as variáveis não são automaticamente inicializadas, somente no begin/end principal.)

Abaixo seu código identado e corrigido para consulta:


var
m :array[1..3,1..3] of integer;
l,c, n :integer;
busca :boolean;
BEGIN
for l:=1 to 3 do
for c:= 1 to 3 do
begin
write(l,',',c,'=');
readln(m[l,c]);
end;
ClrScr;
write('Digite o número a ser buscado.');
readln(n);
l:=1;
c:=1;
busca:=false;
repeat
if m[l,c]=n then
busca:=true
else
inc(l);
if (l=3) then
begin
inc(c);
l:=l-2;
end;
until busca or (c>3);
if busca Then
writeln('O valor existe na matriz.')
else
writeln('O valor não existe na matriz.');
end.
Program BuscaMatriz;

--

PS: Uma forma mais simples de pesquisa seria usando a mesma forma da leitura dos dados, ou seja, com dois for's

for l:=1 to 3 do
for c:= 1 to 3 do
if m[l,c]=n then
begin
buscar:=true; //achou o infeliz
break; //pára o for (para que continuar buscando)
end

Qualquer é só postar

Abraços

Link para o comentário
Compartilhar em outros sites

O primeiro erro foi erro de digitação , e não resolveu o código . Porém eu descobri o que era .

na parte

''

if (l=3) then

begin

inc©;

l:=l-2;

end; ''

l tem que ser =4 , pois se não nunca irá pesquisar na linha 3 , pois ele ja entra na condição abaixo.

Muito obrigada pelo novo metodo =)

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
l tem que ser =4 , pois se não nunca irá pesquisar na linha 3 , pois ele ja entra na condição abaixo.

Tem razão... passou em branco, rs.

Resumindo:

1) Corrigir o if da comparação

if m[l,c]=n then

2) Inicializar a variável.

busca:=false;

3) Corrigir o if do limite de linha

ff (l=4) Then

Valeuu

Abraços

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!