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.

Passo 1

O enunciado pede para armazenar em memória:
  1. Uma “matriz” (vetor de strings) com os nomes de 10 empresas.
  2. Uma “matriz” de vendas mensais de cada empresa em 12 meses de 2022.
  3. 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 dos 12 meses dividida por 12) 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:
  1. Criaremos um vetor de índices idxNome[N_EMP] com valores iniciais 0,1,2,...,9.
  2. Aplicamos um algoritmo de ordenação (por exemplo, bubble sort ou selection sort) comparando strcmp(empresas[idxNome[a]], empresas[idxNome[b]]).
  3. Ao trocar idxNome[a] e idxNome[b], mantemos empresas e media 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:
  1. Vetor de índices idxMed[N_EMP] = {0,1,2,...}.
  2. Ordenamos idxMed de forma decrescente segundo media[idxMed[a]] < media[idxMed[b]].
  3. Imprimimos os 3 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;
}

Exercícios relacionados