Home › Fóruns › Programação Básica › MOD 03 EX 038
- Este tópico contém 14 respostas, 7 vozes e foi atualizado pela última vez 3 anos, 5 meses atrás por Tutora Mayla.
-
AutorPosts
-
-
30 de março de 2021 às 07:16 #64057Wilson Neves Moreira JuniorParticipante
Bom Dia! Onde não estou conseguindo visualizar o ajuste desse código? Valeu!
programa
{/* EXERCÍCIO 038 – Analisando idades */
inclua biblioteca Texto –> txt
funcao inicio()
{
inteiro c, id, idvelha, idnova, idvelho, idnovo
idvelha = 1000
idnova = 1000
idvelho = 1000
idnovo = 1000
c = 1cadeia nome, nomevelha, nomejovem, nomevelho, nomenovo, sx
nomevelha = ” ”
nomejovem = ” ”
nomevelho = ” ”
nomenovo = ” ”enquanto(c <= 5){
escreva(“—————————“)
escreva(“\n”,c,”° PESSOA”)
escreva(“\n—————————“)
escreva(“\nNOME: “)
leia(nome)
escreva(“SEXO: “)
leia(sx)
escreva(“IDADE: “)
leia(id)
sx = txt.caixa_alta(sx)se (c == 1) {
idvelha = id
idnova = id
idvelho = id
idnovo = id
nomejovem = nome
nomevelha = nome
nomenovo = nome
nomevelho = nome}senao se (idvelha < id e sx == “F”) {
idvelha = id
nomevelha = nome}senao se (idnova > id e sx == “F”) {
idnova = id
nomejovem = nome}senao se (idvelho < id e sx == “M”) {
idvelho = id
nomevelho = nome}senao se (idnovo > id e sx == “M”) {
idnovo = id
nomenovo = nome
}c++
}
escreva(“\nA mulher mais jovem é a ” , nomejovem,” que tem “, idnova,” anos”)
escreva(“\nA mulher mais velha é a “, nomevelha, ” que tem “, idvelha,” anos”)
escreva(“\nO homem mais jovem é o “, nomenovo, ” que tem “, idnovo, ” anos”)
escreva(“\nO homen mais velho é o “, nomevelho, ” que tem “, idvelho, ” anos\n\n”)
}
} -
30 de março de 2021 às 12:59 #64075IcaroFilhoModerador
Bom dia Wilson,
Vou tentar te ajudar a partir da minha linha de pensamento.
No primeiro teste (recurso disponível na ferramenta Portugol Studio, recomendo que sempre use pois te ajuda a visualizar e entender melhor os códigos que escreve) de mesa vc já pode perceber que você esta atribuindo todos os primeiros dados a primeira pessoa:se (c == 1) { idvelha = id idnova = id idvelho = id idnovo = id nomejovem = nome nomevelha = nome nomenovo = nome nomevelho = nome
ou seja, se eu escrever apenas pessoas de um sexo, o sexo oposto será preenchido.
Então a primeira peneira seria separar por sexo.se (sx == "F"){ Bloco } se (sx == "M"){ Bloco }
dentro de cada bloco sim, vc deve comparar se é a primeira entrada ou não. a partir dai você pode fazer por dois métodos.
1º Metodo – Contador
Cria um contador para cada sexo.
O motivo é que se utilizar um único contador, quando fizer a primeira entrada de homem, o seu contador que iniciou com 1 fara a comparação e receberá mais 1. Quando for fazer a primeira entrada da mulher, seu contador será diferente de 1, logo nao fara a primeira entrada feminina e o codigo desanda.
Logo dentro de cada bloco vc irá utilizar o contador correspondente.
ex.: inteiro c_masc = 0, c_fem = 02º Metodo – nomes
vc pode usar o nome para saber se é a primeira entrada ou não.
quando seu programa inicializar, eles terão os nomes vazios (nomevelha,nomejovem…)
Ou seja, sempre que seu nome nao possuir valor, será a primeira entrada.
Então pode criar um checador para saber se esta vazio ou não. Caso esteja vazio você pode atribuir o valor do nome ao nome mais velho e mais novo.Depois de ter as primeiras entradas atribuídas, terá apenas que checar as proximas idades serão maior ou menor que as atuais. (lembrando que isso ocorrerá dentro do seu respectivo bloco M/F)
PS: vc atribuiu valores 1000 as idades. isto não é necessário tendo em vista que você esta atribuindo os valores da idade velho/novo na primeira checagem.
Veja bem, eu postei 2 métodos de se fazer. vc estava pelo método 1, eu vou postar pelo método 2.
depois dessas correções tente refaze-lo pelo seu método de contador.
Abaixo deixo meu codigo para que posso visualizar melhor a ideia que tentei passar.programa { inclua biblioteca Texto --> txt funcao inicio() { cadeia nome = "vazio", nome_mulher_jovem = "vazio", nome_mulher_velha = "vazio", nome_homem_jovem = "vazio", nome_homem_velho = "vazio", sx inteiro idade = 0, m_mais_velha = 0, m_mais_jovem = 0 , contador = 1 , h_mais_velho = 0, h_mais_jovem = 0, rep escreva("Quantas pessoas serão cadastradas? ") leia(rep) enquanto (contador <= rep){ escreva(contador,"ª PESSOA\n") escreva("NOME: ") leia(nome) escreva("SEXO: ") leia(sx) sx = txt.caixa_alta(sx) escreva("IDADE: ") leia(idade) escreva("--------------------\n") se (sx =="F"){ se (nome_mulher_jovem == "vazio"){ nome_mulher_jovem = nome m_mais_jovem = idade } se ( idade < m_mais_jovem ){ nome_mulher_jovem = nome m_mais_jovem = idade } se (nome_mulher_velha == "vazio"){ nome_mulher_velha = nome m_mais_velha = idade } se ( idade > m_mais_velha ){ nome_mulher_velha = nome m_mais_velha = idade } } se (sx =="M"){ se (nome_homem_jovem == "vazio"){ nome_homem_jovem = nome h_mais_jovem = idade } se ( idade < h_mais_jovem ){ nome_homem_jovem = nome h_mais_jovem = idade } se (nome_homem_velho == "vazio"){ nome_homem_velho = nome h_mais_velho = idade } se ( idade > h_mais_velho ){ nome_homem_velho = nome h_mais_velho = idade } } contador += 1 } escreva("\n----------------------------------------------------------------------") escreva ("\nA mulher mais jovem é a ",nome_mulher_jovem," com ",m_mais_jovem," anos.") escreva ("\nA mulher mais velha é a ",nome_mulher_velha," com ",m_mais_velha," anos.") escreva ("\nO homem mais jovem é o ",nome_homem_jovem," com ",h_mais_jovem," anos.") escreva ("\nO homem mais velho é o ",nome_homem_velho," com ",h_mais_velho," anos.") } }
-
30 de março de 2021 às 19:03 #64090Tutora MaylaMestre
Wilson, o aluno Icaro explicou perfeitamente os pontos a se levar em consideração no seu código!
Se ainda houver dúvidas entre em contato novamente que lhe ajudaremos. -
10 de abril de 2021 às 00:02 #64690Antonio Carlos Belemel da CruzParticipante
Boa noite pessoal, estava travado nesse exercício porém agora com os teste de mesa consegui evoluir. Minha dúvida é sobre o primeiro método como faço para fazer desse jeito não consegui entender a parte de adicionar dois contadores.
-
10 de abril de 2021 às 07:52 #64710IcaroFilhoModerador
Bom dia Antônio.
Assim fica meio vaga para eu conseguir te ajudar.
1º – Poste aqui o seu código (de preferencia formatado (copie e cole o código do Portugal Studio e selecione ele todo aqui. Em seguida clique em “CODE” na aba de formatação de texto. Já saira formatado com os espaços))2º vamos ver se consigo te ajudar.
A respeito de criar os 2 contadores individuais, vc lembra que terá que testar se é ou não a primeira entrada para cada sexo, correto?
Logo essas variáveis serão postas dentro de cada sexo para contar individualmente a entrada.
elas são variáveis acumuladorasvar = var + var2
, no caso,c_masc = c_masc + 1
,c_fem = c_fem + 1
.
Sua única função aqui será checar se é ou não a primeira entrada ( ou saber quantas pessoas de cada sexo foram inseridas, td depende do que deseja fazer)se (sx =="F"){ c_fem += 1 se (c_fem == 1){ nome_mulher_jovem = nome m_mais_jovem = idade } senao { BLOCO
Novamente, se continuar com duvidas, pose seu código aqui que tento te explicar em cima dele.
-
-
11 de abril de 2021 às 12:51 #64894Antonio Carlos Belemel da CruzParticipante
ícaro, bom dia!
cara show de bola. Acredito ter chegado ao objetivo do exercício, muito obrigado irmão!!programa { funcao inicio() { inteiro c=1 inteiro c_masc = 1 inteiro c_fem = 1 escreva("{ EXERCÍCIO 038 - Analisando Idades }\n") cadeia nome="vazio" cadeia mulhernova = "vazio" cadeia mulhervelha = "vazio" cadeia homenovo = "vazio" cadeia homevelho = "vazio" caracter sx caracter sxmulhervelha caracter sxmulhernova caracter sxmascnovo caracter sxmascvelho inteiro idade inteiro idadenova = 0 inteiro idadevelha = 0 inteiro idadenovo = 0 inteiro idadevelho = 0 enquanto(c <= 5){ escreva("---------------\n") escreva(c, "º PESSOAS") escreva("\n---------------") escreva("\nNOME: ") leia(nome) escreva("SEXO: ") leia(sx) escreva("IDADE: ") leia(idade) escreva("\n") se(sx == 'F' ou sx == 'f'){ se(c_fem == 1){ mulhernova = nome idadenova = idade sxmulhernova = sx } c_fem++ } se(sx == 'f' ou sx == 'F'){ se(idade > idadevelha){ mulhervelha = nome idadevelha = idade sxmulhervelha = sx } se(idade < idadenova){ mulhernova = nome idadenova = idade sxmulhernova = sx } } // se(sx == 'm' ou sx == 'M'){ se(c_masc == 1){ homenovo = nome idadenovo = idade sxmascnovo = sx } c_masc++ } se(sx == 'm' ou sx == 'M'){ se(idade > idadevelho){ homevelho = nome idadevelho = idade sxmascvelho = sx } se(idade < idadenovo){ homenovo = nome idadenovo = idade sxmascnovo = sx } } c++ } escreva("\nQuem é a mulher mais jovem é a ", mulhernova, " que tem ", idadenova, " anos.") escreva("\nQuem é a mulher mais velha é a ", mulhervelha, " que tem ", idadevelha, " anos.\n") escreva("\nQuem é o homem mais novo é o ", homenovo, " que tem ", idadenovo, " anos.") escreva("\nQuem é o homem mais velho é o ", homevelho , " que tem ", idadevelho , " naos.") escreva("\n\n") } }
-
12 de abril de 2021 às 20:35 #65055Tutora MaylaMestre
Antonio, que bom que conseguiu entender com a ajuda do aluno Icaro!
Acrescento aqui que não é necessário testar 2 vezes se é mulher(ou se é homem), basta, como o Icaro sugeriu, fazer a lógica toda da mulher(ou homem) dentro do seu própriose
.Por exemplo:
se( sx == f ) { se(c_fem == 1) {...} //aqui vai entrar na primeira mulher digitada senao {...} //aqui nas demais mulheres } senao se (sx == m) { se(c_masc == 1) {...} //aqui no primeiro homem digitado senao {...} //aqui nos demais homens }
Espero ter ajudado, quaisquer outras dúvidas estamos a disposição.
-
-
14 de abril de 2021 às 15:19 #65216Antonio Carlos Belemel da CruzParticipante
Boa tarde Mayla
Obrigado pela ajuda, vou revisar o código nas aulas com a resposta do professor. -
19 de abril de 2021 às 22:19 #65645Rafael Alonso Barbosa SantosParticipante
-
Essa é minha Solução, se te ajudar a entender segue meu código!
programa { inclua biblioteca Texto --> t funcao inicio() { cadeia nome = "", h_velho = "", h_jovem = "", m_velha = "", m_jovem = "", sexo = "" inteiro idade = 0, h_id_mvelho = 0, h_id_mjovem = 0, m_id_mvelha = 0, m_id_mjovem = 0, h = 0, f = 0, c = 1 enquanto (c <= 5) { escreva("------------------------\n") escreva(c, "º PESSOA:\n") escreva("Nome: ") leia(nome) escreva("Sexo [M/F]: ") leia(sexo) escreva("Idade: ") leia(idade) sexo = t.caixa_alta(sexo) se (sexo == "F") { f++ se (f == 1) { m_velha = nome m_jovem = nome m_id_mvelha = idade m_id_mjovem = idade } senao se(idade > m_id_mvelha) { m_id_mvelha = idade m_velha = nome } senao se (idade < m_id_mjovem) { m_id_mjovem = idade m_jovem = nome } } senao se (sexo == "M") { h++ se (h == 1) { h_velho = nome h_jovem = nome h_id_mvelho = idade h_id_mjovem = idade } senao se (idade > h_id_mvelho) { h_velho = nome h_id_mvelho = idade } senao se (idade < h_id_mjovem) { h_jovem = nome h_id_mjovem = idade } } c++ } escreva("==================================================\n") escreva("Ao todo tivemos ", h, " homen(s) e ", f, " mulhere(s).\n") escreva("O homem mais jovem é ", h_jovem, " com ", h_id_mjovem, " ano(s).\n") escreva("O homem mais velho é ", h_velho, " com ", h_id_mvelho, " ano(s).\n") escreva("A mulher mais jovem é ", m_jovem, " com ", m_id_mjovem, " ano(s).\n") escreva("A mulher mais velha é ", m_velha, " com ", m_id_mvelha, " ano(s).\n") escreva("==================================================\n\n") } }
-
26 de abril de 2021 às 10:14 #65944Tutora MaylaMestre
Rafael, parabéns pela sua resposta, está correta! Continue se dedicando assim e será cada vez um programador melhor!
Obrigada por compartilha-la com a comunidade, assim construímos juntos uma comunidade cada dia melhor!
-
-
30 de maio de 2021 às 04:09 #68111Antonio Cesar Ferreira NevesParticipante
programa { /* Estudonauta Modúlo - 003 Exercício - 038 Objetivo: Receber o nome idade e sexo de 5 pessoas logo após isso, o programa deve apresentar qual e o individuo mais jovem e o mais velho de cada sexo Autor da Resolução: Antonio Cesar */ //Biblíotecas inclua biblioteca Texto --> t funcao inicio() { //Declaração de Variaveis cadeia nome, maisjovem = " ", maisvelha = " ", maisjovem_m = " "/*homem mais jovem*/, maisvelho = " " cadeia sexo inteiro idade, idadenova = 0, idadevelha = 0, idadenovo = 0, idadevelho = 0 inteiro contador = 1 //Interface escreva("=====================================\n\tExercício - 038\n=====================================\n") enquanto(contador <= 5) { //Entrada de dados escreva("----------\n", contador, "ª pessoa\n----------\n") escreva("Nome: " ) leia(nome) escreva("Sexo[F/M]: ") leia(sexo) sexo = t.caixa_alta(sexo) escreva("Idade: " ) leia(idade) //Inicializando a comparação se(contador == 1 e sexo == "F") { maisjovem = nome idadenova = idade maisvelha = nome idadevelha = idade } senao { se(contador == 1 e sexo == "M") { maisjovem_m = nome idadenovo = idade maisvelho = nome idadevelho = idade } senao { //Atribui a idade e o nome da pessoa mai jovens do sexo Feminino se(idade < idadenova e sexo == "F") { maisjovem = nome idadenova = idade } //Atribui a idade e o sexo da pessoa mais velha do sexo Feminino se(idade > idadevelha e sexo == "F") { maisvelha = nome idadevelha = idade } senao { //Atribui a idade e o sexo da pessoa mais nova do sexo masculino BuGGGGGGAQUIII se(idade < idadenovo e sexo == "M") { maisjovem_m = nome idadenovo = idade } //Atribui a idade e o sexo da pessoa mais velha do sexo masculino se(idade > idadevelho e sexo == "M") { maisvelho = nome idadevelho = idade } } } }//Fim senao contador += 1 }//Fim Enquanto //Saída escreva("\n\n=====================================================\n") escreva("A mulher mais jovem é ", maisjovem , " que tem\t", idadenova , " anos\n") escreva("A mulher mais velha é ", maisvelha , " que tem\t", idadevelha, " anos\n") escreva("O Homem mais jovem é ", maisjovem_m , " que tem\t", idadenovo , " anos\n") escreva("O Homem mais velho é ", maisvelho , " que tem\t", idadevelho, " anos\n") escreva("=====================================================\n") } }
Não faço a menor ideia do porque a variavel maisjovem_m e idadenovo não estão inicializando na decisão
-
31 de maio de 2021 às 09:11 #68168Tutora MaylaMestre
Antonio, vamos analisar a seguinte parte do seu código:
se(contador == 1 e sexo == "F") { maisjovem = nome idadenova = idade maisvelha = nome idadevelha = idade } senao { se(contador == 1 e sexo == "M") { maisjovem_m = nome idadenovo = idade maisvelho = nome idadevelho = idade }
Imagino que aqui sua vontade tenha sido inicializar tanto o primeiro homem quanto a primeira mulher, porém desta forma isto não é possível já que não há como a primeira entrada de dados ser F e M ao mesmo tempo.
se(contador == 1 e sexo == "F")
se(contador == 1 e sexo == "M")
Aqui o teste feito é se a primeira entrada é F ou se a primeira entrada é M, se na primeira entrada se inicializa o F a partir das demais(contador > 1) não será inicializado o M e vice versa.
Uma das soluções para resolver isto é criar mais 2 contadores que serão responsáveis por contar o número de F e de M, um exemplo seria:
se(contadorF == 0 e sexo == "F")
se(contadorM == 0 e sexo == "M")
Assim não se fica restrito a primeira iteração do programa e sim a primeira entrada de dados F e M. Já que sempre um será lido antes do outro. E a variávelcontador
fica responsável apenas por limitar a entrada a 5. E as variáveiscontadorF
econtadorM
servem apenas para verificar se é a primeira mulher e se é o primeiro homem, ou seja se está como 0 ou não. Ressalto que é apenas um exemplo de como resolver, exercite sua lógica e pense em outras formas de se chegar a uma solução.Outro ponto que causa erro no seu código em decorrência do erro anterior é:
idadenovo = 0
Se não houvesse o erro anterior essa parte do código estaria correta, mas por conta do erro anterior aqui vira um erro também.
O que acontece é que como temos que o valor inicial é 0, não há como uma idade inserida ser menor que 0, logo acontece o erro relatado de não sair um valor referente ao homem mais novo. Já para o homem mais velho funciona pois está sendo testado se o valor é maior que 0. É importante notar aqui que o erro só acontece no homem mais novo pois a primeira entrada de dados foi uma mulher, caso a primeira entrada seja um homem o erro seria na mulher mais nova.
Ao realizar testes busque sempre utilizar dados distintos em ordens distintas assim garantimos que está funcionando para vários casos, e conseguimos achar os casos onde não funciona se existirem.Espero ter ajudado, se a dúvida persistir ou houver quaisquer outras dúvidas basta entrar em contato.
E parabéns pelo seu código, apesar dessa pequena falta de atenção ele está bom, continue se dedicando e será um programador cada vez melhor. -
1 de junho de 2021 às 01:43 #68239Antonio Cesar Ferreira NevesParticipante
muito obrigado!!
-
-
1 de junho de 2021 às 20:51 #68474Bruno AntunesParticipante
Boa noite!
Ícaro, excelente explicação me ajudou bastante! Senhores, apenas compartilhando minha solução…programa { inclua biblioteca Texto --> t funcao inicio() { escreva("{ EXERCÍCIO 038 - Analisando idades }\n") inteiro c, idade, maior_m, menor_m, maior_f, menor_f c = 1 idade = 0 maior_m = 0 menor_m = 0 maior_f = 0 menor_f = 0 cadeia nome, nome_maior_f, nome_menor_f,nome_maior_m, nome_menor_m, sexo sexo = " " nome_maior_f = " " nome_menor_f = " " nome_maior_m = " " nome_menor_m = " " enquanto( c <= 5){ escreva("-----------\n") escreva(c + "a Pessoa\n") escreva("-----------\n") escreva("Nome: ") leia(nome) escreva("Sexo: ") leia(sexo) sexo = t.caixa_baixa(sexo) escreva("Idade: ") leia(idade) se (sexo == "f"){ se (nome_menor_f == " "){ nome_menor_f = nome menor_f = idade } se (idade < menor_f){ nome_menor_f = nome menor_f = idade } se (nome_maior_f == " "){ nome_maior_f = nome maior_f = idade } se (idade > maior_f){ nome_maior_f = nome maior_f = idade } } se (sexo == "m"){ se (nome_menor_m == " "){ nome_menor_m = nome menor_m = idade } se (idade < menor_m){ nome_menor_m = nome menor_m = idade } se (nome_maior_m == " "){ nome_maior_m = nome maior_m = idade } se (idade > maior_m){ nome_maior_m = nome maior_m = idade } } c++ } escreva("\n============================================================================") escreva("\nA mulher mais jovem é a " + nome_menor_f + " que tem " + menor_f + " anos.") escreva("\nA mulher mais velha é a " + nome_maior_f + " que tem " + maior_f + " anos ") escreva("\nO homem mais jovem é o " + nome_menor_m + " que tem " + menor_m + " anos.") escreva("\nO homem mais velhor é o " + nome_maior_m + " que tem " + maior_m + " anos.") } }
-
2 de junho de 2021 às 20:52 #68544Tutora MaylaMestre
Bruno, parabéns pelo seu código! Continue se dedicando e será um programador cada vez melhor!
Se houver quaisquer dúvidas basta entrar em contato que lhe ajudaremos.
-
-
-
AutorPosts
- Você deve fazer login para responder a este tópico.