Ir ao conteúdo
  • Cadastre-se

VisualG Implementar metodo de busca pelo nome


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

 

Preciso implementar isso :

etapa01.png

 

etapa02.png

 

 

Neste codigo, porém não faço ideia de onde começar. alguém pode me ajudar?

algoritmo "usuarios"

//novos tipos
tipo
   usuario = registro
               nome:caractere
               idade: inteiro
             fimregistro

//variaveis
var
opcao: inteiro

nome: caractere
idade: inteiro

usuarios: vetor[1..50] de usuario
quantidade_usuarios: inteiro
posicao_atual: inteiro

contador: inteiro

//inicio do programa
inicio
   //inicializa as variaveis
   opcao <- 0
   posicao_atual <- 0

   //informa quantas pessoas
   repita
      escreva("Infome a quantidade de usuarios [< 51]: ")
      leia(quantidade_usuarios)
   ate (quantidade_usuarios > 0) e (quantidade_usuarios < 51)

   //processamento
   enquanto opcao <> 3 faca
      //menu
      escreval()
      escreval("---MENU---")
      escreval("[1] - Cadastrar Usuario.")
      escreval("[2] - Listar Usuarios.")
      escreval("[3] - Sair.")
      escreva("Opcao: ")
      leia(opcao)

      //trata as opções
      escolha (opcao)
         caso 1
            //verifica se tem espaco
            se posicao_atual = quantidade_usuarios entao
               escreval("Aviso: não espaco!")
            senao
               //cadastrar
               escreval()
               escreval("---USUARIO---")
               escreva("Nome: ")
               leia(nome)
               repita
                  escreva("Idade: ")
                  leia(idade)
               ate (idade > 0) e (idade < 120)

               //adiciona
               posicao_atual <- posicao_atual + 1
               usuarios[posicao_atual].nome <- nome
               usuarios[posicao_atual].idade <- idade
            fimse
         caso 2
            //lista
            se posicao_atual > 0 entao
               para contador de 1 ate posicao_atual faca
                  //imprime os dados
                  escreval()
                  escreval("USUARIO [", contador, "]")
                  escreval("Nome: ", usuarios[contador].nome)
                  escreval("Idade: ", usuarios[contador].idade)
               fimpara
            senao
               escreval("Aviso: não ha usuarios cadastrados!")
            fimse
         caso 3
            //sair
            escreval("Saindo...")
         outrocaso //opcao não conhecida
            escreval("Error: opcao invalida!")
      fimescolha
   fimenquanto
fimalgoritmo

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Eduardo Nitsche, basicamente seguir os passos.

 

Vamos lá... cada uma das etapas estaria basicamente descrevendo as características de um método. Um para buscar, outro para excluir.

 

Você meio que precisaria ler todos os critérios e construir uma base mental de como será o método... ler todo pois cada parte descreve como será. São características de um único método... Vou tentar explicar linha a linha.

 

 

ETAPA 01

- manter a implementação da S.A. 2 funcional...

Não entendi, então vou pular.

 

- implementar um método para realizar a busca de uma pessoa pelo nome

Basicamente é isso que essa etapa quer... (Só que vai buscar e faze algo.. que no caso é retornar um valor.)

 

 

- conter método que possui um valor inteiro como tipo de retorno

No VisualG, existe 2 tipos de métodos: função e procedimento. Correto? Como tem retorno, então é uma função. Um esqueleto seria:
 

funcao BuscarPeloNome() : inteiro
inicio

   retorne 0
   
fimFuncao

 

 

- conter método que recebe o nome de uma pessoa como parâmetro

Autoexplicativo:

funcao BuscarPeloNome(nomePesquisa : caractere) : inteiro
inicio

   retorne 0
   
fimFuncao

 

 

- verificar em toda a estrutura homogênea a existência de uma correspondência

O que seria "estrutura homogênea"? O vetor... 

funcao BuscarPeloNome(nomePesquisa : caractere) : inteiro
var
   i : inteiro
inicio
   para i de 1 ate posicao_atual faca
      se (nomePesquisa = usuarios[i].nome) entao

      fimSe
   fimPara

   retorne 0

fimFuncao


...

 

Seria algo bem por aí...

 

Só ir seguindo os próximos passos. Tenta implementar. Qualquer dúvida, pare um pouco para pensar mais... se não conseguir... dê um tempo, vá fazer outra coisa, depois volte... caso ainda fique travado, só postar o que conseguiu fazer e onde está com dúvidas.

 

Adendo: é normal poder ocorrer dificuldade. Inclusive é essa dificuldade que nos faz aprender/assimilar melhor.


No aguardo.

 

Link para o comentário
Compartilhar em outros sites

Em 01/08/2022 às 18:19, Simon Viegas disse:

@Eduardo Nitsche, basicamente seguir os passos.

 

Vamos lá... cada uma das etapas estaria basicamente descrevendo as características de um método. Um para buscar, outro para excluir.

 

Você meio que precisaria ler todos os critérios e construir uma base mental de como será o método... ler todo pois cada parte descreve como será. São características de um único método... Vou tentar explicar linha a linha.

 

 

ETAPA 01

- manter a implementação da S.A. 2 funcional...

Não entendi, então vou pular.

 

- implementar um método para realizar a busca de uma pessoa pelo nome

Basicamente é isso que essa etapa quer... (Só que vai buscar e faze algo.. que no caso é retornar um valor.)

 

 

- conter método que possui um valor inteiro como tipo de retorno

No VisualG, existe 2 tipos de métodos: função e procedimento. Correto? Como tem retorno, então é uma função. Um esqueleto seria:
 

funcao BuscarPeloNome() : inteiro
inicio

   retorne 0
   
fimFuncao

 

 

- conter método que recebe o nome de uma pessoa como parâmetro

Autoexplicativo:

funcao BuscarPeloNome(nomePesquisa : caractere) : inteiro
inicio

   retorne 0
   
fimFuncao

 

 

- verificar em toda a estrutura homogênea a existência de uma correspondência

O que seria "estrutura homogênea"? O vetor... 

funcao BuscarPeloNome(nomePesquisa : caractere) : inteiro
var
   i : inteiro
inicio
   para i de 1 ate posicao_atual faca
      se (nomePesquisa = usuarios[i].nome) entao

      fimSe
   fimPara

   retorne 0

fimFuncao


...

 

Seria algo bem por aí...

 

Só ir seguindo os próximos passos. Tenta implementar. Qualquer dúvida, pare um pouco para pensar mais... se não conseguir... dê um tempo, vá fazer outra coisa, depois volte... caso ainda fique travado, só postar o que conseguiu fazer e onde está com dúvidas.

 

Adendo: é normal poder ocorrer dificuldade. Inclusive é essa dificuldade que nos faz aprender/assimilar melhor.


No aguardo.

 

com toda essa explicação eu ainda n consegui implementar no codigo 

 

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Simon Viegas disse:

 

Poste o que já conseguiu fazer e em qual parte está com dúvidas.

 

Resolvi mexer com o procedimento, mas está dando alguns erros ainda.

 

procedimento LerNome ()
inicio
   escreval()
   escreval("---USUARIO---")
   escreva("Nome: ")
   leia(nome)
   repita
      escreva("Idade: ")
      leia(idade)
   ate (idade > 0) e (idade < 120)

   //adiciona
   posicao_atual <- posicao_atual + 1
   usuarios[posicao_atual].nome <- nome
   usuarios[posicao_atual].idade <- idade
fimprocedimento

procedimento coletarnome ()
inicio
   escreval("Informe um nome a ser pesquisado: ")
   leia(pesquisa)
fimprocedimento

procedimento realizarpesquisa ()
inicio
   para contador de 1 ate 5 faca
      se (nome = pesquisa) entao
         escreval("O nome foi encontrado na posição: ", contador)
         encontrou := 1
      fimse
   fimpara
   se (encontrou = 0) entao
      escreval("O nome informado não foi encontrado.")
   fimse
fimprocedimento

algoritmo "usuarios"

//novos tipos
tipo
   usuario = registro
      nome:caractere
      idade: inteiro
   fimregistro

   //variaveis
var
   opcao: inteiro
   pesquisa: caractere

   nome: caractere
   idade: inteiro

   usuarios: vetor[1..50] de usuario
   quantidade_usuarios: inteiro
   posicao_atual: inteiro

   contador: inteiro
   encontrou : inteiro

   //inicio do programa
inicio
   //inicializa as variaveis
   opcao <- 0
   posicao_atual <- 0

   //informa quantas pessoas
   repita
      escreva("Infome a quantidade de usuarios [< 5]: ")
      leia(quantidade_usuarios)
   ate (quantidade_usuarios > 0) e (quantidade_usuarios < 5)

   //processamento
   enquanto opcao <> 5 faca
      //menu
      escreval()
      escreval("---MENU---")
      escreval("[1] - Cadastrar Usuario.")
      escreval("[2] - Listar Usuarios.")
      escreval("[3] - Pesquisar.")
      escreval("[4] - Remover usuarios")
      escreval("[5] - Sair.")
      escreva("Opcao: ")
      leia(opcao)

      //trata as opções
      escolha (opcao)
      caso 1
         LerNome()

      caso 2
         //lista
         se posicao_atual > 0 entao
            para contador de 1 ate posicao_atual faca
               //imprime os dados
               escreval()
               escreval("USUARIO [", contador, "]")
               escreval("Nome: ", usuarios[contador].nome)
               escreval("Idade: ", usuarios[contador].idade)
            fimpara
         senao
            escreval("Aviso: não ha usuarios cadastrados!")
         fimse
      caso 3
         LerNome()
         ColetarNome()
         RealizarPesquisa()
     
      caso 4

      caso 5
         //sair
         escreval("Saindo...")
      outrocaso //opcao não conhecida
         escreval("Error: opcao invalida!")
      fimescolha
   fimenquanto
fimalgoritmo
//fim do programa

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

ADENDO IMPORTNTE

Como já comecei a complementar minha respostar anterior antes da tua resposta acima, vou postar do jeito que está... mais abaixo respondo tua nova postagem..

#########


Dando continuidade.

Peço desculpa, mas eu costumo ser um pouco prolixo... é o meu jeito. Tento melhorar, mas é complicado. Desculpe-me. Acho que uso isso também para ficar revisando ideias... Faz parte. Dito isso, vamos ao novo exemplo:

O código atualmente estaria assim:
 

Em 01/08/2022 às 18:19, Simon Viegas disse:

- verificar em toda a estrutura homogênea [no vetor] a existência de uma correspondência [do nome a ser pesquisado]

O que seria "estrutura homogênea"? O vetor... 

funcao BuscarPeloNome(nomePesquisa : caractere) : inteiro
var
   i : inteiro
inicio
   para i de 1 ate posicao_atual faca
      se (nomePesquisa = usuarios[i].nome) entao

      fimSe
   fimPara

   retorne 0

fimFuncao

 

Vamos para o próximo passo:
 

- retornar -1 caso não encontre nenhuma correspondência

e

- retornar o número da posição referente ao cadastro da pessoa caso encontre

 

O que até aqui esses "critérios de avalições querem"?

 

Vale ressaltar que seria preciso ler todos os critérios e ir relendo eles até assimilar tudo. Eles fazem parte de uma coisa só e não são necessariamente uma sequência lógica... fui fazendo em ordem apenas para tentar demonstrar o que seria cada item..., ou seja, primeiro entendi mais ou menos o grosso (lé ele - como dizem aqui na Bahia).. aí depois fui seguindo em ordem...

 

Ele quer que "crie uma função de busca por item de registro, onde será usado um nome como referência (para identificar o registro). Daí, quer que retorne a posição desse registro. 'Ah!, mas se não encontrar?'. Retorne o valor -1".. ou seja, lá quem for usar essa função, terá que verificar se o registro é diferente de -1... se for -1, não encontrou. Se for outro valor (que seria entre 1 e o tamanho do vetor), então esse valor seria a posição do registro que eu quero...  (registro que eu usei o nome para achar). Isso como ideia... já que pode não funcionar direito... continuando...

 

Talvez poderia ser algo assim:

 

funcao BuscarPeloNome(nomePesquisa : caractere) : inteiro
var
   i : inteiro
   posicao : logico
inicio
   posicao <- -1
   
   para i de 1 ate posicao_atual faca
      se (nomePesquisa = usuarios[i].nome) entao
         posicao <- i
      fimSe
   fimPara

   retorne posicao
fimFuncao

 

Lá quando chamar essa função, usaria algo como:

 

posicaoRetornada <- BuscaPeloNome(nomePesquisa)

 

Daí, usaria essa variável para exibir o que quiser. Ex.:

 

escreval("USUARIO [", posicaoPessoa, "]")
escreval("Nome: ", usuarios[posicaoPessoa].nome)
escreval("Idade: ", usuarios[posicaoPessoa].idade)



Tente primeiramente entender as lógicas que sugeri acima...

 

Após, tente entender que eu não consegui "inventar" ela no do nada... pode ter certeza que, em algum momento, sempre haverá um grande esforço... mas, como já tive que em algum momento implementar algo semelhante, provavelmente tentei inventar uma lógica E NÃO DEVO TER CONSEGUIDO... daí pesquisei, é fui me batendo com exemplos parecidos (ou em fóruns ou no Google etc).. e aos poucos fui refinando o que encontrei ou alguém me sugeriu ou vi alguém sugerindo para alguém... 

 

O que quero dizer: dificilmente um programador cria algo. Diria que é raro... geralmente vamos tendo contato e experiências... daí vamos readaptando aquilo que já vimos..

 

Observe que no código acima eu não deixei comentários... isso porque a proposta é que o código seja autoexplicativo. "Códigos não devem precisar de comentários"... Supondo que um código está bem escrito, se não entender de logo de cara, tem que quebrar a cabeça mesmo até similar... daí, tenho certeza, que, ao entender os conceitos, verás que eles podem se repetir em diversos outros momentos, não exatamente iguais, mais pelo menos parecidos... passando assim a tratar como "triviais"..., ou seja, são tipos de coisas que podem parecer complicadas para quem ainda não entendeu, mais automaticamente passando a ser óbvio depois que entender! 😄

 

Segue uma possível explicação do que "imaginei" (copiei / adaptei algum lógica que vi em algum lugar, ou em algum momento, mas que já foi assimilado por mim - ou não):

 

funcao BuscarPeloNome(nomePesquisa : caractere) : inteiro
var
   i : inteiro
   posicao : logico
inicio
   posicao <- -1 //caso não encontar, ele quer que retorne -1, certo?
   
   para i de 1 ate posicao_atual faca
      se (nomePesquisa = usuarios[i].nome) entao
         posicao <- i //como essa "alteração do valor" está dentro do "se", só vai atualizar se a condição acima for válida
      fimSe
   fimPara

   retorne posicao //logo, OU vai retornar -1 (valor inicial), OU vai retornar a posição desejada (já que o "se" foi preparado para filtrar isso)
fimFuncao

 

Não se preocupe em copiar ideias dos outros..., mas o importante é NÃO copiar e colar os códigos em si, ou seja, entenda a lógica envolvida e redigite tudo na mão...Ao fazer isso, porá inclusive melhorar ou mesmo corrigir... Por exemplo: se você prestou atenção, terá visto que usei um nome de variável errada lá mais acima:

Use:

escreval("USUARIO [", posicaoPessoa, "]")
escreval("Nome: ", usuarios[posicaoPessoa].nome)
escreval("Idade: ", usuarios[posicaoPessoa].idade)


Mas deveria ser:

escreval("USUARIO [", posicaoRetornada, "]")
escreval("Nome: ", usuarios[posicaoRetornada].nome)
escreval("Idade: ", usuarios[posicaoRetornada].idade)

 

 

Caso deseje, tente seguir os passos que seguir na postagem anterior e aqui... daí, caso tenha dúvidas em alguma parte, informe qual. Por favor, fique a vontade para tirar qualquer dúvidas, mas tente ir sendo mais específico...

 

 

RESPOSTA A POSTAGEM ANTERIOR

####
 

4 minutos atrás, Eduardo Nitsche disse:

Resolvi mexer com o procedimento, mas está dando alguns erros ainda.

 


Qual erro? 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução
1 hora atrás, Eduardo Nitsche disse:

Ele não esta dando o nome. Está mostrando que foi encontrado em todas essas posições sendo que botei ele só na posição 1.


Qual validação está fazendo?

 

Essa?

2 horas atrás, Eduardo Nitsche disse:
se (nome = pesquisa) entao


Qual o valor que vai está em nome, qual valor vai está em pesquisa? Se forem iguais e não estiver se alterando, vai dar ser igual mesmo.... 

 


Veja na minha postagem anterior um exemplo:
 

2 horas atrás, Simon Viegas disse:
se (nomePesquisa = usuarios[i].nome) entao


Você precisaria comparar o valor a ser pesquisado com cada uma dos valores no vetor.

 

Poste seu código completo e em qual parte está com dúvidas.
 

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Simon Viegas disse:


Qual validação está fazendo?

 

Essa?


Qual o valor que vai está em nome, qual valor vai está em pesquisa? Se forem iguais e não estiver se alterando, vai dar ser igual mesmo.... 

 


Veja na minha postagem anterior um exemplo:
 


Você precisaria comparar o valor a ser pesquisado com cada uma dos valores no vetor.

 

Poste seu código completo e em qual parte está com dúvidas.
 

Eu consegui fazer funcionar +/- porém não estou conseguindo remover o nome so

 

PROCEDIMENTO LERNOME ()
INICIO

     se posicao_atual = quantidade_usuarios entao
               escreval("Aviso: não espaco!")
            senao
               //cadastrar
               escreval()
               escreval("---USUARIO---")
               escreva("Nome: ")
               leia(nome)
               repita
                  escreva("Idade: ")
                  leia(idade)
               ate (idade > 0) e (idade < 120)

               //adiciona
               posicao_atual <- posicao_atual + 1
               usuarios[posicao_atual].nome <- nome
               usuarios[posicao_atual].idade <- idade
            fimse

FIMPROCEDIMENTO

PROCEDIMENTO COLETARNOME ()
INICIO

ESCREVAL("Informe um nome a ser pesquisado: ")
   LEIA(pesquisa)

FIMPROCEDIMENTO

PROCEDIMENTO REALIZARPESQUISA ()
INICIO

 PARA contador DE 1 ATE 5 FACA
      SE (nome = pesquisa) ENTAO
         ESCREVAL("O nome foi encontrado na posição: " , posicao_atual)
         encontrou := 1
      FIMSE
   FIMPARA
   SE (encontrou = 0) ENTAO
      ESCREVAL("O nome informado não foi encontrado.")
   FIMSE

FIMPROCEDIMENTO

PROCEDIMENTO REMOVERUSUARIO ()

INICIO

   //Estrutura para realizar a pesquisa e a remoção do nome informado
   PARA contador DE 1 ATE 5 FACA
      SE (nome = pesquisa) ENTAO
         ESCREVAL("O nome foi encontrado na posição: ", posicao_atual, " e será removido!")
         encontrou := 1
         nome := ""
         //nome[contador] := nome[contador+1]
         //idade[contador] := 0
      FIMSE
   FIMPARA
   SE (encontrou = 0) ENTAO
      ESCREVAL("O nome informado não foi encontrado. Nenhum valor será removido.")
   FIMSE

   //Estrutura para realizar a impressão do vetor após a remoção do nome informado
   ESCREVAL("Nomes registrados: ")
   PARA contador DE 1 ATE 5 FACA
      ESCREVAL("Posição: ", posicao_atual, ": ", nome)
   FIMPARA

FIMPROCEDIMENTO

algoritmo "S4-etapa1-e-etapa2"

//novos tipos
tipo
   usuario = registro
               nome:caractere
               idade: inteiro
             fimregistro

//variaveis
var
opcao: inteiro
pesquisa: caractere

nome: caractere
idade: inteiro

usuarios: vetor[1..5] de usuario
quantidade_usuarios: inteiro
posicao_atual: inteiro

contador: inteiro
encontrou : inteiro

//inicio do programa
inicio
   //inicializa as variaveis
   opcao <- 0
   posicao_atual <- 0

   //informa quantas pessoas
   repita
      escreva("Infome a quantidade de usuarios [< 5]: ")
      leia(quantidade_usuarios)
   ate (quantidade_usuarios > 0) e (quantidade_usuarios < 5)

   //processamento
   enquanto opcao <> 5 faca
      //menu
      escreval()
      escreval("---MENU---")
      escreval("[1] - Cadastrar Usuario.")
      escreval("[2] - Listar Usuarios.")
      escreval("[3] - Pesquisar.")
      escreval("[4] - Remover usuarios")
      escreval("[5] - Sair.")
      escreva("Opcao: ")
      leia(opcao)

      //trata as opções
      escolha (opcao)
         caso 1

         LERNOME

         caso 2
            //lista
            se posicao_atual > 0 entao
               para contador de 1 ate posicao_atual faca
                  //imprime os dados
                  escreval()
                  escreval("USUARIO [", contador, "]")
                  escreval("Nome: ", usuarios[contador].nome)
                  escreval("Idade: ", usuarios[contador].idade)
               fimpara
            senao
               escreval("Aviso: não ha usuarios cadastrados!")
            fimse
         caso 3
         
             COLETARNOME
             
             REALIZARPESQUISA
         caso 4

              COLETARNOME
              
              REMOVERUSUARIO

         caso 5
              //sair
            escreval("Saindo...")
         outrocaso //opcao não conhecida
            escreval("Error: opcao invalida!")
      fimescolha
   fimenquanto
fimalgoritmo
//fim do programa

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!