Ir ao conteúdo

Posts recomendados

Postado

Boa noite. Então, eu estou aprendendo programação e resolvi começar pelo visualG, e agora estava tentando aprender sobre os vetores. Para isso queria criar um tipo de sistema que tivesse um menu principal com as opções de 1- cadastrar por índice, 2- mostrar por índice e 3- procurar por nome. Infelizmente não estou conseguindo fazer a 3° opção funcionar e não sei o que estou fazendo errado. Gostaria de saber se alguém pode me ajudar com isso. Desde já, agradeço.

 

Código:

 

Algoritmo "semnome"

Var
 opcao: inteiro
 nomes: vetor [1..5] de caractere
 idade: vetor [1..5] de inteiro
 end: vetor [1..5] de caractere
 indice: inteiro
 contador: inteiro
 tmp: caractere

procedimento timeer
Inicio
      escreval ("Pressione qualquer tecla p/ continuar")
      leia (tmp)
fimprocedimento
procedimento menu_principal
Inicio
      limpatela
      para contador de 1 ate 22 faca
           escreva("=")
      fimpara
      escreval ("")
      escreval ("*** Menu Principal ***")
      para contador de 1 ate 22 faca
           escreva("=")
      fimpara
      escreval ("")
      escreval ("1 - Cadastrar por índice")
      escreval ("2 - Mostrar por índice")
      escreval ("3 - Procurar por nome")
      escreval ("4 - Sair")
      escreval ("Escolha uma opção: ")
fimprocedimento
procedimento menu_cadastrar
Var opcao1: inteiro  indice: inteiro
Inicio
      limpatela
      escreval ("Cadastrar pelo índice")
      para indice de 1 ate 5 faca
      escreval ("Digite nome: ")
      leia (nomes[indice])
      escreval ("Digite idade: ")
      leia (idade[indice])
      escreval ("Digite endereço: ")
      leia (end[indice])
      escreval ("")
      escreval ("O índice cadastrado é:")
      escreval ("Nome: ",nomes[indice])
      escreval ("Idade: ",idade[indice])
      escreval ("Endereço: ",end[indice])
      escreval ("")
      fimpara
      timeer
fimprocedimento
procedimento menu_mostrar
Inicio
      limpatela
      para indice de 1 ate 5 passo 1 faca
           escreval ("Nome:", nomes[indice])
           escreval ("Idade:", idade[indice])
           escreval ("Endereço:", end[indice])
           escreval ("")
      fimpara
timeer
fimprocedimento
procedimento menu_procurar
Var nome: caractere
Inicio
      limpatela
      escreval ("Digite que está procurando:")
      leia (nome)
      se (nome = nomes[indice]) então
         escreval("")
         escreval("O indice correspondente é:")
         escreval("")
         escreval("Nome:", nomes[indice])
         escreval("Idade:", idade[indice])
         escreval("Endereço:", end[indice])
      senao
           escreval("Usuário não encontrado!")
      fimse
timeer
fimprocedimento
Inicio
      enquanto (opcao <> 4) faca
               menu_principal
               leia (opcao)
               escolha (opcao)
               caso 1
                    menu_cadastrar
               caso 2
                    menu_mostrar
               caso 3
                    menu_procurar
               caso 4
                    escreval ("Finalizando...")
               fimescolha
      fimenquanto
Fimalgoritmo

 

  • Amei 1
  • Solução
Postado

@Aleatorio02 @Aleatorio02     para fazer uma pesquisa nas posições do vetor , você precisa  usar um laço de repetição que pode bem ser o "para / fimpara"  e uma outra variável para marcar que o nome foi encontrado , e assim após o término da pesquisa  se essa tal variável estiver com o valor determinado então mostrar o nome encontrado ,  pois do jeito que está  ele vai escrever várias vezes essa mensagem 

"Usuário não encontrado . . . !"

e essa sua função poderia ser assim  :

procedimento menu_procurar
Var
   nome  : caractere
   achou : logico
Inicio
   limpatela
   escreval ("Digite que está procurando:")
   leia (nome)
   para indice de 1 ate 5 passo 1 faca
      se nome = nomes[indice] então
         achou := verdadeiro
         interrompa
      fimse
   fimpara
   se não achou então
      escreval("Usuário não encontrado . . . !")
   fimse
   se achou então
      escreval("")
      escreval("O indice correspondente é:")
      escreval("")
      escreval("Nome -----:", nomes[indice ])
      escreval("Idade ----:", idade[indice ])
      escreval("Endereço -:", end  [indice ])
   fimse
   timeer
fimprocedimento

e na função cadasastrar  poderia ter como fazer o cadastro de um nome de cada vez , para não ter que inserir cinco nome obrigatoriamente   ,  e seria isso assim :

procedimento menu_cadastrar
Var
   opcao1, indice : inteiro
   fim            : caractere
Inicio
   limpatela
   escreval ("Cadastrar pelo índice")
   para indice de 1 ate 5 faca
      escreval ("Digite nome: ")
      leia (nomes[indice])
      escreval ("Digite idade: ")
      leia (idade[indice])
      escreval ("Digite endereço: ")
      leia (end[indice])
      escreval ("")
      escreval ("O índice cadastrado é:")
      escreval ("Nome: ",nomes[indice])
      escreval ("Idade: ",idade[indice])
      escreval ("Endereço: ",end[indice])
      escreval ("")
      escreval("outro cadastroo S/N")
      leia( fim )
      se fim <> "S" então
         interrompa
      fimse
   fimpara
   timeer
fimprocedimento

 

  • Amei 1
Postado

@devair1010 Valeu ai cara! ajudou dms! 

Agora sim está funcionando. Na verdade eu até ja  tinha tentado usar o PARA do mesmo jeito que você usou mas n]ao estava conseguindo fazer funcionar porque nunca tinha ouvido falar desse comando INTERROMPA, é bem interessante a vai ajudar muito agora. 

E valeu também por ja me falar como corrigir o cadastro, eu tava querendo fazer isso mas ainda não tinha certeza de como faria, pretendia pesquisar sobre mais tarde, mas você me poupou tempo e eu consegui entende, então muito obrigado!

  • Obrigado 1
Postado

@Aleatorio02   mais uma melhoria nesse sistema incluindo um modo de  IA bem simplesinha ,  que na busca por nome , se não encontrar o nome exato , iria procurar nomes parecido com esse :

Algoritmo "Vetores"
Var
   opcao, indice     :         inteiro
   nomes    :  vetor [1..5] de caractere
   idade    :  vetor [1..5] de inteiro
   end      :  vetor [1..5] de caractere
   tmp      :                  caractere
   cont_reg, contador :        inteiro
procedimento timeer
Inicio
   escreval ("Pressione qualquer tecla p/ continuar")
   leia (tmp)
fimprocedimento
procedimento menu_principal
Inicio
   limpatela
   para contador de 1 ate 22 faca
      escreva("=")
   fimpara
   escreval ("")
   escreval ("*** Menu Principal ***")
   para contador de 1 ate 22 faca
      escreva("=")
   fimpara
   escreval ( ""                        )
   escreval ( "1 - Cadastrar por índice")
   escreval ( "2 - Mostrar por índice  ")
   escreval ( "3 - Procurar por nome   ")
   escreval ( "4 - Sair                ")
   escreval ( "Escolha uma opção: "     )
   leia     (  opcao                    )
fimprocedimento
procedimento menu_cadastrar
Var
   opcao1,j, indice : inteiro
   fim            : caractere
Inicio
   limpatela
   escreval ("Cadastrar pelo índice" )
   para indice de 1 ate 5 faca
      cont_reg := cont_reg    +      1
      escreva  ("Digite nome: "      )
      leia     ( nomes[ cont_reg ]   )
      escreva  ("Digite idade: "     )
      leia     ( idade[ cont_reg ]   )
      escreva  ("Digite endereço: "  )
      leia     ( end  [ cont_reg ]   )
      escreval ("                 "  )
      escreval ("outro cadastro S/N ")
      leia     ( fim                 )
      se (fim  <> "S") ou ( cont_reg > 5 ) então
         interrompa
      fimse
   fimpara
fimprocedimento
procedimento menu_mostrar
Inicio
   limpatela
   para indice de 1 ate   cont_reg passo 1  faca
      escreval ("Nome -----: ", nomes[indice]   )// letras não pode col qtd de cas dec
      escreval ("Idade ----: ", idade[indice]:2 )// qtd espcos e num de casas dec
      escreval ("Endereço -: ", end  [indice]   )//
      escreval ("")
   fimpara
   timeer
fimprocedimento
procedimento menu_procurar
Var
   nome         : caractere // ao ser criada o compilador insere o valor VAZIO
   achou, flg   : logico    // ao ser criada o compilador insere o valor FALSO
   j,y,w,x,k,z  : inteiro
   deposito     : vetor [1..5] de caractere
   dep_posic    : vetor [1..5] de inteiro
Inicio
   limpatela
   escreval ("Digite quem está procurando:")
   leia     ( nome                         )
   escreva  ("na busca, Quantas Letras iguais juntas ")
   leia     ( z                            )
   se z < 0 então
      z := 0
   fimse
   para indice de 1 ate 5 passo 1 faca
      se nome   = nomes[indice] então
         achou := verdadeiro   //
         interrompa            // já achou então vAh p/ final
      senao
         para w de 1 ate compr( nome ) faca// o nome proc
            para x de 1 ate compr( nomes[ indice ] ) faca// os nmoes no vetor
               se (copia(nome,w,1)   = copia( nomes[ indice ] ,x,1)) então
                  j   := 1
                  para k de w+1 ate w+3 faca// nome proc
                     se copia(nome,k,1) = copia(nomes[indice],x+j,1) então
                        j := j + 1
                     fimse
                  fimpara
                  se j >= z então // qtd de letras iguais, minimo uma
                     y := y + 1
                     deposito [y] := nomes[indice]
                     dep_posic[y] := x // x indica a posicAo no vetor
                     interrompa
                  fimse
               fimse
            fimpara
            se j >= z então
               interrompa
            fimse
         fimpara
      fimse
   fimpara
   se não achou então
      escreval("O Usuário ( ",maiusc(nome)," ) não foi encontrado . . . !")
      se deposito[1] <> "" então
         escreva("Porém foi encontrado")
         se y > 1 então
            escreval("s semelhantes:")
         senao
            escreval(" esse semelhante:")
         fimse
         para j de 1 ate y faca
            escreva( j,"º ",maiusc(deposito [j]) )
            escreval(" na ", dep_posic[j],"ª posicão do Vetor")
         fimpara
         escreval("")
      fimse
      escreval("")
   fimse
   se achou então
      escreval("                                ")
      escreval("O indice correspondente é:",indice:2)
      escreval("                                ")
      escreval("Nome -----: ", nomes[ indice ]   )
      escreval("Idade ----: ", idade[ indice ]:2 )
      escreval("Endereço -: ", end  [ indice ]   )
   fimse
   timeer
fimprocedimento
// --------------InicIo --------------------- //
Inicio
   enquanto opcao <> 4 faca
      menu_principal
      escolha opcao
      caso 1
         menu_cadastrar
      caso 2
         menu_mostrar
      caso 3
         menu_procurar
      caso 4
         escreval ("Finalizando...")
      fimescolha
   fimenquanto
Fimalgoritmo

 

  • Obrigado 1
  • Membro VIP
Postado

@devair1010, que massa essa busca!!! 🤩

 

Um detalhe:

Em 05/07/2024 às 01:04, devair1010 disse:
                  se j >= z então // qtd de letras iguais, minimo uma
                     y := y + 1
                     deposito [y] := nomes[indice]
                     dep_posic[y] := x // x indica a posicAo no vetor
                     interrompa
                  fimse

 

 

Como está armazenando o índice, creio que utilizaria a variável indice, em vez do x.

 

                  se j >= z então // qtd de letras iguais, minimo uma
                     y := y + 1
                     deposito [y] := nomes[indice]
                     dep_posic[y] := indice // x indica a posicAo no vetor
                     interrompa
                  fimse
  • Curtir 1

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...