Ir para conteúdo

POWERED BY:

Arquivado

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

dedeboy

[Resolvido] Matriz Pesquisa Binaria

Recommended Posts

Olá estou com problema no algoritmo que desenvolvi num exercicio que dizia o seguinte:

 

Ler 8 elementos em matriz A tipo vetor.Construir uma matriz B com mesma dimensão com elementos da matriz multiplicados por 5.Apresentar a matriz B em ordem cresente. Montar uma rotina de pesquisa binária, para pesquisar os elementos amazenados na Matriz B

Até ai foi numa beleza,fiz a Matriz A, que ler,Multiplicar e coloca os elementos na ordem cresente, na rotina de pesquisa fiz o que o exercicio pediu. Só que na hora de pesquisar o numero na rotina de pesquisa de vez enquando ele diz que o numero solicitado não se encontra, só que o numero pesquisado esta no elemento que eu digite e que é mais estranho alguns elementos digitado ele mostra onde esta e qual posição.Gostaria que analizasse esse algoritmo e me mostrar onde eu estou errando na rotina de pesquisa.Por enquanto vou vendo aqui onde eu estou errando.

[]s

 

var
A,B: vetor[1..8] de inteiro
I,J: inteiro
X: inteiro
Comeco,Meio,Final: inteiro
Pesq: inteiro
Resp: caractere
Acha: logico

inicio
// Seção de Comandos

{Rotina de entrada de dados}
Escreval("Digite os 8 elementos da Matriz A:")
Para I de 1 ate 8 passo 1 faca
   Leia(A[I])
fimpara
Para I de 1 ate 8 passo 1 faca
   B[I]:= A[I] * 5
fimpara
Para I de 1 ate 7 passo 1 faca
   Para J de I + 1 ate 8 faca
      Se(B[I] > B[J]) entao
         X:= B[I]
         B[I]:= B[J]
         B[J]:= X
      fimse
   fimpara
fimpara
{ Trecho de Pesquisa}
Resp:= "Sim"
Enquanto (Resp = "Sim") ou (Resp = "S")  FACA
   Escreva("Entre o Numero a ser Pesquisado:")
   Leia(Pesq)
   Comeco:= 1
   Final:= 8
   Acha:= Falso
   Enquanto (Comeco <= Final) e (Acha = Falso) faca
      Meio:= (Comeco + Final) div 2
       int(Meio)
      se (Pesq = A[Meio]) entao

         Acha:= Verdadeiro
      senao
         se Pesq < Meio entao
            Final:= Meio - 1

         senao
            Comeco:= Meio + 1

         fimse
      fimse

   fimenquanto
   Se( Acha = verdadeiro) entao
      Escreval(Pesq, "Foi localizado na posição:", Meio) //Aqui vai mostrar a posição da indice e elemento da matriz
   senao
      Escreval(Pesq, "não foi localizado")
   fimse
   Escreva("Deseja Continuar?")   // Aqui vai perguntar se quer fazer mais uma pesquisa
   Leia(Resp)
fimenquanto


{Rotina de saida de dados ordenados}
Para I de 1 ate 8 passo 1 faca
   Escreva(B[I])
fimpara
fimalgoritmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver, mas não foi facil foi assim: Eu fiquei compilando passo a passo pra ver onde estava dando o conflito, daí percebi, que colocando os elementos na tela em ordem crescente e depois eu pesquisava esses numeros eles informava certinho a posição onde se encontrava amazenado, só que olhando o algoritmo livro não mostrava isso. Então eu lembrei que estava estudando que a função da matriz binária ela funciona para elementos organizados, então como os elementos estava desordenados nunca iria da certo, eu fiz o código para os numeros digitados ficasse em ordem crescente, entao eu digitava o numero e mostrava a posição amarzenada. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Valeu pela ajuda quitZAUMMM! Vai aí o código modificado.

[]s

 

algoritmo "Matriz pesquisa binaria"
// Função : Vai ler 8 elementos da Matriz A e multiplicar por 5 a matriz B e fazer um pesquisa binaria nos elementos amarzenados  na Matriz B
// Autor :  Andre de Araujo
// Data : 24/11/2009
// Seção de Declarações
var
A,B: vetor[1..8] de inteiro
I,J: inteiro
X: inteiro
Comeco,Meio,Final: inteiro
Pesq: inteiro
Resp: caractere
Acha: logico

inicio
// Seção de Comandos

{Rotina de entrada de dados}
Escreval("Digite os 8 elementos da Matriz A:")
Para I de 1 ate 8 passo 1 faca
   Leia(A[I])
fimpara
Para I de 1 ate 8 passo 1 faca
   B[I]:= A[I] * 5
fimpara
Para I de 1 ate 7 passo 1 faca
   Para J de I + 1 ate 8 faca
      Se(B[I] > B[J]) entao
         X:= B[I]
         B[I]:= B[J]
         B[J]:= X
      fimse
   fimpara
fimpara
Para I de 1 ate 7 passo 1 faca
   Para J de I + 1 ate 8 faca
      Se(A[I] < A[J]) entao
         X:= A[I]
         A[I]:= A[J]
         A[J]:= X
      fimse
   fimpara
fimpara
{ Trecho de Pesquisa}
Resp:= "Sim"
Resp:= "S"
Enquanto (Resp = "Sim") ou (Resp = "S")  FACA
   Escreva("Entre o Numero a ser Pesquisado:")
   Leia(Pesq)
   Comeco:= 1
   Final:= 8
   Acha:= Falso
   Enquanto (Comeco <= Final) e (Acha = Falso) faca
      Meio:= (Comeco + Final) div 2

      se (Pesq = A[Meio]) entao

         Acha:= Verdadeiro
      senao
         se Pesq > A[Meio] entao
            Final:= Meio - 1

         senao
            Comeco:= Meio + 1

         fimse
      fimse

   fimenquanto
   Se( Acha = verdadeiro) entao
      Escreval(Pesq, "Foi localizado na posição:", Meio) //Aqui vai mostrar a posição da indice e elemento da matriz
   senao
      Escreval(Pesq, "não foi localizado")
   fimse
   Escreva("Deseja Continuar?")   // Aqui vai perguntar se quer fazer mais uma pesquisa
   Leia(Resp)
fimenquanto


{Rotina de saida de dados ordenados}
Para I de 1 ate 8 passo 1 faca
   Escreva(B[I])
fimpara
fimalgoritmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.