Ir ao conteúdo
  • Cadastre-se

VisualG Rotina de pesquisa binária


Posts recomendados

Olá, prezados.

 

Estou com problemas na hora de executar meu código abaixo. O mesmo Ele apresenta uma mensagem de erro na linha:

 

se (vetb[meio] = pesq) então

 

Dizendo: "Esperava um expressão do tipo LOGICO". Não consegui entender o motivo deste erro.

 

Var
// Seção de Declarações das variáveis 
   veta: vetor [1..8] de inteiro
   vetb: vetor [1..8] de inteiro
   i, j, x, comeco, final: inteiro
   meio, pesq: real
   resp: caractere
   acha: logico
Inicio
// Seção de Comandos, procedimento, funções, operadores, etc... 

// Entrada de Dados
   para i de 1 ate 8 faca
      escreva("Digite o", i,"º número: ")
      leia(veta[i])
      vetb[i] <- veta[i] * 5
   fimpara

// Organizar Vetor B
   para i de 1 ate 7 faca
      para j de (i + 1) ate 8 faca
         se (vetb[i] > vetb[j]) então
            x <- vetb[i]
            vetb[i] <- vetb[j]
            vetb[j] <- x
         fimse
      fimpara
   fimpara

// Rotina de Pesquisa Binaria
  resp <- "S"
  enquanto (resp = "S") faca
     escreva("Qual número você deseja procurar: ")
     leia(pesq)
     comeco <- 1
     final <- 8
     acha <- falso
     enquanto (comeco <= final) e (acha = falso) faca
        meio <- (comeco + final) /2
        se (vetb[meio] = pesq) então
           acha <- verdadeiro
        senao
           se (vetb[meio] < pesq) então
              final <- meio - 1
           senao
              comeco <- meio + 1
           fimse
        fimse
     fimenquanto
     se (acha = verdadeiro) então
        escreval(pesq," foi localizado na posição de nº: ", meio)
     senao
        escreval(pesq," não foi encontrado no vetor!")
     fimse
     escreva("Deseja continuar? [S/N]")
     leia (resp)
//     limpatela
  fimenquanto

Fimalgoritmo

 

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

  • Membro VIP

@Lorenzo Nunez, vou por enquanto me atentar apenas aos problemas de sintaxes.

 

Sobre:

1 hora atrás, Lorenzo Nunez disse:
   meio, pesq: real

 

Tanto um, tanto o outro, são inteiros. O primeiro por ser uma posição. O segundo por ser o parâmetro da pesquisa de um valor, ou seja, precisa ser do mesmo (correspondente) tipo do valor que está sendo pesquisado... (O tipo real não bate com inteiro.)

 

Mude para inteiro:

   meio, pesq: inteiro

 

 

Como meio é inteiro, pegue a parte inteira da divisão

 

De:

2 horas atrás, Lorenzo Nunez disse:
meio <- (comeco + final) / 2

 

.

Para:

meio <- (comeco + final) \ 2

 

Adendo: repare que a barra está invertida... é assim mesmo.

 

 

Daí você vai tentando e corrigindo (já adianto que tem problema). Qualquer dúvida é só ir tentando mesmo :D, se persistir, só perguntar...

 

 

ADENDO: para facilitar os testes, altere a leitura para algo assim:

   para i de 1 ate 8 faca
      escreva ("Digite o ", i:1, "º número: ")
      //leia(vetA[i])
      vetA[i] <- RandI(9)+1
      escreval(vetA[i])
      vetB[i] <- vetA[i] * 5
   fimPara

 

Dá para fazer o mesmo se quiser também o valor a ser pesquisado:
 

      escreva("Qual número você deseja procurar: ")
      //leia(pesq)
      pesq <- RandI(9)+1
      escrevaL(pesq)

 

Desta forma... bastando executar o problema... em detrimento de não poder escolher o que quer pesquisar.

  • Curtir 1
  • Amei 1
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!