3(2pts)Crie uma matriz para armazenar os nomes de 10 empresas. Em uma outra matriz armazene os valores de venda em cada empresa nos 12 meses do ano de 2022. Use um vetor para armazenar a média de vendas de cada empresa. Crie uma função para executar as seguintes ações:
a. Imprima no final o nome da empresa, em ordem alfabética, e sua média de vendas.
b. Imprima, uma listagem das 3 melhores empresas, com as melhores médias de venda.
a. Imprima no final o nome da empresa, em ordem alfabética, e sua média de vendas.
b. Imprima, uma listagem das 3 melhores empresas, com as melhores médias de venda.
Passo 1
O enunciado pede para armazenar em memória:
- Uma “matriz” (vetor de strings) com os nomes de
empresas. - Uma “matriz” de vendas mensais de cada empresa em
meses de 2022. - Um vetor com a média anual de vendas de cada empresa.
Depois, criar uma função que:
a. Imprime, em ordem alfabética de nome, cada empresa com sua média de vendas.
b. Imprime as três empresas com maior média de vendas.
Para isso vamos usar operações básicas de vetores, cálculo de média (soma dosmeses dividida por ) e dois processos de ordenação (um por nome, outro por média).
Passo 2
Definimos as estruturas em C (você pode adaptar para outra linguagem):
#include <stdio.h>
#include <string.h>
#define N_EMP 10
#define N_MES 12
#define MAX_NOME 50
void processaEmpresas(char empresas[N_EMP][MAX_NOME],
double vendas[N_EMP][N_MES]) {
double media[N_EMP];
int i, j;
/* calcular médias */
for (i = 0; i < N_EMP; i++) {
double soma = 0.0;
for (j = 0; j < N_MES; j++) {
soma += vendas[i][j];
}
media[i] = soma / N_MES;
}
/* continuar nos próximos passos */
}
Passo 3
Ordenar por nome para imprimir em ordem alfabética:
- Criaremos um vetor de índices
idxNome[N_EMP]
com valores iniciais0,1,2,...,9
. - Aplicamos um algoritmo de ordenação (por exemplo, bubble sort ou selection sort) comparando
strcmp(empresas[idxNome[a]], empresas[idxNome[b]])
. - Ao trocar
idxNome[a]
eidxNome[b]
, mantemosempresas
emedia
imutáveis — usamos só o vetor de índices para acessar na ordem certa.
Passo 4
Implementando a ordenação por nome dentro da função:
int idxNome[N_EMP];
for (i = 0; i < N_EMP; i++) idxNome[i] = i;
for (i = 0; i < N_EMP - 1; i++) {
for (j = i + 1; j < N_EMP; j++) {
if (strcmp(empresas[idxNome[i]], empresas[idxNome[j]]) > 0) {
int tmp = idxNome[i];
idxNome[i] = idxNome[j];
idxNome[j] = tmp;
}
}
}
/* impressão em ordem alfabética */
printf("Empresas em ordem alfabética e média anual:\\n");
for (i = 0; i < N_EMP; i++) {
int id = idxNome[i];
printf(" %s: %.2f\\n", empresas[id], media[id]);
}
Passo 5
Para listar as 3 melhores empresas por média, fazemos similar:
- Vetor de índices
idxMed[N_EMP] = {0,1,2,...}
. - Ordenamos
idxMed
de forma decrescente segundomedia[idxMed[a]] < media[idxMed[b]]
. - Imprimimos os
primeiros de idxMed
.
Passo 6
Código da ordenação por média e impressão do top-3 dentro da mesma função:
int idxMed[N_EMP];
for (i = 0; i < N_EMP; i++) idxMed[i] = i;
for (i = 0; i < N_EMP - 1; i++) {
for (j = i + 1; j < N_EMP; j++) {
if (media[idxMed[i]] < media[idxMed[j]]) {
int tmp = idxMed[i];
idxMed[i] = idxMed[j];
idxMed[j] = tmp;
}
}
}
/* impressão das 3 melhores */
printf("\\nTop 3 empresas por média de vendas:\\n");
for (i = 0; i < 3; i++) {
int id = idxMed[i];
printf(" %dº: %s (média = %.2f)\\n", i+1, empresas[id], media[id]);
}
}
Resposta
#include <stdio.h>
#include <string.h>
#define N_EMP 10
#define N_MES 12
#define MAX_NOME 50
void processaEmpresas(char empresas[N_EMP][MAX_NOME],
double vendas[N_EMP][N_MES]) {
double media[N_EMP];
int i, j;
/* Passo 1: calcular médias anuais */
for (i = 0; i < N_EMP; i++) {
double soma = 0.0;
for (j = 0; j < N_MES; j++) {
soma += vendas[i][j];
}
media[i] = soma / N_MES;
}
/* Passo 2: ordenar por nome (alfabética) */
int idxNome[N_EMP];
for (i = 0; i < N_EMP; i++) idxNome[i] = i;
for (i = 0; i < N_EMP - 1; i++) {
for (j = i + 1; j < N_EMP; j++) {
if (strcmp(empresas[idxNome[i]], empresas[idxNome[j]]) > 0) {
int tmp = idxNome[i];
idxNome[i] = idxNome[j];
idxNome[j] = tmp;
}
}
}
printf("Empresas em ordem alfabética e média anual:\\n");
for (i = 0; i < N_EMP; i++) {
int id = idxNome[i];
printf(" %s: %.2f\\n", empresas[id], media[id]);
}
/* Passo 3: ordenar por média (decrescente) */
int idxMed[N_EMP];
for (i = 0; i < N_EMP; i++) idxMed[i] = i;
for (i = 0; i < N_EMP - 1; i++) {
for (j = i + 1; j < N_EMP; j++) {
if (media[idxMed[i]] < media[idxMed[j]]) {
int tmp = idxMed[i];
idxMed[i] = idxMed[j];
idxMed[j] = tmp;
}
}
}
printf("\\nTop 3 empresas por média de vendas:\\n");
for (i = 0; i < 3; i++) {
int id = idxMed[i];
printf(" %dº: %s (média = %.2f)\\n", i+1, empresas[id], media[id]);
}
}
int main() {
char empresas[N_EMP][MAX_NOME] = {
"AlphaCorp","BetaTech","DeltaSoft","EcoPower","FutureII",
"GreenWave","InfoSys","QuantumX","Solaris","Zephyr"
};
double vendas[N_EMP][N_MES] = {
/* preencher com valores reais ou aleatórios */
};
/* … código para ler ou inicializar vendas … */
processaEmpresas(empresas, vendas);
return 0;
}