Ir ao conteúdo
  • Cadastre-se

VisualG Pesquisa binária com matriz bidimensional


Posts recomendados

Bom dia pessoal,

Estou tentando fazer um exercício que envolve pesquisa de matrizes pelo método binário, porém estou com problemas em desenvolver a atividade com a matriz bidimensional. Quando vou fazer a busca do valor ele mostra que foi localizado em uma posição x, porém não mostra informa o lugar errado e se eu fizer uma nova pesquisa ai diz que não foi localizado. Segue o código para análise:

Estava com a ideia de criar uma outra matriz de uma dimensão que iria armazenar os elementos da matriz "a" já ordenados, porém queria uma l deuz como poderia fazer de outra maneira, que seria a pesquisa nessa matriz "a" bidimensional.

Desde já agradeço a ajuda.

Algoritmo "Exercicio3"
var
   a: vetor [1..6, 1..3] de inteiro
   i, j, maior, menor, inicial, meio, final, x, y, aux, busca: inteiro
   achei: logico
   resp: caractere

inicio
   para i <- 1 ate 6 faca
      para j <- 1 ate 3 faca
         escreval ("Valores da matriz: ")
         leia (a[i,j])
         se (i = 1) e (j = 1) entao
            menor <- a[i,j]
         fimse
         se (a[i,j] > maior) entao
            maior <- a[i,j]
         senao
            se (a[i,j] < menor) entao
               menor <- a[i,j]
            fimse
         fimse
      fimpara
   fimpara
   escreval ("Maior elemento da matriz é: ", maior)
   escreval ("Menor elemento da matriz é: ", menor)

   // oerdenação
   para x <- 1 ate 5 faca
      para y <- x + 1 ate 6 faca
         se (a[x,1] > a[y,1]) entao
            aux <- a[x,1]
            a[x,1] <- a[y,1]
            a[y,1] <- aux
         fimse
      fimpara
   fimpara
   resp <- "sim"
   enquanto (resp = "sim") faca
      escreval ("Informe o valor a ser pesquisado: ")
      leia (busca)
      achei <- falso
      inicial <- 1
      final <- 6
      j <- 1
      enquanto (inicial <= final) e (achei = falso) faca
         meio <- (inicial + final) div 2
         para j <- 1 ate 3 faca
            se (busca = a[meio,j]) entao
               achei <- verdadeiro
            senao
               se (busca < a[meio,j]) entao
                  final <- meio - 1
               senao
                  inicial <- meio + 1
               fimse
            fimse
         fimpara
      fimenquanto
      se (achei = verdadeiro) entao
         escreval ("Busca localizada: ", a[meio,j])
      senao
         escreval ("Busca não localizada")
      fimse
      escreval ("Deseja fazer uma nova pesquisa? ")
      leia (resp)
   fimenquanto

Fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
2 horas atrás, Jacqueline Santos disse:

   // oerdenação
   para x <- 1 ate 5 faca
      para y <- x + 1 ate 6 faca
         se (a[x,1] > a[y,1]) entao
            aux <- a[x,1]
            a[x,1] <- a[y,1]
            a[y,1] <- aux
         fimse
      fimpara
   fimpara

 

Esse método de ordenação está errado. Você está meio que utilizando uma estrutura de ordenação de matrizes unidimensionais para uma matriz bidimensional. Para ordenar, é necessário percorrer toda a matriz... coluna a coluna, linha a linha. Resumidamente, nesse contexto, seriam 4 "para/faca".

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Jacqueline Santos    essa rotina da pesquisa  não está boa , seria melhor usar um laço de repetição para ,  que poderia ser assim   :

para x de 1 ate 2 faca
  para y de 1 ate 2 faca
    se busca = a[x,y] entao
      achei := verdadeiro
      interrompa
    fimse
  fimpara
  se achei entao
    interrompa
  fimse
fimpara
         no lugar dessa 
      //enquanto (inicial <= final) e (achei = falso) faca
      //   meio <- (inicial + final) div 2
      //   para j <- 1 ate 2 faca
      //      se busca = a[meio,j] entao
      //         achei <- verdadeiro
      //      senao
      //         se (busca < a[meio,j]) entao
      //            final <- meio - 1
      //         senao
      //            inicial <- meio + 1
      //         fimse
      //      fimse
      //   fimpara
      //fimenquanto
se achei entao
  escreval("Busca localizada: ",x,y)
senao
  escreval("Busca não localizada")
fimse

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
2 horas atrás, devair1010 disse:

@Jacqueline Santos    essa rotina da pesquisa  não está boa , seria melhor usar um laço de repetição para ,  que poderia ser assim   :


para x de 1 ate 2 faca
  para y de 1 ate 2 faca
    se busca = a[x,y] entao
      achei := verdadeiro
      interrompa
    fimse
  fimpara
  se achei entao
    interrompa
  fimse
fimpara

 

@devair1010, o tipo de pesquisa é específico.

 

4 horas atrás, Jacqueline Santos disse:

Estou tentando fazer um exercício que envolve pesquisa de matrizes pelo método binário

 

O que sugeriu não se enquadraria no enunciado.

 

 

Então, provavelmente o problema atual está na ordenação da matriz, ou seja: para efetuar uma pesquisa binária, é necessário que a matriz esteja ordenada de determinada forma... mas acontece que justamente o processo de ordenação está errado, logo, a pesquisa binária não vai (não deveria) funcionar bem mesmo.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!