Ir ao conteúdo
  • Cadastre-se

VisualG Exercício PARA/ATÉ. Resolver sem a gambiarra


Ir à solução Resolvido por herbertbahia,

Posts recomendados

Crie um programa que leia o sexo e a idade de várias pessoas. O programa vai perguntar se o usuário quer continuar ou não a cada pessoa. No final, mostre:

a) qual é a maior idade lida

b) quantos homens foram cadastrados

c) qual é a idade da mulher mais jovem

d) qual é a média de idade entre os homens

 

Galera queria uma ajuda de contornar  o meu problema com a pergunta C-) Qual é a idade da mulher mais jovem.  Eu só consegui atribuir fazendo a gambiarra de MENOR<-10000. Queria ajuda para atribuir a menorf sem essa gambiarra

 

var
   sexo, resp : caractere
   idade, maior, M,SH, menor, menorF: inteiro
inicio
   menor<- 10000
   
   repita
      Escreva ("Qual é seu sexo M/F? ")
      leia(sexo)
      escreva ("Qual é sua idade? ")
      leia(idade)
      Escreva ("Quer continuar S OU N? ")
      leia(resp)

      se(Idade>maior)então
         maior <- idade
      fimse
      
      se (sexo="F") E (IDADE<MENOR) então
         menorF <- idade
      FIMSE
      
      se (sexo="M")então
         M <- M+1
         SH<- SH+IDADE
      fimse
   ate (resp="N")
   
   escreval (" a maior idade é: ", maior)
   EscrevaL (" A menor idade feminina é ", menorf)
   EscrevaL (" A média da idade dos homens é ", SH/M)
   Escreva ("São ", M , " Homens")
fimalgoritmo

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Solução

Para atribuir a idade da mulher mais jovem sem usar a gambiarra de atribuir um valor muito alto para a variável menor, você pode inicialmente atribuir um valor muito alto para a variável menorF e, ao mesmo tempo, inicializar a variável menorF como -1. Isso garante que, ao comparar a idade da mulher mais jovem com a variável menorF, a condição de atualização da variável menorF só será satisfeita se a idade for realmente menor do que o valor atual de menorF.

Para fazer isso, basta alterar a linha de inicialização da variável menorF para:

menorF <- -1

Em seguida, na condição de atualização da variável menorF, você deve verificar se a idade é menor do que o valor atual de menorF e se a idade é maior ou igual a zero. Isso é necessário para garantir que a idade não seja negativa ou zero, o que não faz sentido neste contexto.

A condição de atualização da variável menorF ficaria assim:

Se(sexo="F") E (IDADE<MENORF) E (IDADE>=0) então
  menorF <- idade
FIMSE

Com essas alterações, a variável menorF será atualizada somente quando a idade for realmente menor do que o valor atual de menorF e maior ou igual a zero.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 5 semanas depois...
  • Membro VIP

Tentar resumir...

 

Em 31/12/2022 às 12:27, ALoneW disse:

Eu só consegui atribuir fazendo a gambiarra de MENOR<-10000. Queria ajuda para atribuir a menorf sem essa gambiarra

 

Tem dois ponto centrais: primeiro que seria inicializar o menorF, já que ela que para as mulheres... e compararia a idade com ela, ou seja, a idade tem que ser menor que a idade das mulheres, e não a geral. Segundo: se estiver se referindo a inicializar com um valor alto... se é gambiarra ou não, teria que parar para analisar melhor... me parece gambiarra mesmo, mas é bem comum e é em partes lógico.

 

Uma forma de contornar isso seria "atribuir o primeiro valor como sendo o inicial menor". Exemplifico abaixo.

 

 

Em 31/12/2022 às 13:49, herbertbahia disse:

Isso é necessário para garantir que a idade não seja negativa ou zero, o que não faz sentido neste contexto.

 

Entendo que essa verificação é desnecessária para o contexto. Basicamente a sugestão seria apenas se atentar ao enunciado, ou seja, nele não fala nada de "regras de negócios". Tipo: e se digitar o sexo alguma coisa que não seja "M" ou "F"? E se digitar letras para idade? Existem outros pontos que precisariam ser abordados... Basicamente devem-se supor que os dados devem ser inseridos corretamente... Daí, poderia, se quiser, fazer um outro programa "mais sofisticado" a parte... com essas "melhorias"... 🙂 

 

Segue um exemplo base:

algoritmo "Aqui um nome para o programa"
//Crie um programa que leia o sexo e a idade de várias pessoas. O programa vai
//perguntar se o usuário quer continuar ou não a cada pessoa. No final, mostre:
//a) qual é a maior idade lida
//b) quantos homens foram cadastrados
//c) qual é a idade da mulher mais jovem
//d) qual é a média de idade entre os homens
var
   sexo, resp : caractere
   idade, contM, maiorIdade, menorIdadeF, somaIdadeM : inteiro
   mediaIdadeM : real
inicio
   repita
      escreva ("Qual é seu sexo M/F? ")
      leia(sexo)
      escreva ("Qual é sua idade? ")
      leia(idade)

      se (idade > maiorIdade) então
         maiorIdade <- idade
      fimSe

      se (sexo = "M") então
         contM <- contM + 1
         somaIdadeM <- somaIdadeM + idade
      senao
         se (sexo = "F") então
            se ((menorIdadeF = 0) OU (idade < menorIdadeF)) então
               menorIdadeF <- idade
            fimSe
         fimSe
      fimSe

      escreva ("Quer continuar S ou N? ")
      leia(resp)
   ate (resp = "N")

   se (contM > 0) então //requisito matemático (se for zero o mundo explode)
      mediaIdadeM <- somaIdadeM / contM
   fimSe

   escrevaL(" A maior idade é: ", maiorIdade:1)
   escrevaL(" São ", contM:1, " homens")
   escrevaL(" A menor idade feminina é ", menorIdadeF:1)
   escrevaL(" A média da idade dos homens é ", mediaIdadeM:1)
fimAlgoritmo



Adendo

Exemplo de problemas com dados incorretos:

image.png 

 

O "j" não é um tipo de sexo. Zero é plural? Se for um... vai ficar com "são" também.. ou seja: tudo isso seriam detalhes que iriam ALÉM do enunciado..., já que não é pedido para se preocupar com esses "detalhes". Como citado: pressupõem que os dados serão inseridos corretamente.

 

PS: observem que "verificar se existem homens" antes de calcular a média é implicitamente necessário, pois caso contrário, vai travar o programa! Computador não sabe dividir por zero muito bem.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!