Home › Fóruns › Programação Básica › Dúvidas no exercício 053
Marcado: exercício053
- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 1 semana, 1 dia atrás por
Tutora Jessica.
-
AutorPosts
-
-
14 de janeiro de 2026 às 17:21 #168832
Yzadora Pires Marciano
ParticipanteAo 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.”)}
} -
15 de janeiro de 2026 às 08:23 #168852
Tutora Jessica
ModeradorOla 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
respdentro 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,respmanté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ávelrespdentro 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 🖖🏼
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.