Informática, perguntado por luchhianop05i6n, 1 ano atrás

Faça um algoritmo que fique em laço (repetição) solicitando a digitação do estado civil (S para solteiro, C para Casado, V para viúvo ou D para Divorciado) e da idade de pessoas. O algoritmo só deve parar de solicitar a digitação de dados de novas pessoas quando for informado um estado civil inválido (diferente de S, C, V e D) ou uma idade inválida (idade menor que 0). Quando isso acontecer, devem ser exibidas as quantidades de pessoas de cada estado civil e a respectiva média de idade de acordo com o estado civil. A condição de repetição deste laço é um pouco mais complexa, você deverá montar uma expressão lógica usando os operadores lógicos E ou OU.

Soluções para a tarefa

Respondido por bokomoko
1
Segue o algoritmo feito em python

#Faça um algoritmo que fique em laço (repetição) 
#solicitando a digitação do estado civil 
#S para solteiro, 
#C para Casado, 
#V para viúvo ou 
#D para Divorciado
#e da idade de pessoas. 
#O algoritmo só deve parar de solicitar a digitação de dados
#de novas pessoas quando for informado um estado civil inválido
#(diferente de S, C, V e D)
#ou uma idade inválida (idade menor que 0).
#Quando isso acontecer, devem ser exibidas
#as quantidades de pessoas de cada estado civil e
#a respectiva média de idade de acordo com o estado civil.
#A condição de repetição deste laço é um pouco mais complexa,
#você deverá montar uma expressão lógica usando os operadores lógicos E
#u OU.
#

totais= { 'C': 0 , 'S': 0, 'D': 0, 'V':0 }  # zera totais por estado civil
idades = {'C':0 , 'S': 0, 'D': 0, 'V': 0 }  # zera somatórios de idades de cada
#stado civil

westado = 'S'  # atribuição dummy para entrar no loop
widade = 0     # idem para a idades
while westado in ( 'C','S',"V","D") and widade >=0:          # loop com condição
#omplexa
  westado = input("Informe um estado civil (C)asado, (S)olteiro, (D)ivorciado, (V)iuvo")
  if westado in ( 'C','S',"V","D"): # o estado é válido ? 
    widade = int(input("Informe a idade"))  # obtem  idade
    if widade >=0:   # idade é válida ? 
      totais[westado] +=1          # conta mais uma pessoa nesse estado civil
      idades[westado] += widade    # acumula a idade para posterior média
print()                 # pula uma linha
print("exibindo os dados")
medias = dict(zip(totais.keys(),[  x[1]/x[0] for x in
list(zip(totais.values(),idades.values())) ]))

print("Estado Civil","Qtde","Média")
for estado in medias:
  print( '     {0:6s} {1:4d} {2:6.2f}'.format(estado, totais[estado],medias[estado])
)

pode rodá-lo aqui https://repl.it/@bokomoko/sensoestadocivil
Perguntas interessantes