Home › Fóruns › Programação Básica › Exercicio – 54 estrutura de repetição validadando dados.
Marcado: Análise
- Este tópico contém 12 respostas, 8 vozes e foi atualizado pela última vez 3 meses atrás por Tutora Jessica.
-
AutorPosts
-
-
18 de abril de 2022 às 21:56 #91574Alex oliveiraParticipante
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) } }
-
19 de abril de 2022 às 09:31 #91609IcaroFilhoModerador
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 decont == 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étodocont + 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çõesse(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.
-
12 de julho de 2022 às 12:37 #97377ROSANGELA MENDESParticipante
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”) -
12 de julho de 2022 às 13:08 #97378Tutora JessicaModerador
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 🖖 -
12 de julho de 2022 às 15:23 #97383ROSANGELA MENDESParticipante
Jéssica!! Eu não acredito!!! Só isso!! 🤦🏻♀️
Muito obrigada pela atenção!
Vou continuar construindo! 😀
-
20 de julho de 2022 às 14:53 #97940Felipe BarbourParticipante
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.”)
}
} -
21 de julho de 2022 às 13:21 #97996Tutora JessicaModerador
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 🖖 -
6 de janeiro de 2023 às 16:19 #108330Marlei GSParticipante
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") } }
-
6 de janeiro de 2023 às 17:18 #108333Tutora JessicaModerador
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. -
9 de maio de 2023 às 21:50 #115637Miguel Júnior Zua Mendes AdãoParticipante
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”)}
}
-
10 de maio de 2023 às 11:30 #115686Tutora JessicaModerador
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 🖖 -
11 de janeiro de 2024 às 18:37 #130170Filipe Mamud OliveiraParticipante
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”)
}
}-
12 de janeiro de 2024 às 12:05 #130199Tutora JessicaModerador
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.
-
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.