Ir ao conteúdo
  • Cadastre-se

VisualG Remover usuário da estrutura de dados


Ir à solução Resolvido por devair1010,

Posts recomendados

Ola!

estou em duvida em como posso realizar a exclusao de usuário nessa atividade.

 

Segundo o exercício: " implementar uma função para remover um usuário da estrutura homogênea. Para tanto, deverá buscar a posição referente a estrutura homogênea pelo nome da pessoa, e caso encontre, deverá remover estas informações da estrutura.
Após realizar a remoção de uma pessoa do cadastro, deverá trazer todas as informações armazenadas em posições posteriores uma posição para trás, a fim de não deixar uma posição em branco entre as informações. Também deverá adicionar mais uma opção no menu, 5 – Remover usuário.
Após selecionar esta opção, deverá ser solicitado o nome do usuário, para caso encontrado, efetivar a sua remoção da estrutura homogênea."

 

Desde ja agradeço!

 

Var
   // Seção de Declarações das variáveis
   usuario : caractere
   idade:vetor[1..4, 1..4] de INTEIRO
   nomes: vetor[1..4, 1..4] de caractere
   i, j, s : inteiro
   linha, coluna, contador: inteiro
   op, nome: caractere
procedimento inicializa()
Inicio
   // Seção de Comandos, procedimento, funções, operadores, etc...

   enquanto op<>"4" faca
      escreval("-----------------------------")
      escreval("           MENU             ")
      escreval("-----------------------------")
      escreval("(1) Cadastrar o Usuário")
      escreval("(2) Buscar o Usuário")
      escreval("(3) Buscar o Usuário")
      escreval("(4) Sair")
      escreval("(5) Remover Usuário")
      
      escreva("Opção: ")
      LEIA(op)

      se op="1" entao
         limpatela
         se s=10 entao
            Escreval ("Esgotou o limite de cadastros!")
         senao
            cadastra_usuario()
         fimse
      fimse

      se op="2" entao
         limpatela
         buscar_usuario()
      fimse
      se op="3" entao
         limpatela
         listar_usuario()
      fimse

      se op="4" entao
         para i de 1 ate 4 FACA
            nomes[i] <-"x"
         fimpara
         limpatela
         escreval ("Obrigado, volte sempre!")
      fimse
   fimenquanto
fimprocedimento


procedimento cadastra_usuario()
inicio
   para i de 1 ate 4 faca

      escreval("Informe os dados: ")
      escreval("Usuário", i)
      escreva("Nome: ")
      leia(nomes[i])
      escreva("Idade:")
      leia(idade[i])
      escreval("---------------------")
      voltar_menu()
      s<-s+1
      limpatela
   fimse
fimpara
escreval("Esgotou o limite de cadastros!")
fimprocedimento


procedimento voltar_menu()
inicio
   Escreva("Voltar para o menu (S/N)?")
   LEIA(op)
   se op="S" entao
      i<-i+1
      limpatela
      cadastra_usuario()
   fimse

fimalgoritmo
fimprocedimento

procedimento buscar_usuario()
inicio
   j<-0
   Escreva("Digite o nome do usuario:")
   leia(nome)
   para i de 1 ate 4 faca
      se nome=nomes[i]entao
         escreval("nome:",nomes[i])
         escreval("idade",idade[i])
         j<-j+1
      fimse
   fimpara
   se  j=0 entao
      escreval("Funcionario inexistente")
   fimse
   voltar_menu2()
   limpatela
fimprocedimento

procedimento voltar_menu2()
inicio
   escreva("Voltar o menu? (S/N)?")
   Leia(op)
   se op="S" entao
      limpatela
      inicializa()
   senao
      limpatela
      buscar_usuario()
   fimse
fimprocedimento

procedimento listar_usuario()
inicio
   para i de 1 ate 4 faca
      escreval(nomes[i]:15, idade[i])
      escreval("---------------------")
      voltar_menu2()
   fimpara
fimalgoritmo
fimprocedimento

inicio
   inicializa()
fimalgoritmo

 

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

@joshuayuuki   se você Quer realmente excluir os dados referentes a um usuário  ,  você pode fazer isso após encontrar o dito usuário ,  então use um Loop , que pode ser o para , e vai pegando  os registros que estão na próxima posição da frente e coloque nessa posição , e incremente a posição , e assim vai até o total de cadastros , que geralmente se usa a variáveL contador , e depois do finaL do Loop decremente essa variável contador , que faz a contagem de cadastros .  e já que você está usando dois vetores então precisa fazer isso nos dois ao mesmo tempo ,  por isso seria melhor usar apenas um vetor .

Link para o comentário
Compartilhar em outros sites

Em 13/03/2021 às 21:05, devair1010 disse:

@joshuayuuki   se você Quer realmente excluir os dados referentes a um usuário  ,  você pode fazer isso após encontrar o dito usuário ,  então use um Loop , que pode ser o para , e vai pegando  os registros que estão na próxima posição da frente e coloque nessa posição , e incremente a posição , e assim vai até o total de cadastros , que geralmente se usa a variáveL contador , e depois do final do Loop decremente essa variável contador , que faz a contagem de cadastros .  e já que você está usando dois vetores então precisa fazer isso nos dois ao mesmo tempo ,  por isso seria melhor usar apenas um vetor .

 

@devair1010, não to conseguindo passar isso para código. Já que para inclusão era necessário criar dois vetores (um para idade e outro para nome para visualizar, que era o exercício anterior)

 

Estou travado aqui:

 

procedimento excluir_usuario()
inicio
   escreva("Deseja excluir o Usuário(S/N)?")
   leia(op)
   se op = "S" entao
      limpaTela()
      voltar_menu()
   fimSe

 

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

Em 13/03/2021 às 21:05, devair1010 disse:

@joshuayuuki   se você Quer realmente excluir os dados referentes a um usuário  ,  você pode fazer isso após encontrar o dito usuário ,  então use um Loop , que pode ser o para , e vai pegando  os registros que estão na próxima posição da frente e coloque nessa posição , e incremente a posição , e assim vai até o total de cadastros , que geralmente se usa a variáveL contador , e depois do final do Loop decremente essa variável contador , que faz a contagem de cadastros .  e já que você está usando dois vetores então precisa fazer isso nos dois ao mesmo tempo ,  por isso seria melhor usar apenas um vetor .

 

Segue novo código:

procedimento excluir_usuario()
inicio
   escreval("            * EXCLUSAO *     ")
   escreval("")

   escreval("    * lista de nomes *     ")
   para i de 1 ate 4 faca
      escreval(nomes[i]:15, idade[i])
      escreval("---------------------")
      Escreva("Digite o nome do usuario:")
      leia(nome)
      para i de 1 ate 4 faca
         se nome=nomes[i]entao
            escreval("nome:",nomes[i])
            escreval("idade",idade[i])
            j<-j+1
         fimse
      fimpara
      se  j=0 entao
         escreval("Funcionario inexistente")
      fimse
      voltar_menu2()
      limpatela
fimprocedimento

 

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

  • Solução

@joshuayuuki    esse modo como você está  fazendo o código ,  é confuso , e fica difícil fazer a remoção ,  e esses procedimentos para voltar ao menu , não precisa , pois ele volta automaticamente por causa do loop enquanto que está lá no procedimento inicializa,  e não precisa desses parenteses no final do procedimento que não recebe nenhum dado por parâmetro , e não é boa pratica , pois a cada chamada de uma função ou procedimento que não retorna para o local de onde foi chamado , o programa vai acumulando esses dados de retorno no ram top ou stack da máquina , e isso faz o pc ficar cada vez mais lento ,  e seu programa com muitas modificações poderia ser assim  :

Algoritmo "remover usuario_3"
Var
   usuario,op,nome,sair,c: caractere
   dados_do_usuario      : vetor[1..4, 1..4] de caractere
   parecidos             : vetor[0..100]     de caractere
   // Matriz com 4 Linhas de 4 colunas cada
   // cada linha é um usuário
   // cada coluna é um dado desse usuário
   i, j, s,achou         : inteiro
   linha,coluna,contador : inteiro
procedimento excluir_usuario
inicio
  escreval("    *    EXCLUSAO    *")
  escreval
  escreval("    * lista de nomes *")
  para i de 1 ate 4 faca
    escreval("Nome Usu ",i," ",dados_do_usuario[i,1])
  fimpara
  escreval("---------------------")
  escreva("nome do usuario para remover : ")
  leia(nome)
  achou <- 0
  para i de 1 ate contador faca
    se nome = dados_do_usuario[i,1] entao
       escreval("nome --: ",dados_do_usuario[i,1])
       escreval("idade -: ",dados_do_usuario[i,2])
       achou <- 1
       escreval("tem certeza que Quer remover ",nome," S/N")
       leia( op )
       se op <> "s" entao
         interrompa
       fimse
       para j de i ate contador - 1 faca
         dados_do_usuario[j,1] <- dados_do_usuario[j+1,1]
         dados_do_usuario[j,2] <- dados_do_usuario[j+1,2]
       fimpara
       contador <- contador - 1 // decrementa a qtd pois excluiu hum
    fimse
    se achou = 1 entao
      escreval("Usuário ",nome," Removido Com Sucesso !")
      interrompa
    fimse
 fimpara
 se achou = 0 entao
    escreval("Funcionario inexistente !")
 fimse
fimprocedimento
procedimento inicializa
Inicio
  enquanto op <> "4" faca
    escreval("-----------------------------")
    escreval("           MENU              ")
    escreval("-----------------------------")
    escreval(" ( 1 ) Cadastrar Usuário     ")
    escreval(" ( 2 ) Buscar    Usuário     ")
    escreval(" ( 3 ) Listar    Usuário     ")
    escreval(" ( 4 ) Sair                  ")
    escreval(" ( 5 ) Remover Usuário       ")
    escreva (" Opção: "                     )
    leia( op )
    limpatela
    se op = "1" entao
      cadastra_usuario
    fimse
    se op = "2" entao
      buscar_usuario
    fimse
    se op = "3" entao
      listar_usuario
    fimse
    se op = "4" entao
      escreval
      escreval ("Obrigado, volte sempre  !")
    fimse
    se op = "5" entao
      excluir_usuario
    fimse
    //DeLay
  fimenquanto
fimprocedimento
procedimento cadastra_usuario
inicio
  escreval("Informe os dados :")
  repita
    contador <- contador + 1
    escreval("Usuário ",contador)
    escreva("Nome --: ")
    leia(dados_do_usuario[contador,1])// coluna 1 é o nome do Usuário
    c <- copia(dados_do_usuario[contador,1],0,4)
    escreval("1ª Letra do Nome ",c)
    
    escreva("Idade -: ")
    leia(dados_do_usuario[contador,2])// coluna 1 é a idade do Usuário
                                      // e ainda sobram duas a 3 e a 4
                                      // não usadas
    escreval("---------------------")
    escreva("Cadastrar Outro S/N ")
    leia( sair )
    se contador > 4 entao
      escreval("Esgotou o limite de cadastros !")
      sair <- "n"
    fimse
  ate sair = "n"
fimprocedimento
procedimento buscar_usuario
var
  posi : inteiro
inicio
  escreva("nome do usuario: ")
  leia(nome)
  achou <- 0
  posi <- 0
  para i de 1 ate 4 faca
    se nome = dados_do_usuario[i,1] entao
      escreval("Nome --: ",dados_do_usuario[i,1])
      escreval("Idade -: ",dados_do_usuario[i,2])
    senao
      se copia(nome,1,1) = copia(dados_do_usuario[i,1],1,1) entao
        posi <- posi + 1
        parecidos[posi] <- dados_do_usuario[i,1]
      fimse
    fimse
  fimpara
  se achou = 0 entao
      escreval("Funcionario ( ",nome," ) inexistente !")
      se posi > 0 entao
        escreva("Mas Foi encontrAdo ",posi," Nome")
        se posi > 1 entao
          escreva("s")
        fimse
        escreva(" PareciDo")
        se posi > 1 entao
          escreva("s")
         fimse
         escreval(" :")
        para j de 1 ate posi faca
          escreval("Nome -> ",parecidos[j])
        fimpara
        escreval
      fimse
   fimse
fimprocedimento
procedimento listar_usuario
inicio
  para i de 1 ate contador faca
    escreval("Nome --: ",dados_do_usuario[i,1])
    escreval("Idade -: ",dados_do_usuario[i,2])
    escreval("---------------------")
  fimpara
fimprocedimento
procedimento delay
inicio
  escreval
  escreval("Barra De Tempo   Espere !")
  para i de 1 ate 30 faca
    para j de 1 ate 3000 faca
      s <- s + 1
    fimpara
    escreva("#")
  fimpara
  escreval
fimprocedimento
inicio
   inicializa
fimalgoritmo

 

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

  • Membro VIP

@joshuayuuki, entendo que para "pensar em excluir", precisaria antes organizar melhor como cadastrar.

 

A forma que vai acessar os dados, e também excluir, depende diretamente de como os dados serão armazenados.

 

Alguns pontos:

  • vai utilizar vetores ou matrizes? Pode utilizar registros?
  • os cadastros devem ser feitos todos de uma vez ou um a um?
  • pode ter nomes iguais no cadastro? O que faz se tiver nome iguais?
  • etc

 

A ideia é que só poderia pensar no "segundo" após o "primeiro" está encaminhado.

 

Sugiro postar o enunciado completo do primeiro exercício + o código completo desse exercício. Diversos pontos são definidos no próprio enunciado... e, por via de regra, todas os requisitos devem ser seguidos.

 

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

  • 8 meses depois...

Entao galera, provavelmente eu e o autor do topico temos a mesma materia, eu estou fazendo o mesmo enunciado do colega ai so que estou usando escolha e para para a maioria das opções. Estou preso no mesmo ponto que ele porém ja fiz a parte da exclusão do usuario, porém o vetor fica "vazio" naquela posição onde o usuario foi excluido.

A minha pergunta é como faço para retroceder a posição do vetor por exemplo:

n[x] em três posições n[1] ,n[2] ,n[3] eu selecionei pra excluir o n[2]

como fazer para que o n[3] retroceda para a posição n[2], para que não fique uma posição vazia entre os vetores.

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

@Drakrar      como o @Simon Viegas disse , para excluir depende de como foi cadastrado , e se voce usar um contador , igual ao codigo que eu postei  ali acima no numero  #5 ,   apos encontrar o dado ser excluido voce puxa os dados das posições acima dele , uma posicao para baixo  ,  e decrementa o contador , mas tambem pode ser de muitas outras maneiras , e se voce puder poste o codigo completo que voce já fez , e assim poderemos ver como esta e em que podemos ajudar  ,   ..  , ..   

Link para o comentário
Compartilhar em outros sites

Certo, eu até tentei seguir algumas das coisas que vi acima e ate consegui fazer ele copiar o da posição a frente, mas daí fica duplicado mesmo regredindo o contador ele não exclui o registro na varialvel.
 

Algoritmo "Entrada de dados com vetor pesquisa e delete"

Var
   nomeusuario: vetor [1..10] de caractere
   idadeusuario: vetor [1..10] de inteiro
   sairsistema:logico
   numero:inteiro
   x:inteiro
   pesqnome,removenome:caractere
   contador,contador2,encontrou:inteiro

Inicio

   sairsistema:= falso
   enquanto (sairsistema = falso) faca
      escreval("Escolha uma opção.")
      escreval("1- Cadastro usuario.")
      escreval("2- Lista de usuarios.")
      escreval("3- Sair do sistema.")
      escreval("4- Buscar usuario pelo nome.")
      escreval("5- Remover usuario.")
      leia(numero)
      escolha numero
      caso 1
         escreval("quantos usuarios deseja cadastrar?")
         leia(contador2)
         contador:= contador+contador2
         se (contador>=11)entao
            escreval(" O cadastro de usuarios é de no maximo 10 usuarios!")
            contador:= contador-contador2
         senao
            para x de 1 ate contador faca
               se (nomeusuario[x] = "")entao
                  escreval("a posição", x, " de",contador," esta disponivel")
                  escreval("digite o nome do usuario.")
                  leia(nomeusuario[x])
                  escreval(" agora digite a idade do usuario.")
                  leia(idadeusuario[x])
                  escreval("cadastro realizado")
               senao
                  escreval("a posição", x," esta ocupada")
               fimse
            fimpara
         fimse
      caso 2
         se (nomeusuario[x] = "")entao
            escreval(" não foi encontrado nenhum usuario cadastrado.")
         senao
            escreval("usuarios cadastrados sao:")
            para x de 1 ate contador faca
               escreval("usuario :",nomeusuario[x]," idade: ",idadeusuario[x])
            fimpara
         fimse
      caso 3
         escreval(" o sistema sera finalizado")
         sairsistema:= verdadeiro
      caso 4
         encontrou:=0
         escreval("Digite o Nome do usuario a ser pesquisado.")
         leia(pesqnome)
         para x de 1 ate contador faca
            se (nomeusuario[x]= pesqnome) entao
               escreval("a pesquisa encontrou o nome ",nomeusuario[x]," na posição",contador,".")
               encontrou:= 1
            fimse
         fimpara
         se (encontrou = 0)entao
            escreval("o nome da pesquisa não foi localizado no sistema!.")
         fimse
      caso 5
         encontrou := 0
         escreval("Informe um nome para remoção do cadastro.")
         escreval("Lembre que após exclui-lo não será possível reverter,")
         escreval("apenas realizando novo cadastro")
         leia(removenome)
         para x de 1 ate contador faca
            se (nomeusuario[x] = removenome)entao
               escreval("a pesquisa encontrou o nome ",nomeusuario[x]," na posição ",contador," e será removido")
               encontrou := 1
               nomeusuario[x]:=""
               idadeusuario[x]:= 0
            fimse
         fimpara
         para x de 1 ate contador faca
            se(nomeusuario[x]="")entao
               nomeusuario[x]:= nomeusuario[x+1]
               idadeusuario[x] := idadeusuario[x+1]
               contador:= contador-1
            fimse
         fimpara
         se (encontrou = 0)entao
            escreval("o nome para remoção não foi localizado no sistema!.")
            fimse
         outrocaso
            escreval("não consegui identificar a resposta escolha novamente.")
      fimescolha
   fimenquanto
Fimalgoritmo


 

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

  • 1 ano depois...

@Drakrar     você  , na função excluir , já encontrando o nome que quer excluir  ,volta a pesquisar no mesmo vetor procurando pela mesma posição já encontrada ,  e nem precisam , pois  se já sabes a posição então basta puxar os dados de cima para baixo  e decrementar o contador ,   

 

@ewertondamax   olá , boa tarde ,  as posições da memória sempre tem algum dado gravado nelas , mesmo que seja o valor zero , então o que se pode é modificar o conteúdo  de tal posição de memória ,  e creio que você percebeu que ao  excluir  um dado  o algoritmo puxa os dados de cima para baixo ,  mas apenas isso não resolve  ,  pois vai continuar  com a mesma quantidade de cadastros ,  e os dados continuarão lá no mesmo lugar , e o que resolve mesmo é decrementar o contador , e o algoritmo passa a considerar válidos apenas a quantidade apontada pelo contador , e sendo assim se você quiser remover todos os dados  cadastros basta zerar o contador .

Algoritmo "Entrada de dados com vetor pesquisa e delete"
Var
  nomeusuario          : vetor [1..10] de caractere
  idadeusuario         : vetor [1..10] de inteiro
  sairsistema          : logico
  resp                 : caractere
  numero,z,x,encontrou : inteiro
  pesqnome ,removenome : caractere
  contador , contador2 : inteiro
Inicio
  sairsistema := falso
  enquanto sairsistema = falso faca
    escreval("   Escolha uma opção.       ")
    escreval("1- Cadastro usuario.        ")
    escreval("2- Lista de usuarios.       ")
    escreval("3- Sair do sistema.         ")
    escreval("4- Buscar usuario pelo nome.")
    escreval("5- Remover usuario.         ")
    escreval("6- Remover Todos usuario.   ")
    leia(numero)
    escolha numero
    caso 1
      escreval("quantos usuarios deseja cadastrar?")
      leia(contador2)
      contador:= contador+contador2
      se (contador>=11)então
        escreval(" O cadastro de usuarios é de no maximo 10 usuarios!")
        contador:= contador-contador2
      senao
        para x de 1 ate contador faca
          se (nomeusuario[x] = "")então
            escreval("a posição", x, " de",contador," esta disponivel")
            escreval("digite o nome do usuario.")
            leia(nomeusuario[x])
            escreval(" agora digite a idade do usuario.")
            leia(idadeusuario[x])
            escreval("cadastro realizado")
          senao
            escreval("a posição", x," esta ocupada")
          fimse
        fimpara
      fimse
    caso 2
      se (nomeusuario[x] = "")então
        escreval(" não foi encontrado nenhum usuario cadastrado.")
      senao
        escreval("usuarios cadastrados sao:")
        para x de 1 ate contador faca
          escreval("usuario :",nomeusuario[x]," idade: ",idadeusuario[x])
        fimpara
      fimse
    caso 3
      escreval(" o sistema sera finalizado")
      sairsistema:= verdadeiro
    caso 4
      encontrou:=0
      escreval("Digite o Nome do usuario a ser pesquisado.")
      leia(pesqnome)
      para x de 1 ate contador faca
        se (nomeusuario[x]= pesqnome) então
          escreval("a pesquisa encontrou o nome ",nomeusuario[x]," na posição",contador,".")
          encontrou:= 1
        fimse
      fimpara
      se (encontrou = 0)então
        escreval("o nome da pesquisa não foi localizado no sistema!.")
      fimse
    caso 5
      encontrou := 0
      escreval("Informe um nome para remoção do cadastro.")
      escreval("Lembre que após exclui-lo não será possível reverter,")
      escreval("apenas realizando novo cadastro")
      leia(removenome)
      para x de 1 ate contador faca
        se (nomeusuario[x] = removenome)então
          escreval("a pesquisa encontrou o nome ",nomeusuario[x]," na posição ",contador," e será removido")
          encontrou := 1
          interrompa
          //nomeusuario[x]:=""
          //idadeusuario[x]:= 0
        fimse
      fimpara
      se encontrou = 1 então
      para z de x ate contador faca
        //se(nomeusuario[x]="")então      não precisa dessa comparar
                                          // jA sabe a posiCao no loop de cima
          nomeusuario [z]  := nomeusuario [z+1] // puxa os dados de cima para baixo
          idadeusuario[z]  := idadeusuario[z+1] // nos dois vetores
          contador         := contador - 1// qtd de usuArios cadastrados
                                          // decrementa contador pois excluiou um
         //fimse
       fimpara
       se (encontrou = 0)então
         escreval("o nome para remoção não foi localizado no sistema !.")
       fimse
    caso 6
      escreval("Vai Mesmo excluir todos os usuáriosd cadastrados S/N ")
      leia(resp)
      se resp = "s" então
        contador := 0 // nenhum usuArio vAlido no vetor
      fimse
    outrocaso
      escreval("não consegui identificar a resposta escolha novamente.")
    fimescolha
  fimenquanto
Fimalgoritmo

 

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!