Dúvidas no exercício 053

Dúvidas no exercício 053

Home Fóruns Programação Básica Dúvidas no exercício 053

Marcado: 

Visualizando 1 resposta da discussão
  • Autor
    Posts
    • #168832

      Ao executar meu programa, verifiquei que ao tentar registrar alguém a partir da primeira pessoa a validação da idade deixa de funcionar corretamente. A princípio se a idade digitada não é entre 0- 130 anos o programa deveria enviar uma mensagem de erro e dar a opção da idade ser digitada novamente. Entretanto, isso só acontece na primeira pessoa resgistrada e não nas demais. Alguém pode me ajudar? Desde já, muito obrigada. Segue meu código:

      programa
      {

      inclua biblioteca Texto –>txt

      inclua biblioteca Tipos –> ti

      // Programa que valida pessoas, por meio do nome e idade (0-130 anos).

      funcao inicio()
      {
      inteiro c = 1, maisvelho = 0, maisnovo = 0 , quantpessoas = 0, idadeconv = 0
      cadeia nome = ” “, idade, nomemaisnovo = ” “, nomemaisvelho = ” ”
      caracter resp = ‘ ‘

      enquanto (verdadeiro) {

      escreva (“—————————-\n”)
      escreva (” PESSOA ” , c , “\n”)
      escreva (“—————————-\n”)

      enquanto (verdadeiro) {
      escreva (“\nNome: “)
      leia (nome)
      se (ti.cadeia_e_inteiro (nome, 10) ou txt.numero_caracteres (nome) < 3) {
      escreva (“<< ERRO >> O nome deve ter pelo menos três letras. “)
      } senao {
      quantpessoas ++

      pare
      }
      }

      enquanto (verdadeiro) {
      escreva (“Idade: “)
      leia (idade)
      se (ti.cadeia_e_inteiro (idade, 10)) {

      idadeconv = ti.cadeia_para_inteiro(idade, 10)

      se (idadeconv >= 0 e idadeconv <= 130) {

      se (quantpessoas == 1) {
      nomemaisnovo = nome
      nomemaisvelho = nome
      maisnovo = idadeconv
      maisvelho = idadeconv
      } senao se (idadeconv > maisvelho){
      maisvelho = idadeconv
      nomemaisvelho = nome
      } senao se (idadeconv < maisnovo) {
      maisnovo = idadeconv
      nomemaisnovo = nome

      }

      faca {

      escreva (“Deseja continuar? [S /N ]”)
      leia (resp)
      se (resp != ‘S’ e resp != ‘N’) {

      escreva (“<< ERRO >> Respota inválida.”)
      }

      } enquanto (resp != ‘S’ e resp != ‘N’)

      } senao {
      escreva (“<< ERRO >> Idade inválida.\n”)
      }
      }
      senao {
      escreva (“<< ERRO >> A idade precisa ser um número inteiro.\n”)
      }

      se (resp == ‘S’ ou resp == ‘s’) {
      c ++
      pare
      } senao se (resp == ‘N’ ou resp == ‘n’) {
      pare
      }

      }

      se (resp == ‘N’ ou resp == ‘n’) {
      pare
      }

      }

      escreva (“—————————–\n”)
      escreva (“Você cadastrou o total de ” , quantpessoas, ” pessoas. \n”)
      escreva (nomemaisnovo , ” é a pessoa mais nova. Com ” , maisnovo , ” anos.\n”)
      escreva (nomemaisvelho , ” é a pessoa mais velha. Com ” , maisvelho , ” anos.”)

      }
      }

    • #168852
      Tutora Jessica
      Moderador

      Ola Yzadora, vamos la ..

      O problema não está diretamente na validação da idade, mas sim na estrutura de controle dos laços de repetição e no uso incorreto (nesse caso) da variável resp dentro do laço responsável pela leitura da idade.

      No seu código, a variável resp é utilizada para decidir se o laço da idade deve ser encerrado.
      Porem, essa variável só recebe um valor válido após a idade ter sido corretamente informada.
      A partir do segundo cadastro, resp mantém o valor da iteração anterior, o que faz com que o comando pare seja executado mesmo quando a idade digitada é inválida.
      Como consequência, o programa sai do laço da idade sem permitir nova tentativa, fazendo com que a validação funcione apenas para a primeira pessoa registrada.
      Do ponto de vista lógico, a validação da idade deve ser independente da decisão de continuar ou não o cadastro. O laço responsável por ler a idade deve ser encerrado exclusivamente quando um valor válido (entre 0 e 130) for informado. Já a pergunta “Deseja continuar?” deve ocorrer apenas após a conclusão bem-sucedida do cadastro da pessoa, fora do laço de validação da idade.

      A correção deve ser feita da seguinte forma:
      – Encerrar o laço da idade somente quando a idade for válida;
      – Remover qualquer dependência da variável resp dentro desse laço;
      – Controlar a continuidade do programa apenas após nome e idade terem sido corretamente validados.

      Essa separação de responsabilidades entre os laços garante que a validação funcione corretamente para todas as pessoas cadastradas, e não apenas para a primeira.

      Faça essas correções e veja se o código vai funcionar corretamente, qualquer duvida so retornar ao fórum, vou pedir apenas para dar uma olhadinha se ja não existe uma duvida para o mesmo modulo e exercício, caso encontre so colocar sua duvida nesse topico ja criado, assim conseguimos deixar nosso forum mais organizado e ajudar mais alunos 🖖🏼

Visualizando 1 resposta da discussão
  • Você deve fazer login para responder a este tópico.