Home › Fóruns › Programação Básica › Exercicio – 54 estrutura de repetição validadando dados.
Marcado: Análise
- Este tópico contém 20 respostas, 10 vozes e foi atualizado pela última vez 4 meses, 3 semanas 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.
-
-
28 de junho de 2024 às 10:36 #139268Simão Pedro Oliveira da NóbregaParticipante
Olá! É a primeira vez que tento tirar dúvidas no fórum. Como não estou encontrando o erro no meu código, conto com a ajuda de vocês para sanar essa questão.
Quando vou executar o programa no portugol eu posso colocar um número, por exemplo 12, para a idade e ele não está reconhecendo. Diz que está vazia. Vou mandar o código.programa {/*Ex054 - Pessoas Validadas Leitura de nome e idade de várias pessoas. No resultado final mostre a pessoa mais velha e a mais nova. O programa deverá ter a validação dos dados de enttrada: - nome com pelo menos 3 letras; - idade entre 0 e 130 anos; - pergunta se quer continuar aceitando somente as respostas S ou N.*/ inclua biblioteca Texto --> tx inclua biblioteca Tipos --> tp funcao inicio() { cadeia teclado, nome, jovem = "", velho = "" inteiro idade, cont = 0, maior = 0, menor = 0 caracter resp faca { escreva ("\n PESSOA ",(cont + 1)," \n") enquanto (verdadeiro) { escreva ("NOME: ") leia (teclado) se (\tx.numero_caracteres(teclado) >= 3) { nome = teclado pare } senao { escreva ("<<ERRO>> O nome deve ter pelo menos 3 letras.") } } enquanto (verdadeiro) { escreva ("IDADE: ") leia (teclado) se (\tp.cadeia_e_inteiro(teclado)) { idade = \tp.cadeia_para_inteiro(teclado,10) se (idade >= 1 e idade <= 130) { pare } senao { escreva ("<<ERRO>> A idade deve ser um número entre 0 e 130") } } senao { escreva ("<<ERRO>> A idade deve ser um número inteiro.") } } cont ++ se (cont == 1) { maior = idade menor = idade jovem = nome velho = nome } senao { se (idade > maior) { maior = idade velho = nome } se (idade < menor) { menor = idade jovem = nome } } enquanto (verdadeiro) { escreva ("Quer continuar? [S/N] ") leia (teclado) se (\tp.cadeia_e_caracter(teclado)) { resp = \tp.cadeia_para_caracter(teclado) se (resp == "S" ou resp == "s" ou resp == "N" ou resp == "n"){ pare } senao { escreva ("<<RESPOSTA INVÁLIDA>> Responda apenas S ou N.\n") } } } } enquanto (resp == "S" ou resp == "s") escreva ("\nVocê cadastrou ",cont," pessoas") escreva ("\n",jovem," é a pessoa mais nova, com ",menor," anos") escreva ("\n",velho," é a pessoa mais velha, com ",maior," anos") } }
-
28 de junho de 2024 às 11:55 #139274Tutora JessicaModerador
Olá Simão, para que seu programa funcione você precisa passar um parâmetro base para a função cadeia_e_inteiro, para isso é só você colocar uma quantidade que deseja nessa função, exemplo:
se (\tp.cadeia_e_inteiro(teclado,10)) { idade = \tp.cadeia_para_inteiro(teclado,10) se (idade >= 1 e idade <= 130) {
-
28 de junho de 2024 às 12:14 #139275Simão Pedro Oliveira da NóbregaParticipante
Agora deu certo. Programa rodando perfeitamente. Muito obrigado.
-
-
28 de junho de 2024 às 10:41 #139269Simão Pedro Oliveira da NóbregaParticipante
Está aparecendo o seguinte:
“Tipos incompatíveis! O parâmetro ‘base’ dada função ‘cadeia_e_inteiro’ espera Uma expressão do tipo ‘inteiro’ com valor, mas foi passada uma expressão do tipo ‘vazio’ vazia. -
29 de junho de 2024 às 15:14 #139299Daniel C. CunhaParticipante
Saudações a todos! Escrevo aqui, pois assim como muita gente bati muito a cabeça!
Retornei os estudos após 6 meses… mas não estou olhando meus exercícios já feitos, em vez disso estou refazendo tudo…e só agora no exercício 54 é que a mente está começaaaaaando a clarear…Percebi que muita gente tem os mesmos erros que eu, então assim:
1 – Toda vez que tiver uma variável dentro de um loop, há obrigatoriedade de dar-lhe um valor, inicializando a variável, la onde se declara.
– Caso não tenha variáveis dentro de um looping, podem perceber que não aparece erro algum desse tipo!2 – O contador e seu inicio em 0 ou em 1 é uma verdadeira pegadiha do malandro.
No meu caso o código estava passando direto na primeira leitura então funcionava errado.
(aí depois de ler a resposta do Icaro me dei conta de que o programa nunca passava naquela condição – OBRIGADO ÍCARO!)
Temos que ter atenção de: ‘Onde coloquei meu contador’ pois as vezes colocando antes ou após os comandos, ele vai agir de forma diferente do que pensamos.
E se realmente temos a necessidade de inicia-lo com o valor 1, ou se é melhor iniciar com o próprio 0.3 – Criar erros propositais para ver como reagem as críticas dos programas também é um ótimo jeito de perceber erros futuros.
Eu ainda estou batendo cabeça com algumas coisas…
por exemplo :
No meu código, na hora de fazer a condição (se) da idade… supostamente era para ter dado certo a seguinte condição:
–> se(nao(idade >= 0 ou idade <= 130)) { –> onde coloquei a condição verdadeira (idade >= 0 ou idade <= 130) e depois fazemos o uso do NÃO por fora (nao( …Mas por nada no mundo funcionava…
Colocando já uma condição sem ter que utilizar o NAO funcionou:
–> se(idade < 0 ou idade > 130) –> Funcionou, mas supostamente era para os dois casos funcionarem iguais não ???
Em alguma parte me perdi nisso, pois outros exercícios que tenho essa primeira condição com o NAO funciona sem problemas…Alguém saberia explicar o porque do não funcionamento da condição com o ‘não’ neste caso??
Vou colocar aqui meu código mas ainda não terminei…programa {/*Programa para validar dados Aluno Daniel C. */ inclua biblioteca Tipos --> t inclua biblioteca Texto --> txt funcao inicio() { // Variáveis utilizadas dentro dos laços tem de ser inicializadas com um valor // a não ser que sejam valorizadas pelo entrada de valores do usuário logico hit = verdadeiro cadeia teclado, nome = "", nomeMvelho = "", nomeMnovo = "", nomeFvelho = "", nomeFnovo = "" inteiro idade = 0, idadeMvelho = 0,idadeMnovo = 0, idadeFvelho = 0, idadeFnovo = 0,num inteiro contaP = 0, contaM = 0, contaF = 0 caracter opcao = ' ', sexo = ' ' escreva("{ EXERCICIO 054 - Pessoas validadas }") enquanto(verdadeiro)// Loop central que abrange todo o progama { faca // Loop C/ TESTE LOGICO NO FINAL para a validacao do CONTINUA? [S/N] { se(hit == verdadeiro) { //gatilho para o programa voltar ao lugar certo apos validacao do CONTINUA? [S/N] escreva("\n-----------------------------------------") escreva("\n\t", contaP + 1,"° PESSOA ") escreva("\n-----------------------------------------\n") //================================================================================================================================ enquanto (verdadeiro) { // escreva("\n=-=-=-= COMEÇO DO ENQUANTO =-=-=-=\n")//FLAG TEMPORARIA //----------------------------VALIDACAO DO NOME---------------------------------------------------------------------------------------------------- enquanto(verdadeiro) { escreva("Nome: ") leia(nome) num = txt.numero_caracteres(nome) se(nao(num >= 3)) { escreva(" < < < ERRO [1] O NOME DE TER TRES LETRAS OU MAIS! > > > \n") } senao { contaP++ pare } } //----------------------------VALIDACAO DA IDADE---------------------------------------------------------------------------------------------------- enquanto(verdadeiro) { escreva("Idade: ") leia(teclado) se(nao(t.cadeia_e_inteiro(teclado, 10))) { escreva(" < < < ERRO [2] VALOR INVALIDO > > > \n") } senao { idade = t.cadeia_para_inteiro(teclado, 10) se(idade > 130 ou idade < 0) { escreva(" < < < ERRO [3] IDADE INVALIDA > > > \n") } senao { pare } } // pare PARANDO AQUI VOLTA-SE PRO começo enquanto FLAG - junto com a mensagem de erro!!! } //----------------------------VALIDACAO DO SEXO---------------------------------------------------------------------------------------------------- enquanto(verdadeiro) { escreva("Sexo: ") leia(sexo) se(nao(sexo == 'M' ou sexo == 'm' ou sexo == 'F' ou sexo == 'f')) { escreva(" < < < ERRO [4] OPCAO INVALIDA! > > > \n") } senao { hit = falso pare } } //pare //---------------------------SEPARAÇÃO DOS SEXOS E INICIO DAS CONTAGENS----------------------------------------------------------------------------------- se(sexo == 'M' ou sexo == 'm') { se(contaM == 0) { idadeMnovo = idade idadeMvelho = idade nomeMnovo = nome nomeMvelho = nome } senao { se(idade > idadeMvelho){ idadeMvelho = idade nomeMvelho = nome } se(idade < idadeMnovo) { idadeMnovo = idade nomeMnovo = nome } } contaM++ } senao se(sexo == 'F' ou sexo == 'f') { se(contaF == 0) { idadeFvelho = idade idadeFnovo = idade nomeFvelho = nome nomeFnovo = nome } senao { se(idade > idadeFvelho) { idadeFvelho = idade nomeFvelho = nome } se(idade < idadeFnovo) { idadeFnovo = idade nomeFnovo = nome } } contaF++ } pare //-------------------------------------------------------------------------------------------------------------------------------- } //================================================================================================================================ } senao { escreva("CONTINUA? [S/N]: ") leia(opcao) se(nao(opcao == 'S' ou opcao == 's' ou opcao == 'N' ou opcao == 'n')) { escreva(" < < < ERRO [0] OPCAO INVALIDA > > > \n") } senao { hit = verdadeiro } } } enquanto(nao(opcao == 'N' ou opcao == 'n')) escreva("\n=-=-=-=-=-=-=-=-=-= RESULTADOS =-=-=-=-=-=-=-=-=-=-=-=") escreva("\nAo todo foram cadastradas ", contaP, " pessoas.") se(contaM != 0) { escreva("\nDos ", contaM, " homens, ", nomeMvelho, " é o mais velho com ", idadeMvelho, " e ", nomeMnovo, " é o mais novo com ", idadeMnovo, ".") } se(contaF != 0) { escreva("\nDas ", contaF, " mulheres, ", nomeFvelho, " é a mais velha com ", idadeFvelho, " e ", nomeFnovo, " é a mais nova com ", idadeFnovo, ".") } pare } } }
-
1 de julho de 2024 às 10:15 #139363Tutora JessicaModerador
Olá Daniel, o se/senao é usado na condição de verdadeiro ou falso, se (condição verdadeira) e senao (condição falsa).
O funcionamento é simples: com base no resultado de uma expressão booleana (VERDADEIRO ou FALSO), o fluxo do algoritmo segue para um bloco de instruções ou não.
O bloco de código SENÃO é opcional. É comum encontrar instruções de decisão apenas com SE sem o bloco SENÃO.
Observe o esquema da estrutura SE/SENÃO:SE <expressão booleana> <instruções a serem executadas caso a expressão booleana resulte em VERDADEIRO> SENÃO <instruções a serem executadas caso a expressão booleana resulte em FALSO> FIM-SE
-
1 de julho de 2024 às 17:01 #139388Daniel C. CunhaParticipante
Saudações Jéssica, tudo joia?
Agradeço a atenção!
A minha dúvida em não era sobre as estruturas condicionais em si…
Mas sobre condições nos parênteses que na teoria deveriam ser equivalentes…
No caso:
(idade > 130 ou idade < 0)deveria ser equivalente á:
(nao(idade >= 0 ou idade <= 130))na ocasião nao consegui fazer funcionar a segunda opção…
-
2 de julho de 2024 às 12:28 #139405Tutora JessicaModerador
Olá Daniel, ah sim agora compreendi melhor.
Nesse caso troque de OU para E, dessa forma:
se(nao(idade >= 0 e idade <= 130)) {
Operador Ou : Retorna verdadeiro se um dos testes lógicos for verdadeiro , mesmo que outros testes retornem falsos
Exemplo:Retorna Verdadeiro
escreva(“Marcelo”==”Marcelo” Ou “Marcelo”==”Maria”)
Nos dois testes acima, o primeiro se estivesse sozinho retornaria verdadeiro e o segundo depois do Operador Lógico Ou retornaria falso, porém graças ao Operador lógico Ou, eu estou dizendo que se uma das comparações retornar verdadeiro, ok .. E por isso o exemplo acima retorna verdadeiro.Operador E:Retorna Verdadeiro se todos os testes lógicos retornarem verdadeiro
escreva(“Marcelo”==”Marcelo” E “Marta”==”Marcelo”)
Observe que diferente do operador Ou, este teste vai retornar falso, pois o Operador lógico É exige que todas as operações lógicas retornem verdadeiro para o resultado ser verdadeiro.Usando o E vai funcionar conforme deseja, só fiquei com uma dúvida, essa forma que esta usando você aprendeu em algum curso aqui do estudonauta ou é uma forma que aprendeu fora do curso?
- Esta resposta foi modificada 4 meses, 3 semanas atrás por Tutora Jessica.
-
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.