Uma empresa organizou uma pesquisa de opinião para determinar o sucesso de seus 10 produtos. 0 arquivo pesquisa.txt armazena os dados coletados na pesquisa e contém, em cada linha: o sexo da pessoa entrevistada (int), a idade da pessoa (int), o número do produto que a pessoa mais gosta (int). Escrever um programa que, a partir do arquivo pesquisa.txt, mostra o seguinte relatório:
PERFIL DOS xxx ENTREVISTADOS:
MASCULINO: xx.x% FEMININO: xx.x%
ATE 2O ANOS: xx.x% MAIS DE 20 ANOS: xx.x%
PRODUTOS DESTACADOS:
PRODUTO MAIS CITADO: xx (CITADO POR xx.x% DAS PESSOAS)
PRODUTO MENOS CITADO: xx (CITADO POR xx.x% DAS PESSOAS)
PERFIL DOS xxx ENTREVISTADOS:
MASCULINO: xx.x% FEMININO: xx.x%
ATE 2O ANOS: xx.x% MAIS DE 20 ANOS: xx.x%
PRODUTOS DESTACADOS:
PRODUTO MAIS CITADO: xx (CITADO POR xx.x% DAS PESSOAS)
PRODUTO MENOS CITADO: xx (CITADO POR xx.x% DAS PESSOAS)
Passo 1
A questão pede um programa que leia um arquivo “pesquisa.txt” com 10 produtos e dados de entrevistados (sexo, idade, produto favorito) e gere um relatório com percentuais de sexo, faixa etária e produtos mais/menos citados. Vamos usar conceitos de leitura de arquivo em C, contadores e cálculo de percentuais.
Passo 2
Abrir o arquivo “pesquisa.txt” em modo de leitura. Se falhar, exibir mensagem de erro e sair. Em C usamos a função fopen() para abrir e fclose() para fechar o arquivo.
Declarar e inicializar variáveis: um inteiro total=0, contadores masculino=0, feminino=0, ate20=0, mais20=0; um vetor int produtos[11] (índices 1 a 10) zerado para contar citações de cada produto.
Declarar e inicializar variáveis: um inteiro total=0, contadores masculino=0, feminino=0, ate20=0, mais20=0; um vetor int produtos[11] (índices 1 a 10) zerado para contar citações de cada produto.
Passo 3
Fazer um laço que use fscanf para ler três inteiros por linha: sexo, idade e prod. Para cada leitura com sucesso (3), incrementar total. Se sexo1, incrementar masculino, senão (assumindo 2) incrementar feminino. Se idade<=20 incrementar ate20, senão incrementar mais20. Incrementar produtos[prod]++.
Passo 4
Depois de ler todo o arquivo, calcular os percentuais como double: pct_masc = masculino100.0/total; pct_fem = feminino100.0/total; pct_ate20 = ate20100.0/total; pct_mais20 = mais20100.0/total.
Passo 5
Para achar o produto mais citado, percorrer i de 1 a 10 e manter índice best_max onde produtos[i] é máximo; similar para best_min onde produtos[i] é mínimo. Calcular percentuais dos produtos: pct_max = produtos[best_max]*100.0/total; pct_min = produtos[best_min]*100.0/total.
Passo 6
Imprimir o relatório usando printf com uma casa decimal (%.1f%%) e o formato pedido. Não esquecer de fechar o arquivo.
Passo 7
Segue abaixo o código completo em C que implementa essa lógica.
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main() {
FILE *fp = fopen(“pesquisa.txt”, “r”);
if (fp == NULL) {
printf(“Erro ao abrir o arquivo.\n”);
return 1;
}
FILE *fp = fopen(“pesquisa.txt”, “r”);
if (fp == NULL) {
printf(“Erro ao abrir o arquivo.\n”);
return 1;
}
int sexo, idade, prod;
int total = 0;
int masculino = 0, feminino = 0;
int ate20 = 0, mais20 = 0;
int produtos[11] = {0}; // índices 1 a 10
while (fscanf(fp, "%d %d %d", &sexo, &idade, &prod) == 3) {
total++;
if (sexo == 1)
masculino++;
else
feminino++;
if (idade <= 20)
ate20++;
else
mais20++;
if (prod >= 1 && prod <= 10)
produtos[prod]++;
}
fclose(fp);
double pct_masc = masculino * 100.0 / total;
double pct_fem = feminino * 100.0 / total;
double pct_ate20 = ate20 * 100.0 / total;
double pct_mais20 = mais20 * 100.0 / total;
int best_max = 1, best_min = 1;
for (int i = 2; i <= 10; i++) {
if (produtos[i] > produtos[best_max])
best_max = i;
if (produtos[i] < produtos[best_min])
best_min = i;
}
double pct_max = produtos[best_max] * 100.0 / total;
double pct_min = produtos[best_min] * 100.0 / total;
printf("PERFIL DOS %d ENTREVISTADOS:\n", total);
printf("MASCULINO: %.1f%% FEMININO: %.1f%%\n", pct_masc, pct_fem);
printf("ATE 20 ANOS: %.1f%% MAIS DE 20 ANOS: %.1f%%\n", pct_ate20, pct_mais20);
printf("PRODUTOS DESTACADOS:\n");
printf("PRODUTO MAIS CITADO: %d (CITADO POR %.1f%% DAS PESSOAS)\n", best_max, pct_max);
printf("PRODUTO MENOS CITADO: %d (CITADO POR %.1f%% DAS PESSOAS)\n", best_min, pct_min);
return 0;
}