Ir ao conteúdo
  • Cadastre-se

VisualG Erro no procedimento "pbuscar"


Posts recomendados

Algoritmo "Lanchonete"
Const
   max = 10
tipo
   rCadPedido = registro
      nome :caractere
      pedido :caractere
   fimregistro

funcao finserir (pos_lista : inteiro) : inteiro
inicio
   pos_lista := pos_lista + 1
   se pos_Lista > max entao
      pos_lista := pos_lista - 1
      escreval ("Lista Cheia!!!")
   senao
      escreva ("Informe o Nome do Cliente: ")
      leia (Vpedido[pos_lista].Nome)
      escreva ("Informe o pedido: ")
      leia (Vpedido[pos_lista].pedido)
      escreval ("- Pedido Confirmado -")
   fimse
   retorne pos_lista
fimfuncao

procedimento plistar (pos_lista : inteiro)
var
   ind : inteiro
inicio
   se pos_lista = 0 entao
      escreval ("Lista de Pedidos Vazia!!!")
   senao
      para ind de 1 ate pos_lista faca
         escreval (ind,"º Cliente:", Vpedido[ind].Nome," Pedido: ",Vpedido[ind].pedido)
      fimpara
   fimse
fimprocedimento

procedimento pbuscar (pos_lista : inteiro)
var
   j,k, vb : inteiro
   dados : vetor[1..max] de rCadPedido
   achou : logico

procedimento pbuscar
var j : inteiro
inicio
   para ind de 1 ate pos_lista faca
      dados[ind].nome
      dados[ind].pedido
   fimpara
fimprocedimento

inicio
   pbuscar
   escreva("Entre com o valor de busca (ESC termina) :")
   leia(vb)
   ind <- 1

   repita
      se dados[ind].ind = vb entao
         achou <- verdadeiro
      senao
         ind <- ind+1
      fimse
   ate (achou=verdadeiro) ou (ind>10)

   se achou entao
      escreval("Achei o cliente ", nome , " na posição ", ind, " o pedido é : ", dados[ind].pedido)
   senao
      escreval("não achei.")
   fimse

Var
   pause, pfim, opcao , NumPed :inteiro
   ValTotal :real
   Vpedido :vetor [1..max] de rCadPedido
Inicio

   pfim := 0
   Repita
      limpatela
      escreval ("#########################")
      escreval ("*******LANCHONETE********")
      escreval ("# 1 - INCLUIR PEDIDO  #")
      escreval ("# 2 – ATENDER PEDIDO  #")
      escreval ("# 3 – LISTAR PEDIDO   #")
      escreval ("# 4 – PESQUISAR PEDIDO #")
      escreval ("# 0 - ENCERRAR     #")
      escreval ("#########################")
      escreval ("")
      escreva ("Informe a opção desejada: ")
      leia (opcao)
      escolha opcao
      caso 0
         escreval ("")
         escreval ("Finalizando...")
         escreval ("")
      caso 1
         pfim := finserir(pfim)
         escreval("**************************")
         escreval ("Aperte ENTER para voltar")
         escreval("**************************")
         leia(pause)
      caso 2

         leia(pause)
      caso 3
         plistar(pfim)
         leia(pause)
      caso 4
         pbuscar(pfim)
         leia(pause)

      outrocaso
         escreval ("")
         escreval ("Opção inválida!!!")
         escreval ("")
         leia(pause)
      fimescolha
   ate opcao = 0
Fimalgoritmo

Captura de tela 2022-05-31 144655.png

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

  • Membro VIP
30 minutos atrás, Lauro Viana disse:
procedimento pbuscar (pos_lista : inteiro)
var
   j,k, vb : inteiro
   dados : vetor[1..max] de rCadPedido
   achou : logico

procedimento pbuscar
var j : inteiro
inicio
   para ind de 1 ate pos_lista faca
      dados[ind].nome
      dados[ind].pedido
   fimpara
fimprocedimento


Você declarou o procedimento pbuscar duas vezes.

E tem várias estrutura montadas. Uma sugestão seria refazer o programa aos poucos e ir testando cada parte... 

Basicamente só deve aparecer erros em uma parte do programa: que no caso é justamente a que está tentando fazer. Ficou parecendo que você tentou fazer um monte de coisa ao mesmo tempo e depois tentou testar... não dá certo.

 

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

  • Membro VIP
6 minutos atrás, Lauro Viana disse:

corrigi o "pbuscar" mas o erro continua


Um dos erros no código que você postou é que você declarou procedimento pbuscar duas vezes.

Você precisa corrigir isso.. se corrigiu, não tem como o código está igual...

Posta o código corrigido. Que daí reanaliso e aponto o próximo problema.

Mas adianto que basicamente o VisualG não está encontrando as variáveis globais... ou seja, como existe um TIPO declarado, necessariamente precisa ter o VAR também. (É bug/característica que acabei de descobrir.)


Adendo: a cadeia de estrutura deve está correta... não adiantar ter um "var lá em abaixo", sendo que tem coisa "quebrada" antes.

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

Algoritmo "Lanchonete"
// Disciplina   : [Linguagem e Lógica de Programação] 
// Professor   : Antonio Carlos Nicolodi 
Const
   max = 10

tipo
   rCadPedido = registro

      nome :caractere
      pedido :caractere

   fimregistro


funcao finserir (pos_lista : inteiro) : inteiro
inicio
   pos_lista := pos_lista + 1
   se pos_Lista > max entao
      pos_lista := pos_lista - 1
      escreval ("Lista Cheia!!!")
   senao
      escreva ("Informe o Nome do Cliente: ")
      leia (Vpedido[pos_lista].Nome)
      escreva ("Informe o pedido: ")
      leia (Vpedido[pos_lista].pedido)
      escreval ("- Pedido Confirmado -")
   fimse
   retorne pos_lista
fimfuncao

procedimento plistar (pos_lista : inteiro)
var
   ind : inteiro
inicio
   se pos_lista = 0 entao
      escreval ("Lista de Pedidos Vazia!!!")
   senao
      para ind de 1 ate pos_lista faca
         escreval (ind,"º Cliente:", Vpedido[ind].Nome," Pedido: ",Vpedido[ind].pedido)
      fimpara
   fimse
fimprocedimento

procedimento pbuscar (pos_lista : inteiro)

 var
   j,k, vb : inteiro
   dados : vetor[1..max] de  rCadPedido
   achou : logico


var j : inteiro
inicio

 para ind de 1 ate pos_lista faca
   dados[ind].nome
   dados[ind].pedido
fimpara
fimprocedimento

inicio
pbuscar

escreva("Entre com o valor de busca (ESC termina) :")

leia(vb)


ind <- 1
repita
   se dados[ind].ind = vb entao
      achou <- verdadeiro
   senao
      ind <- ind+1
   fimse
ate (achou=verdadeiro) ou (ind>10)

se achou entao
   escreval("Achei o cliente ", nome , " na posição ", ind, " o pedido é : ", dados[ind].pedido)
senao
   escreval("não achei.")
fimse


Var
   pause, pfim, opcao , NumPed :inteiro
   ValTotal :real
   Vpedido  :vetor [1..max] de  rCadPedido
Inicio


   pfim := 0
   Repita
      limpatela
      escreval ("#########################")
      escreval ("*******LANCHONETE********")
      escreval ("# 1 - INCLUIR PEDIDO    #")
      escreval ("# 2 – ATENDER PEDIDO    #")
      escreval ("# 3 – LISTAR PEDIDO     #")
      escreval ("# 4 – PESQUISAR PEDIDO  #")
      escreval ("# 0 - ENCERRAR          #")
      escreval ("#########################")
      escreval ("")
      escreva  ("Informe a opção desejada: ")
      leia (opcao)
      escolha opcao
      caso 0
         escreval ("")
         escreval ("Finalizando...")
         escreval ("")
      caso 1
         pfim := finserir(pfim)
         escreval("**************************")
         escreval ("Aperte ENTER para voltar")
         escreval("**************************")
         leia(pause)
      caso 2

         leia(pause)
      caso 3
         plistar(pfim)
         leia(pause)
      caso 4
         pbuscar(pfim)
         leia(pause)
         
      outrocaso
         escreval ("")
         escreval ("Opção inválida!!!")
         escreval ("")
         leia(pause)
      fimescolha
   ate opcao = 0

Fimalgoritmo

Captura de tela 2022-05-31 144655.png

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

  • Membro VIP

@Lauro Viana, ao postar o código, antes clique no botão code:

image.png

 

Vai abrir um caixa, aí você cola o código dentro. E mude o tipo para C, C++.....


image.png



Sobre o erro:
A origem é a mesma: o VisualG não está encontrando o var das variáveis globais.

Pronto... então, como o erro está dando na linha 62, seria algo acima desse ponto ou na própria linha. (Quase sempre é isso.)

E olha só:


image.png

Tem 2 var dentro do procedimento. Esse é o problema? NÃO, isso não é um erro de sintaxe, mas seria melhor deixar com um var mesmo. Ajuste isso!


Agora veja onde está o problema:


image.png

Tá, isso é o "inicio" de quê? Tá perdido aí no código, percebe?... Daí, o VisualG está entendendo que é o início do programa principal... (já que estaria associado ao algoritmo lá de cima). E como já disse, não tem o var das variáveis globais (pois eventualmente está mais baixo).

Resumindo: esse trecho da linha 62 em diante (até a linha 82) está fora do lugar... ou incompleta. Não era para ter um inicio ali.
 

ADENDO:

2 minutos atrás, Simon Viegas disse:

Tem 2 var dentro do procedimento. Esse é o problema? NÃO, isso não é um erro de sintaxe, mas seria melhor deixar com um var mesmo. Ajuste isso!

 

Agora que vi. Você declarou o j duas vezes. Aí não poderia. Simplesmente apague o segundo var.


>>>
Sobre:
 

1 hora atrás, Simon Viegas disse:

Uma sugestão seria refazer o programa aos poucos e ir testando cada parte... 


Você corrigir o código atual é um bom exercício para treinar. Mas a ideia é que "o erro que está enfrentando deva ser apenas no que está mexendo no momento"... ou seja, precisa ter uma noção de que o que já foi feito está certo. (Sem erro de sintaxe, no mínimo... e evitando ao máximo erro de lógica.)

Exemplo de base inicial:

 

algoritmo "Pedidos de Lanchonete"
const
   MAX = 10
   
tipo
   rCadPedido = registro
      nome : caractere
      pedido : caractere
   fimRegistro

var
   vPedido :vetor [1..MAX] de rCadPedido
   opcao : caractere
   pause : caractere
inicio
   repita
      limpaTela()
      escrevaL("#########################")
      escrevaL("*******LANCHONETE********")
      escrevaL("# 1 - INCLUIR PEDIDO    #")
      escrevaL("# 2 – ATENDER PEDIDO    #")
      escrevaL("# 3 – LISTAR PEDIDO     #")
      escrevaL("# 4 – PESQUISAR PEDIDO  #")
      escrevaL("# 0 - ENCERRAR          #")
      escrevaL("#########################")
      escrevaL("")
      escreva ("Informe a opção desejada: ")
      leia (opcao)

      escolha opcao
      caso "0"
         escrevaL("")
         escrevaL("Finalizando...")
         escrevaL("")
      caso "1"
         //pfim := fIncluir(pfim)
         escreval("**************************")
         escrevaL("Aperte ENTER para voltar")
         escreval("**************************")
         leia(pause)
      caso "2"
         //pAtender(pfim)
         escreval("**************************")
         escrevaL("Aperte ENTER para voltar")
         escreval("**************************")
         leia(pause)
      caso "3"
         //pListar(pfim)
         escreval("**************************")
         escrevaL("Aperte ENTER para voltar")
         escreval("**************************")
         leia(pause)
      caso "4"
         //pBuscar(pfim)
         escreval("**************************")
         escrevaL("Aperte ENTER para voltar")
         escreval("**************************")
         leia(pause)
         leia(pause)
      outroCaso
         escrevaL("")
         escrevaL("Opção inválida!!!")
         escrevaL("")
         escreval("**************************")
         escrevaL("Aperte ENTER para voltar")
         escreval("**************************")
         leia(pause)
      fimescolha
   ate (opcao = "0")
fimAlgoritmo



Entenda que para deixar assim, seriam feitos vários testes rápidos... daí já percebo que daria para tirar essa repetição do "pause". Exemplo:
 

algoritmo "Pedidos de Lanchonete"
const
   MAX = 10

tipo
   rCadPedido = registro
      nome : caractere
      pedido : caractere
   fimRegistro

var
   vPedido :vetor [1..MAX] de rCadPedido
   opcao : caractere
   pause : caractere
inicio
   repita
      limpaTela()
      escrevaL("#########################")
      escrevaL("*******LANCHONETE********")
      escrevaL("# 1 - INCLUIR PEDIDO    #")
      escrevaL("# 2 – ATENDER PEDIDO    #")
      escrevaL("# 3 – LISTAR PEDIDO     #")
      escrevaL("# 4 – PESQUISAR PEDIDO  #")
      escrevaL("# 0 - ENCERRAR          #")
      escrevaL("#########################")
      escrevaL("")
      escreva ("Informe a opção desejada: ")
      leia (opcao)

      escolha opcao
      caso "0"
         escrevaL("")
         escrevaL("Finalizando...")
         escrevaL("")
      caso "1"
         //pfim := fIncluir(pfim)
      caso "2"
         //pAtender(pfim)
      caso "3"
         //pListar(pfim)
      caso "4"
         //pBuscar(pfim)
      outroCaso
         escrevaL("")
         escrevaL("Opção inválida!!!")
         escrevaL("")
      fimescolha

      se (opcao <> "0") entao
         escreval("**************************")
         escrevaL("Aperte ENTER para voltar")
         escreval("**************************")
         leia(pause)
      fimSe
   ate (opcao = "0")
fimAlgoritmo


Veja que, nos testes, caso já não tenha imaginado, veria que continuaria aparecendo a mensagem de "voltar" mesmo pressionando "0". O que não faz sentido... daí lancei um se.

Não necessariamente ficou melhor... aí vai reanalisando. Poderia deixar como procedimento. Exemplo:
 

procedimento pause()
var
   aux : caractere
inicio
   escreval("**************************")
   escrevaL("Aperte ENTER para voltar")
   escreval("**************************")
   leia(aux)
fimProcedimento


Como que usando o procedimento fica mais reduzido.. poderia deixar os "pauses" em cada caso mesmo.. sei lá. Vai testando e vendo o que fica bom ou não... mas sempre o código deve ficar rodável. Vai sempre testando... e como sempre foi testando antes, a tendência que menos erros ocorram quando inserir uma coisa nova... mas o erro tende a ser apenas onde inserir o novo... 🙂


Tipo, eu deixe o nome do procedimento como pause. Daí "esqueci de inventar outro nome para variável" que vai ficar aguardando o enter... ao testar, já deu erro lá, já que não existia mais a variável pause. (Agora essa nomenclatura está só como nome de procedimento. Por aí vai. 




Agora implementaria uma dos itens do menu... eu começara pelo pListar(). Pois ao começar implementar o fIncluir(), eu já usaria o listar para ver se cadastrou certo ou não...  

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