M03A7 – Ex038 – Analisando Idades

Home Fóruns Programação Básica M03A7 – Ex038 – Analisando Idades

Visualizando 12 respostas da discussão
  • Autor
    Posts
    • #84148
      Lais Golin
      Participante

      Oi pessoal,

      No exercício 038 – Analisando idades, percebi que uma das verificações está em branco.

      Na 3a verificação, “O homem mais jovem é o … que tem 0 anos de idade”. O programa mostrado pelo Professor Guanabara não apresenta o nome/idade do homem mais jovem. Conforme a explicação do Professor, esse resultado deveria mostrar o Pedro com a idade 22.

      Abraços,
      Laís

    • #84522

      Lais, de fato houve um erro nessa aula e o resultado “O homem mais jovem é o … que tem 0 anos de idade” está errado.

      Agradecemos imensamente por ter nos avisado sobre isso.

      Que tal você colocar aqui no fórum o código que dará o resultado correto no final? 😉🖖

    • #91563
      Robson Lopes da Silva
      Participante

      Saudações,
      Conseguir chegar até aqui.

      programa
      {

      funcao inicio()
      {
      escreva(“{ EXERCICIO 038 – Analisando idades }\n”)

      inteiro c = 1, i, idadeFmenor = 0, idadeFmaior = 0, idadeMmenor = 0, idadeMmaior = 0
      caracter s
      cadeia m, nomeFmenor = ” “, sexoF = ” “, nomeFmaior = ” “, nomeMmenor = ” “, sexoM = ” “, nomeMmaior = ” ”

      enquanto (c <= 5){
      escreva(“————-\n”)
      escreva(c, “ª PESSOA\n”)
      escreva(“————-\n”)
      escreva(“NOME: “)
      leia (m)
      escreva(“SEXO: “)
      leia (s)
      escreva(“IDADE: “)
      leia (i)

      se (c == 1){
      idadeFmenor = i
      idadeFmaior = i
      idadeMmenor = i
      idadeMmaior = i
      }
      se (i <= idadeFmenor e s == ‘F’){
      idadeFmenor = i
      nomeFmenor = m
      sexoF = “mulher”
      }
      se (i > idadeFmaior e s == ‘F’){
      idadeFmaior = i
      nomeFmaior = m
      sexoF = “mulher”
      }
      se (i <= idadeMmenor e s == ‘M’){
      idadeMmenor = i
      nomeMmenor = m
      sexoM = “homem”
      }
      se (i > idadeMmaior e s == ‘M’){
      idadeMmaior = i
      nomeMmaior = m
      sexoM = “homem”
      }

      c++
      }
      escreva(“===================================================================\n”)
      escreva(“A “, sexoF, ” mais jovem é a “, nomeFmenor, ” que tem “, idadeFmenor, ” anos\n”)
      escreva(“A “, sexoF, ” mais velha é a “, nomeFmaior, ” que tem “, idadeFmaior, ” anos\n”)
      escreva(“O “, sexoM, ” mais jovem é o “, nomeMmenor, ” que tem “, idadeMmenor, ” anos\n”)
      escreva(“O “, sexoM, ” mais velho é o “, nomeMmaior, ” que tem “, idadeMmaior, ” anos”)

      }
      }

      • #91611
        IcaroFilho
        Moderador

        Bom dia.
        Primeiramente, evite usar vaiáveis com 1 letra… por mais que você saiba do que se trata, nos programamos para outras pessoas lerem.
        ex.: i => idade | s => sx ou sexo | m => nome

        Quanto aos problemas.
        Na primeira condição, não esta sendo atribuído os nomes, apenas as idades.

        Eu usaria uma abordagem diferente. Separaria por sexo e depois faria a checagem.

        1- Se sexo F ou M
        2- Se é a primeira entrada
        3 – Se é menor que a idade cadastrada
        4 – se é maior que a idade cadastrada

        usando o seu código, criei o raciocínio para F, basta replicar para M

        se(s == 'F' ou s == 'f'){
            se(nomeFmenor == " "){
        	nomeFmenor = m
        	nomeFmaior = m
        	idadeFmenor = i
        	idadeFmaior = i
            } senao {
                se (i < idadeFmenor ){
                nomeFmenor = m
                idadeFmenor = i
            }
            se (i > idadeFmaior){
                nomeFmaior = m
                idadeFmaior = i
            }
        }
        				}
      • #95446

        entao no caso, a separa primeiro o valor do sexo e depois faz as atribuiçoes ?
        eu fiz isso e os valor de idade que o usuario digita vai tanto para maior idade das mulher tanto para a maior idade dos homens.

        aqui o codigo

        se(c==1){
        				maior_idade_sexo_h = idade
        				menor_idade_sexo_h = idade
        				maior_idade_sexo_f = idade
        				menor_idade_sexo_f = idade
        			}
        			se(sexo == 'H'){
        				se(idade < menor_idade_sexo_h){
        					menor_idade_sexo_h = idade
        				}
        				se(idade > maior_idade_sexo_h){
        					maior_idade_sexo_h = idade
        				}
        			  }	
        			 se(sexo == 'F'){
        				se(idade < menor_idade_sexo_h){
        					menor_idade_sexo_f = idade
        				}
        				se(idade > maior_idade_sexo_f){
        					maior_idade_sexo_f = idade
        				}
        		
        			}

        Todos as idades me aparecenm com o mesmo valor, apos digitar a priemeira pessoa.

    • #91703
      Robson Lopes da Silva
      Participante

      Funcionou perfeitamente.
      Obrigado.

    • #96746

      MEU PRIMEIRO CÓDIGO:::

      programa
      {

      funcao inicio()
      {
      escreva(“{ EXERCÍCIO 038 – Analisando Idades } \n”)
      cadeia nome, maisjovemf = “..”, maisvelhaf = “..”, maisjovemm = “..”, maisvelhom = “..”
      inteiro c = 1, idade, maioridadef=0, menoridadef=0, maioridadem=0, menoridadem=0
      caracter sexo
      enquanto (c <= 4){
      escreva(“————\n”)
      escreva(c,”ª PESSOA\n”)
      escreva(“————\n”)
      escreva(“NOME: “)
      leia (nome)
      escreva(“SEXO[M/F]: “)
      leia(sexo)
      escreva(“IDADE: “)
      leia (idade)

      se ( c == 1){
      maioridadef = idade
      menoridadef = idade
      maisjovemf = nome
      maisvelhaf = nome
      maioridadem = idade
      menoridadem = idade
      maisjovemm = nome
      maisvelhom = nome
      }senao{
      se( idade < menoridadef e sexo == ‘f’ ou sexo == ‘F’){
      menoridadef = idade
      maisjovemf = nome
      }se(idade > maioridadef e sexo == ‘f’ ou sexo == ‘F’){
      maioridadef = idade
      maisvelhaf = nome
      }se(idade > maioridadem e sexo == ‘m’ ou sexo == ‘M’){
      maioridadem = idade
      maisvelhom = nome
      }se( idade < menoridadef e sexo == ‘m’ ou sexo == ‘M’){
      menoridadem = idade
      maisjovemm = nome
      }
      }
      c++
      }escreva(“\n=============================”)
      escreva(“\nA mulher mais jovem é “,maisjovemf,” que tem “,menoridadef,” anos”)
      escreva(“\nA mulher mais velha é “,maisvelhaf,” que tem “,maioridadef,” anos”)
      escreva(“\nO homem mais jovem é “,maisjovemm,” que tem “,menoridadem,” anos”)
      escreva(“\nO homem mais velho é “,maisvelhom,” que tem “,maioridadem,” anos”)
      }
      }

      MEU SEGUNDO CÓDIGO APÓS VER A AULA DE EXPLICAÇÃO:::

      rograma
      {

      funcao inicio()
      {
      escreva(“{ EXERCÍCIO 038 – Analisando Idades } \n”)
      cadeia nome, novom=””,novof=””,velhom=””,velhaf=””
      inteiro c=1, idade, totm=0,totf=0
      inteiro menorm=0, menorf=0, maiorm=0,maiorf=0
      caracter sexo
      enquanto (c <= 4){
      escreva(“————\n”)
      escreva(c,”ª PESSOA\n”)
      escreva(“————\n”)
      escreva(“NOME: “)
      leia (nome)
      escreva(“SEXO[M/F]: “)
      leia(sexo)
      escreva(“IDADE: “)
      leia (idade)

      se (sexo == ‘M’ ou sexo == ‘m’){
      totm++
      se (totm ==1){
      menorm = idade
      novom = nome
      maiorm = idade
      velhom = nome
      }senao se (idade > maiorm){
      maiorm = idade
      velhom = nome
      }se (idade < menorm){
      menorm = idade
      novom = nome
      }
      }senao se (sexo == ‘F’ ou sexo == ‘f’){
      totf++
      se(totf ==1){
      menorf = idade
      novof = nome
      maiorf = idade
      velhaf = nome
      }senao se(idade > maiorf){
      maiorf = idade
      velhaf = nome
      }se (idade < menorf){
      menorf = idade
      novof = nome
      }

      }

      c++
      }
      escreva(“\n===============================”)
      escreva(“\nAo todo tem “,totm,” homens e “,totf,” mulheres”)
      se(totf >= 1){
      escreva(“\nA mulher mais jovem é a “,novof,” que tem “,menorf,” anos.”)
      escreva(“\nA mulher mais velha é a “,velhaf,” que tem “,maiorf,” anos.”)
      }senao se(totm >=1){
      escreva(“\nO homem mais jovem é o “,novom,” que tem “,menorm,” anos.”)
      escreva(“\nO homem mais velho é o “,velhom,” que tem “,maiorf,” anos.”)
      }
      }
      }

      • #96766
        IcaroFilho
        Moderador

        Bom dia,
        Ótima evolução.
        A visão deste exercício era primeiramente a separação dos sexos para depois a avaliação das idades. ( que foi o erro do seu primeiro código, onde você estava fazendo com que a primeira entrada preenchesse os dois sexo. ).
        Um ponto muito importante na programação é o conceito de que se programa para outros programadores lerem, por isso a pratica de dar nomes explícitos para as variáveis.
        Ex.:
        maisjovemf –> nome_mulher_jovem
        menoridadef–> idade_mulher_jovem

        Assim , quem lê não precisa ler o contexto todo do código para entender do que se trata.
        Outro ponto importante aqui para o fórum é a formatação.
        Em códigos mais complexos ( que vai acontecer mais pro final ), a formatação deixa a leitura mais fácil, além de dar a possibilidade de copiar o código original para um editor de código. ( quando se copia do jeito que tá, temos que fazer ajustes de caracteres. )
        Para manter a formatação basta ao colar aqui, selecionar todo o trecho de código e clicar em CODE que se encontra logo acima da área de texto, você perceberá que irá ser adicionado crases no começo e no final do seu código.
        Apenas isto fará uma enorme diferença para que possamos lhe ajudar com mais agilidade.

        Continue a evolução,
        Bons estudos!

    • #97025

      O meu programa só exibe o nome dos dois sexos no resultado final se eu tiver três opções para o mesmo sexo!
      Então se eu tiver 2 mulheres e 3 homens ele exibe o homem jovem e o homem velho mas, não exibe o nome da primeira mulher só o da segunda!

      O que eu posso estar revendo? Sendo que usei a mesma lógica para todas as verificações!

      programa
      {
      	
      	funcao inicio()
      	{
      		//Declaração de variáveis para as estruturas de controle
      		inteiro C = 1, P = 1, IDADE
      		cadeia NOME, SEXO
      		
      		//Declaração de variáveis do resultado
      		cadeia MULHER_JOVEM = "",
      			  MULHER_VELHA	= "",
      			  HOMEM_JOVEM	= "",
      			  HOMEM_VELHO	= ""
      			  
      		inteiro IDADE_MULHER_JOVEM	= 0,
      			   IDADE_MULHER_VELHA	= 0,
      			   IDADE_HOMEM_JOVEM	= 0,
      			   IDADE_HOMEM_VELHO	= 0
      		
      		escreva("{ EXERCÍCIO 038 - Analisando idades }\n")
      
      		enquanto(C <= 5) {
      			escreva("================\n")
      			escreva(P, "° PESSOA\n")
      			escreva("NOME: ")
      			leia(NOME)
      			escreva("IDADE: ")
      			leia(IDADE)
      			escreva("SEXO[M/F]: ")
      			leia(SEXO)
      			escreva("================\n")
      
      			se(C == 1) {
      				IDADE_MULHER_JOVEM	= IDADE
      				IDADE_MULHER_VELHA	= IDADE
      				IDADE_HOMEM_JOVEM	= IDADE
      				IDADE_HOMEM_VELHO	= IDADE
      			}
      			se(SEXO == "F" e IDADE < IDADE_MULHER_JOVEM) {
      				IDADE_MULHER_JOVEM = IDADE
      				MULHER_JOVEM = NOME
      			}
      			se(SEXO == "F" e IDADE > IDADE_MULHER_VELHA) {
      				IDADE_MULHER_VELHA = IDADE
      				MULHER_VELHA = NOME
      			}
      			se(SEXO == "M" e IDADE < IDADE_HOMEM_JOVEM) {
      				IDADE_HOMEM_JOVEM = IDADE
      				HOMEM_JOVEM = NOME
      			}
      			se(SEXO == "M" e IDADE > IDADE_HOMEM_VELHO) { 
      				IDADE_HOMEM_VELHO = IDADE
      				HOMEM_VELHO = NOME
      			}
      			C++
      			P++
      		}
      
      		//Resultado
      		escreva("A mulher mais jovem é a ", MULHER_JOVEM, " que tem ", IDADE_MULHER_JOVEM, " anos.\n")
      		escreva("A mulher mais velha é a ", MULHER_VELHA, " que tem ", IDADE_MULHER_VELHA, " anos.\n")
      		escreva("O homem mais jovem é o ", HOMEM_JOVEM, " que tem ", IDADE_HOMEM_JOVEM, " anos.\n")
      		escreva("O homem mais velho é o ", HOMEM_VELHO, " que tem ", IDADE_HOMEM_VELHO, " anos.\n")
      		
      	}
      }
      • #97037
        IcaroFilho
        Moderador

        Bom dia Rafael,
        Sempre antes de criar um novo tópico, procure no fórum se o mesmo já não foi criado. Assim deixa o nosso fórum mais limpo, sendo mais fácil de se encontrar as soluções, concentrando todas as duvidas sobre um assunto em um único lugar e também pode ser que sua duvida seja sanada na resposta de outro colega… que é este caso.

        Você cometeu o mesmo erro do Robson ( 3º post daqui ) e em seguida dou uma explicação sobre a resolução.
        OBS: também há outro tópico do exercício 38 em que dou uma explicação mais completa e com resolução AQUI

        Em resumo, você esta errando por que esta atribuindo os nomes e idades para ambos os sexos no primeiro momento em que o programa roda, sendo que na primeira vez só é atribuído um sexo.

        Caso leia os 2 tópicos e ainda continue com duvida, basta responder aqui.

    • #99946
      Yuri Chaves Martins
      Participante

      Creio que a verificação de se o homem ou a mulher digitada é a primeira pode ser feita sem a necessidade de um “se” específico para isso no exercício. Podem me informar se existe alguma situação que o código a seguir não funciona?
      programa
      {

      funcao inicio()
      {
      inteiro c=1, id, ho=0, mu=0, idhomai=0, idhomen=0, idmumai=0, idmumen=0
      cadeia nome, sexo, nhomai=””, nhomen=””, nmumai=””, nmumen=””
      enquanto (c<=5) {
      escreva(“———————–\n”)
      escreva(c+”a. PESSOA\n”)
      escreva(“———————–\n”)
      escreva(“NOME: “)
      leia(nome)
      escreva(“SEXO [M/F]: “)
      leia(sexo)
      escreva(“IDADE: “)
      leia(id)
      se (sexo == “M” ou sexo == “m”) {
      ho++
      se (id > idhomai ou idhomai == 0) {
      idhomai = id
      nhomai = nome
      }
      se (id < idhomen ou idhomen == 0) {
      idhomen = id
      nhomen = nome
      }
      }
      se (sexo == “F” ou sexo == “f”) {
      mu++
      se (id > idmumai ou idmumai == 0) {
      idmumai = id
      nmumai = nome
      }
      se (id < idmumen ou idmumen == 0) {
      idmumen = id
      nmumen = nome
      }
      }
      c++
      }
      //RESULTADOS:
      escreva(“================================================================\n”)
      escreva(“Ao todo tivemos ” + ho + ” homens e ” + mu + ” mulheres cadastrados.\n”)
      escreva(“O homem mais jovem é “+ nhomen + ” que tem ” + idhomen + ” anos.\n”)
      escreva(“O homem mais velho é ” + nhomai + ” que tem ” + idhomai + ” anos.\n”)
      escreva(“A mulher mais jovem é ” + nmumen + ” que tem ” + idmumen + ” anos.\n”)
      escreva(“A mulher mais velha é ” + nmumai + ” que tem ” + idmumai + ” anos.\n”)
      escreva(“================================================================\n”)
      }
      }

      PS: sei que os nomes que dei para as minhas variaveis não são os melhores

    • #99966
      Tutora Jessica
      Moderador

      Olá Yuri, então, não consegui compreender muito qual seria sua dúvida, me desculpa..
      Você poderia nos explicar melhor ?
      Você gostaria de saber se tem erro no seu código?
      Quer saber em quais ocasiões usar ou não o SE?
      Te aguardo novamente para tentar lhe ajudar no que precisa 🖖

    • #100047
      Yuri Chaves Martins
      Participante

      Olá, Jessica,

      Obrigado pela resposta. Minha dúvida diz respeito a lógica que o professor Guanabara ensina quando queremos guardar o maior número de uma sequência em uma variável. Ele ensina que se o número for o primeiro ele automaticamente é o maior (já que não há outro para comparação) e escreve código para testar essa condição na forma de “se, senao”. Por exemplo:
      1)
      se (n for o primeiro) {
      maior = n
      } senao {
      se (n > maior) {
      maior = n
      }
      }

      Contudo acho que essa estrutura pode ser simplificada utilizando o operador booleano “ou” da seguinte forma.
      2)
      se ( (n for o primeiro) ou (n > maior)) {
      maior = n
      }
      Acho que essa segunda estrutura economiza linhas de codigo e algumas vezes é mais elegante que a primeira. O meu código anterior foi feito utilizando a estrutura 2 e gostaria de saber se isso está correto ou não. Qual seria a condição ou as condições nas quais a estrutura 1 seria mais apropriada que a estrutura 2.

    • #100063
      Tutora Jessica
      Moderador

      Ola Yuri, acho que agora consegui entender melhor..
      Então, não há uma forma exatamente correta para escrever seu código, você pode usar da forma que se sentir melhor, o que você achar que se encaixa melhor, cada código é único..
      O Professor Guanabara tenta explicar da forma mais fácil para que todas as funções e todo o passo a passo seja entendido pelos alunos, a partir da explicação dele você pode usar da forma que achar que deve, pode ficar a vontade para pesquisar diversas outras formas e se enquadrar no que achar melhor.
      O importante das aulas iniciais é que seja entendido o que cada comando faz, e você demonstrou que entendeu direitinho.
      Parabéns pelo seu empenho, continue assim que você vai longe 🖖

    • #101364

      Eu devo estar olhando tão de perto que não consigo enxergar. Não consigo encontrar o pq de não encontrar a mulher jovem e a idade. Está aparecendo, para ela, a idade e nome da declaração inicial.
      Alguém poderia esclarecer? Grato.

      programa
      {

      funcao inicio()
      {
      inteiro idade, maiorF=0, menorF=0, maiorM=0, menorM=0, c=1
      cadeia nome, velha=””, velho=””, nova=””, novo=””
      caracter sexo

      enquanto(c<=5){
      escreva(c + “a PESSOA”)
      escreva(“———-\n”)
      escreva(“NOME: “)
      leia(nome)
      escreva(“\nSEXO:[M/F] “)
      leia(sexo)
      escreva(“\nIdade: “)
      leia(idade)
      se(sexo==’M’ ou sexo==’m’){
      se(c==1){
      maiorM=idade
      menorM=idade
      velho=nome
      novo=nome
      }
      senao{
      se(idade>maiorM){
      maiorM=idade
      velho=nome
      }
      se(idade<menorM){
      menorM=idade
      novo=nome }
      }

      }
      senao se(sexo==’F’ ou sexo==’f’){
      se(c==1){
      maiorF=idade
      menorF=idade
      velha=nome
      nova=nome
      }
      senao{
      se(idade>maiorF){
      maiorF=idade
      velha=nome
      }
      se(idade<menorF){
      menorF=idade
      nova=nome
      }

      }
      }

      c++
      }
      escreva(“O homem mais velho é o “+velho+ ” e sua idade é de ” +maiorM+ ” anos.”)
      escreva(“\nO homem mais jovem é o ” +novo+ ” e sua idade é de ” ,menorM, ” anos.”)
      escreva(“\nA mulher mais velha é a ” + velha+ ” e sua idade é de “, maiorF, ” anos.”)
      escreva(“\nA mulher mais jovem é a ” +nova+ ” e sua idade é de “, menorF, ” anos.”)
      }
      }

    • #101457
      Tutora Jessica
      Moderador

      Ola Fernando, testei seu código e apareceu a mulher mais nova direitinho..
      Veja se tem alguma dúvida quanto a esse exercício, ou me explique melhor a sua dúvida.
      No fórum, temos outra publicação com diversas explicações para o exercício 38
      Nesse link : https://www.estudonauta.com/foruns/topic/mod-03-ex-038/

      • #101478

        O que está aparecendo pra mim ao executar é:
        O homem mais velho é Ricardo e sua idade é de 35 anos.
        O homem mais jovem é o Caio e sua idade é de 4 anos.
        A mulher mais velha é a Bianca e sua idade é de 32 anos.
        A mulher mais jovem é a e sua idade é 0 anos.

        Pode ser algum bug aqui do Portugol já que apareceu pra você. Não sei. hehe

    • #101582
      Tutora Jessica
      Moderador

      Ola Fernando,
      Você já deu uma olhadinha nas resoluções acima, observei e seu código esta faltando um contador dentro do SE masculino e feminino.

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