Exercicio – 54 estrutura de repetição validadando dados.

Home Fóruns Programação Básica Exercicio – 54 estrutura de repetição validadando dados.

Marcado: 

Visualizando 11 respostas da discussão
  • Autor
    Posts
    • #91574
      Alex oliveira
      Participante

      Poderiam copiar o codigo e veja se ele esta funfando no seu portugal .
      o meu está dando erro de compilação no meu caso variável não inicializada . coloquei aspas e nada.

      programa
      {/* validando dados 
      
      contabilize a quantidade de dados cadastrados no sistema;
      mostre quem é a pessoa mais nova e a mais velha. com suas idade;
      idade validada entre 0 e 130.
      nome validado. com pelo menos 3 letras. 
             	 
             	 Autor: Alex oliveira abreu batista
      		 Midias sociais: @alexoab
      		 Empresa:OABTECK-IOT
      		*/
      	inclua biblioteca Texto--> text
      	inclua biblioteca Tipos--> t
      	funcao inicio()
      	{
      		inteiro cont=1,maisvelho=0,maisnovo=0 ,idade=0
      		cadeia nome="",teclado, novo ="", velho=""
      		caracter resp
      		escreva("CADASTRO VALI: \n\n\n")
      		faca{
      			escreva("======================\n")
      			escreva("DIGITE A ", cont ," ° Pessoa:\n \n ")
      			escreva("======================\n")
      			enquanto (verdadeiro){
      				escreva("Digite um nome : ")
      				leia(teclado)
      				se(text.numero_caracteres(teclado)<=3){
      					nome = teclado
      					pare
      				}senao{
      					escreva("<<ERRO!>> O nome dever ter mais de 3 caracteres : \n")
      				}
      				
      			}
      			
      			enquanto(verdadeiro){
      			escreva("Idade : ")
      			leia(teclado)
      			se (t.cadeia_e_inteiro(teclado, 10 )) {
      				idade=t.cadeia_para_inteiro(teclado, 10)
      				se(idade >=1 e idade <=130){
      					pare 
      				}senao{
      					escreva("<<ERRO!>> Idade inválida\n")
      				}
      				
      			}senao{
      				escreva(" <<ERRO!>> Idade invalida  deve ser um numero inteiro \n")
      			}
      			
                   }
      			cont++ 
      			se(cont==1){
      				maisvelho=idade
      				maisnovo=idade
      				velho=nome
      				novo=nome
      			}senao{
      				se(idade<maisnovo){
      					idade=maisnovo
      					novo=nome
      				}
      				se(idade>maisvelho){
      					idade=maisvelho
      					velho=nome
      				}
      			}
      			enquanto (verdadeiro){
      				escreva("Deseja continuar[S/N] :?")
      				leia(teclado)
      				se(t.cadeia_e_caracter(teclado)){
      					resp=t.cadeia_para_caracter(teclado)
      					pare
      				}senao{
      					escreva("<<ERRO>> Resposta Inválida! Digite apenas S ou N ")
      				}
      			}
      			
      			
      			
      		}enquanto(resp=='S' ou resp=='s')
      		escreva("=================================================")
                escreva("\nVocê cadastrou : " , cont ," Pessoas ")
                escreva("\n A pessoa mais nova é ", novo ," com idade de ", maisnovo)
      	     escreva("\n A pesso mais velha é ", velho , " com idade de ", maisvelho)
      		
      	}
      }

    • #91609
      IcaroFilho
      Moderador

      Para resolver o problema de inicialização basta inicializa-la com valor nulo, lembrando que se tratando de um tipo caracter, tem que se utilizar de aspas simples com um espaço entre elas:
      caracter resp = ' '

      1. Sua condição de tratamento para numero de caracteres esta invertida… ou seja, so esta aceitando nomes com menos de três caracteres. Para corrigir basta inverter o sinal de menor que para maior que:
      se(text.numero_caracteres(teclado)>=3)

      2. Seu programa esta tendo mais dois problemas:
      2.1 Contador de pessoas cadastradas com erro de contagem
      2.2 Nomes e idades incorretos
      isto ocorre pois o seu contador esta inicializando em 1, logo após a etapa de checagem de nomes recebe um acréscimo de 1 e tem seu valor alterado para 2, sendo assim ele não contemplará a primeira condição de cont == 1 e irá pular as atribuições de nomes e idades ao inicializar.
      A correção é simplesmente altera para valor 0 na declaração e para exibir a chamada, usar o método cont + 1 dentro do escreva:
      inteiro cont=0

      escreva("DIGITE A ", cont + 1 ," ° Pessoa:\n \n ")
      2.3 Ainda sim dará erro de valores nas idades. acredito que tenha se perdido nas atribuições de valores e nomes. isto ocorreu pois tentou usar uma variável intermediadora (teclado) quando poderia simplesmente fazer atribuições diretas (sem precisar converter valores).
      Para não ter que refatorar o código, basta que inverta as atribuições

      se(idade<maisnovo){
          idade=maisnovo // o correto é : maisnovo = idade
          novo=nome
      }
      se(idade>maisvelho){
          idade=maisvelho // o correto é : maisvelho = idade
          velho=nome
      }

      3.Dica de boas práticas:
      procure utilizar mais “espaços” … isso deixara seu código mais legível:
      se(text.numero_caracteres(teclado)>=3) -> se( text.numero_caracteres( teclado ) >= 3)
      idade=t.cadeia_para_inteiro(teclado, 10) -> idade = t.cadeia_para_inteiro( teclado , 10 )
      se(idade>maisvelho) -> se( idade > maisvelho)

      Pode parecer bobeira, mas em códigos maiores irá ajudar a ler.

    • #97377
      ROSANGELA MENDES
      Participante

      Boa tarde!
      Iniciei a construção do código, mas aparecem as seguintes mensagens:
      1) linha 9 – A expressão “”” (eu não inseri aspas duplas, mas ”) não era esperada neste local, remova a expressão para corrigir o problema.
      E na linha 11 – A expressão não foi iniciada corretamente. Insira o caracter ‘(‘

      2) Se removo as aspas simples aparece:
      erro de compilação.
      A variável resposta não pode ser inicializada.

      Vou colar o código que estou construindo:

      cadeia nome = “”, nome_maisVelha = “”, nome_maisNova = “”
      inteiro idade = 0, idade_maisVelha = 0, idade_maisNova = 0, cont = 0
      caracter resposta = ”

      faca{

      enquanto(verdadeiro){
      escreva(“——————————\n”)
      escreva(“->”,cont, “ª PESSOA CADASTRADA\n”)
      escreva(“——————————\n”)

      escreva(“NOME: “)
      leia(nome)

      escreva(“IDADE: “)
      leia(idade)

      }enquanto (verdadeiro){
      escreva(“Quer continuar? [S/N] “)
      leia(resposta)
      se (resposta == ‘N’ ou resposta == ‘n’){
      pare
      }
      }
      cont++
      }enquanto(resposta == ‘S’ ou resposta == ‘s’)
      escreva(“==========RESULTADO============”)
      escreva(“Ao todo, você cadastrou “, cont, ” pessoas \n”)

    • #97378
      Tutora Jessica
      Moderador

      Olá Rosangela, então, como meu amigo Icaro falou acima :
      Para resolver o problema de inicialização basta inicializa-la com valor nulo, lembrando que se tratando de um tipo caracter, tem que se utilizar de aspas simples com um espaço entre elas, dessa forma:
      caracter resposta = ' '

      Se puder nos envie um feedback se foi resolvido ou não..
      Caso fique alguma dúvida só retornar ao fórum, beleza?
      Bons estudos 🖖

    • #97383
      ROSANGELA MENDES
      Participante

      Jéssica!! Eu não acredito!!! Só isso!! 🤦🏻‍♀️

      Muito obrigada pela atenção!

      Vou continuar construindo! 😀

    • #97940
      Felipe Barbour
      Participante

      Boa tarde!!

      Realizei a ativade 054, porém gostaria de opiniões sobre o meu código, e se da para melhora-lo

      Segue abaixo o Código:

      programa
      {

      inclua biblioteca Texto –> txt
      inclua biblioteca Tipos –> t
      funcao inicio()
      {
      inteiro c = 0, idade = 0, maioridade = 0, menoridade = 0
      cadeia teclado1, teclado2, nome = ” “, nomeM = ” “, nomeME = ” ”
      caracter resp = ‘ ‘

      escreva (“{ EXERCÍCIO 054 – Pessoas Validadas }”)
      faca{
      enquanto (verdadeiro){
      escreva (“\n”, (c+1), “° Pessoa “)
      escreva (“\n\nNome: “)
      leia (nome)

      se (txt.numero_caracteres(nome) >= 3){
      enquanto (verdadeiro){
      escreva (“\nIdade: “)
      leia (teclado2)
      se (t.cadeia_e_inteiro(teclado2, 10)){
      idade = t.cadeia_para_inteiro(teclado2, 10)
      se (idade > 0 e idade < 130){
      c++
      se (c == 1){
      maioridade = idade
      menoridade = idade
      nomeM = nome
      nomeME= nome
      } senao {
      se (idade > maioridade){
      maioridade = idade
      nomeM = nome
      pare
      } senao {
      se (idade < menoridade){
      menoridade = idade
      nomeME = nome
      pare
      }
      }
      }

      pare
      } senao {
      escreva (“<<ERROR>> IDADE INVÁLIDA, A idade deve estar entre 1 e 130, tente novamente\n”)

      }
      } senao {
      escreva (“<<ERROR>> IDADE INVÁLIDA, A idade deve ser um número inteiro, tente novamente\n”)

      }
      }
      }senao {
      escreva (“<<ERROR>> O nome, deve ter pelo menos 3 caracteres!! Tente novamente\n”)

      }
      se (txt.numero_caracteres(nome) >= 3){
      pare
      }

      }
      escreva (“\nQuer continuar? [S/N] “)
      leia (resp)

      }enquanto (resp == ‘s’ ou resp == ‘S’)
      escreva (“\n-=-=-=-=-=-=-= Resultados -=-=-=-=-=-=-=”)
      escreva (“\nAo todo, você cadastrou “, c, ” pessoas.”)
      escreva (“\n”, nomeM, ” é a pessoa mais velha, com “, maioridade, ” anos.”)
      escreva (“\n”, nomeME, ” é a pessoa mais jovem, com “, menoridade, ” anos.”)
      }
      }

    • #97996
      Tutora Jessica
      Moderador

      Olá Felipe,

      Existem sim maneiras de simplificar seu código, porém necessita de conhecimentos que serão adquiridos a partir do módulo 4.
      Continue seus estudos 🖖

    • #108330
      Marlei GS
      Participante

      Boa tarde pessoal!!! Tudo bem????

      Segue abaixo meu código. Tem dois problemas que não sei como resolver e já li tudo referente a este Ex 54 (M03) aqui no fórum (Há outras dois tópicos).
      1. Ao digitar o nome, se digitarmos números, por exemplo: “Nome: 1974”, o meu código aceita como nome válido. Gostaria de saber como fazer para aceitar somente NOMES com 3 carecter ou mais.
      2. Se digitarmos 3 espaço vazio, ele aceita também.

      Vi outros códigos aqui no Fórum referente ao ex 54, e todos eles aceitam números e espaços vazios como nome. Ainda não assisti a aula de correção deste ex.

      Muito obrigado pela ajuda!!!!

      MarleiGS

      programa
      {
      	inclua biblioteca Util --> u
      	inclua biblioteca Texto --> t
      	inclua biblioteca Tipos --> ti
      	funcao inicio()
      	{
      		escreva("M03A15: Validação de Dados com Laços\n")
      		escreva("Ex 054: Pessoas Validadas\n")
      
      		inteiro p, idade, idade_maior, idade_menor
      		p = 0
      		idade = 0
      		idade_maior = 0
      		idade_menor = 0
      
      		cadeia nome, resp, age, nome_velho, nome_novo
      		nome = " "
      		nome_velho = " "
      		nome_novo = " "
      				
      		faca {
      			p++
      			escreva("\n", p, "ª PESSOA\n")
      
      			// Nome
      			enquanto(verdadeiro) {
      				escreva("Nome: ")
      				leia(nome)
      				
      				se(t.numero_caracteres(nome) >= 3) {
      					pare
      				} senao {
      					escreva("<<Erro>> O nome deve conter no mínimo 3 letras!\n")
      				}
      			}
      
      			// Idade
      			enquanto(verdadeiro) {
      				escreva("Idade: ")
      				leia(age)
      				
      				se(ti.cadeia_e_inteiro(age, 10)) {
      					idade = ti.cadeia_para_inteiro(age, 10)
      					
      					se(idade > 0 e idade < 130) {
      						pare
      					} senao {
      						escreva("<<ERRO>> Idade INVÁLIDA!\n")
      					}
      										
      				} senao {
      					escreva("<<Erro>> A idade dever ser um número INTEIRO!\n")
      				}
      			}
      
      			se(p == 1) {
      				idade_maior = idade
      				idade_menor = idade
      				nome_velho = nome
      				nome_novo = nome
      			} senao {
      				se (idade > idade_maior) {
      					idade_maior = idade
      					nome_velho = nome
      				}
      				se (idade < idade_menor) {
      					idade_menor = idade
      					nome_novo = nome	
      				}
      			}
      			escreva("Quer continuar [S/N]? ")
      			leia(resp)
      			resp = t.caixa_alta(resp)
      				enquanto(resp != "S" e resp != "N") {
      					escreva("<<ERRO>> Resposta Inválida. Tente novamente!\n")
      					escreva("Digite apenas 'S' para continuar ou 'N' para encerrar. Deseja continuar? ")
      					leia(resp)
      					resp = t.caixa_alta(resp)
      				}
      			
      		} enquanto(resp == "S")
      
      		escreva("\n***** PROGRAMA INTERROMPIDO PELO USUÁRIO *****")
      		u.aguarde(750)
      		escreva("\n\n========== RESULTADOS ==========\n")
      
      		se(p == 1) {
      			escreva("1. Ao todo você cadastrou ", p, " pessoa.")
      		} senao {
      			escreva("1. Ao todo você cadastrou ", p, " pessoas.")
      		}
      
      		escreva("\n2. A pessoa mais velha é ", nome_velho, " com ", idade_maior, " anos.")
      		escreva("\n3. A Pessoa mais nova é ", nome_novo, " com ", idade_menor, " anos.")
      
      		escreva("\n\n=*=*=*=*=*=> PROGRAMA ENCERRADO <=*=*=*=*=*=\n")
      	}
      }
      
    • #108333
      Tutora Jessica
      Moderador

      Ola Marlei, é aceito pois a sua declaração primitiva da variável nome foi cadeia (caracter), número também é caracter.
      Em diversas aulas o professor Guanabara fala sobre.
      Te sugiro assistir a resolução desse exercício.
      Para que seja nomes de 3 ou mais caracteres você precisa de uma validação para que seja feito somente dessa forma.

    • #115637

      Oi, Jéssica! Pode me ajudar?
      Não está lendo o nome do mais velho, jovem e a idade.

      inclua biblioteca Texto –> txt
      inclua biblioteca Tipos –> t
      funcao inicio()
      {
      inteiro idade=0, c=0, cad=0, anos_jovem=0, anos_velho=0
      cadeia nome=” “, resp, teclado= ” “, nome_jovem= ” “, nome_velho=” ”

      enquanto(verdadeiro){
      c++

      escreva(“\n————————–“)
      escreva(“\n\tPESSOA ” + c)
      escreva(“\n————————–“)
      escreva(“\nNOME: “)
      leia(nome)
      se(txt.numero_caracteres(nome)>=3){
      cad++
      escreva(“Idade: “)
      leia(teclado)

      se(t.cadeia_e_inteiro(teclado,10)){
      idade=t.cadeia_para_inteiro(teclado,10)
      se(idade>=0 e idade<=120){
      escreva(“Quer continuar? [S/N] “)
      leia(resp)
      se(resp==”n” ou resp==”N”){
      pare

      }

      }senao{
      escreva(“[ERRO] Idade inválida\n”)

      }

      }senao{
      escreva(“[ERRO] A idade deve ser um número inteiro!\n”)

      }

      }senao{

      escreva(“[ERRO] O nome deve ter pelo menos 3 letras!”)
      }

      se(c==1){
      idade=anos_jovem
      idade=anos_velho
      nome=nome_jovem
      nome=nome_velho
      }senao{

      se(idade < anos_jovem){
      nome_jovem= nome
      anos_jovem = idade
      }

      se(idade>anos_velho){
      nome_velho=nome
      anos_velho=idade
      }

      }

      }
      escreva(“\n”)
      escreva(“================ RESULTADO ====================”)
      escreva(“\nAo todo, você cadastrou ” + cad + ” pessoas.”)
      escreva(“\n” + nome_velho + ” é a pessoa mais velha, com ” + anos_velho + ” anos.”)
      escreva(“\n” + nome_jovem + ” é a pessoa mais jovem, com ” + anos_jovem + ” anos.”)
      escreva(“\n”)

      }

      }

    • #115686
      Tutora Jessica
      Moderador

      Ola Miguel, seu código esta muito confuso. Quando for nos enviar aqui no fórum, selecione ele por completo e clique no botão CODE na caixinha acima.
      Novamente você precisa se atentar aos fechamentos das chaves no seu código. Coloque o senao logo abaixo do se correspondente para ficar mais organizado .
      Seu código precisa de um faça antes do enquanto.. esse é um dos propósitos desse exercício.
      Por fim, dê uma olhadinha também na explicação acima do Ícaro, irá lhe ajudar bastante.
      Bons estudos 🖖

    • #130170
      Filipe Mamud Oliveira
      Participante

      Ola Tutora,
      Espero que tudo esteja ocorrendo bem para você.
      Eu fiz meu codigo e apareceram dois erros na hora que eu integrei as condições de atribuição para o nome e idades para as pessoas mais velha e nova.
      “Erro na compilação”
      “Existem trechos do codigo onde a variavel idade pode não ter sido inicializada”
      Você poderia me ajudar por favor?

      programa
      {

      inclua biblioteca Tipos –> ti
      inclua biblioteca Texto –> txt
      funcao inicio()
      {
      escreva(” { EXERCICIO 054 – PESSOAS VALIDADAS } “)
      escreva(“\n”)

      inteiro c=0, idade, soma = 0, pessoa =0, anosv =0, anosn =0
      cadeia teclado, velha, nova, nome
      caracter resposta = ‘ ‘
      faca {
      enquanto (verdadeiro) {
      escreva(“—————————————–\n”)
      escreva(“\t\tPESSOA “, c+1, “\n”)
      escreva(“—————————————–\n”)
      escreva(“NOME: “)
      leia(teclado)
      se (txt.numero_caracteres(teclado) >3) {
      nome = teclado
      pare
      } senao {
      escreva(“<<ERRO>> O nome deveter pelo menos 3 letras!\n”)
      }
      }
      enquanto (verdadeiro) {
      escreva(“IDADE: “)
      leia(teclado)
      se (ti.cadeia_e_inteiro(teclado, 10)) {
      idade = ti.cadeia_para_inteiro(teclado, 10)
      se (idade>0 e idade <=120) {
      pare
      } senao {
      escreva(“<<ERRO>> Idade invalida!\n”)
      }
      } senao {
      escreva(“<<ERRO>> A idade deve ser um numero inteiro!\n”)
      }
      }
      enquanto (verdadeiro) {
      escreva(“Quer continuar? [S/N] “)
      leia(teclado)
      se (ti.cadeia_e_caracter(teclado)) {
      resposta = ti.cadeia_para_caracter(teclado)
      se (resposta == ‘S’ ou resposta == ‘s’ ou resposta == ‘N’ ou resposta == ‘n’) {
      pare
      } senao {
      escreva(“<<ERRO>> A resposta deve ser S ou N!\n”)
      }
      } senao {
      escreva(“<<ERRO>> A resposta deve ser uma letra!\n”)
      }
      }
      c++
      soma+=pessoa
      se ( c==1) {
      anosv = idade
      velha = nome
      anosn = idade
      nova = nome
      } senao {
      se (idade > anosv) {
      anosv = idade
      velha = nome
      }
      se (idade < anosn) {
      anosn = idade
      nova = nome
      }
      }
      } enquanto (resposta == ‘S’ ou resposta == ‘s’)

      escreva(“\n—————————————–\n”)
      escreva(“Ao todo você cadastrou: “, pessoa, ” pessoas.\n”)
      escreva(velha, ” é a pessoa mais velha, com “, anosv, ” anos.\n”)
      escreva(nova, ” é a pessoa mais nova, com “, anosn, ” anos.\n”)
      }
      }

      • #130199
        Tutora Jessica
        Moderador

        Ola Filipe, esse erro quer dizer que a variável precisa ser inicializada, nesse caso é só você colocar ela =0 igual fez com as outras variáveis.

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