O Departamento de trânsito do estado anotou dados de acidentes de trânsito no último ano. Para cada motorista envolvido no acidente, tem-se as seguintes informações:
- Ano de nascimento;
- Sexo (M - Masculino, F - Feminino)
- Procedência ( 0 - Capital, 1 - Interior, 2 - Outro estado);
Faça um programa em C que :
d) Verifique se existe alguma mulher com idade maior que 60 anos;
d) Verifique se existe alguma mulher com idade maior que 60 anos;
Passo 1
O que o enunciado pede: verificar se existe alguma mulher com idade maior que
anos entre os motoristas envolvidos nos acidentes.\n
Informações disponíveis para cada motorista (cada registro):\n
Informações disponíveis para cada motorista (cada registro):\n
- Ano de nascimento (um número inteiro) \n
- Sexo (caractere:
para masculino, para feminino) \n - Procedência (valor inteiro:
- Capital, - Interior, - Outro estado)\n
Pergunta específica a responder: “Existe pelo menos uma mulher com idade maior queanos?” — resposta booleana (sim/não), e o programa deve imprimir essa informação.
Passo 2
Como vamos medir “idade”: usamos a fórmula
.\n
Explicação dessa fórmula: a idade em anos inteiros é obtida subtraindo o ano de nascimento do ano atual. Por exemplo, se e
, então
.\n
Precisamos do valor de . Em C podemos obtê-lo automaticamente usando a biblioteca de tempo (<time.h>) para evitar pedir esse dado ao usuário — assim o programa funciona corretamente em qualquer ano.
Explicação dessa fórmula: a idade em anos inteiros é obtida subtraindo o ano de nascimento do ano atual. Por exemplo, se
Precisamos do valor de
Passo 3
Estratégia do programa (passo a passo lógico):\n
- Ler quantos registros (
) serão informados (número de motoristas analisados). \n - Obter o
via funções de tempo do sistema. \n - Percorrer os
registros: para cada registro ler , e . \n - Para cada registro calcular
. \n - Verificar a condição: se
e . \n - Se a condição for verdadeira para algum registro, marcar que “existe” e podemos interromper a leitura (para ganhar tempo). \n
- Ao final, imprimir se existe ou não pelo menos uma mulher com idade maior que
anos.\n
Observação sobre leitura do caractere: ao usar com é bom colocar um espaço antes do especificador, por exemplo usado como , para consumir eventuais quebras de linha/espacos deixados pelo teclado.
Passo 4
Tipos de variáveis que usaremos e por quê:\n
-
: ano de nascimento é um número inteiro. \n -
: ano atual inteiro obtido do sistema. \n -
: diferença entre anos, também inteiro. \n -
: guarda um único caractere, ou . \n -
: inteiro conforme enunciado. \n -
(ou se preferir C sem <stdbool.h>): flag que indica se já encontramos uma mulher com idade . Inicializamos como falso.
Passo 5
Detalhes sobre obter o ano atual em C (explicado para você poder entender e reproduzir na prova):\n
- Incluímos <time.h>. \n
- Chamamos
para obter a hora atual em segundos desde a Época. \n - Convertendo para a estrutura local com
obtemos um ponteiro para . \n - O campo
da struct contém o número de anos desde . Logo para ter o ano atual em forma humana fazemos .\n
Exemplo: se, então .
Passo 6
Condição que usamos para decidir que “existe alguma mulher com idade maior que
anos”:\n
Explicando: verificamos se o caractere do sexo é
maiúsculo ou
minúsculo (para aceitar ambas), e ao mesmo tempo se a idade calculada excede
. Se ambas forem verdadeiras, então o registro satisfaz a condição.
Passo 7
Comportamento final do programa e otimização:\n
- Se encontrarmos uma mulher com idade
podemos interromper a leitura cedo usando — isso é útil se for grande.\n - Ao final imprimimos uma mensagem clara: por exemplo, “Existe pelo menos uma mulher com idade maior que 60 anos.” ou “Não existe mulher com idade maior que 60 anos.”.\n
- Vou agora fornecer o programa completo em C que implementa essa lógica. Você pode compilar com
e rodar normalmente.
Resposta
#include <stdio.h>
#include <time.h>
#include <stdbool.h>
int main(void) {
int n;
printf("Quantidade de registros a ler: ");
if (scanf("%d", &n) != 1 || n <= 0) {
printf("Entrada invalida para a quantidade de registros.\n");
return 1;
}
/* Obter o ano atual */
time_t t = time(NULL);
struct tm *tm_ptr = localtime(&t);
int anoAtual = tm_ptr->tm_year + 1900;
bool existe = false;
for (int i = 0; i < n; i++) {
int anoNascimento;
char sexo;
int procedencia; /* 0 - Capital, 1 - Interior, 2 - Outro estado */
printf("Registro %d - informe: anoNascimento sexo procedencia\n", i+1);
/* Espaço antes de %c para consumir possiveis espacos/quebras de linha */
if (scanf("%d %c %d", &anoNascimento, &sexo, &procedencia) != 3) {
printf("Entrada invalida no registro %d. Encerrando.\n", i+1);
return 1;
}
int idade = anoAtual - anoNascimento;
if ((sexo == 'F' || sexo == 'f') && idade > 60) {
existe = true;
break; /* ja encontramos, podemos parar */
}
}
if (existe) {
printf("Existe pelo menos uma mulher com idade maior que 60 anos.\n");
} else {
printf("Nao existe mulher com idade maior que 60 anos.\n");
}
return 0;
}