Uma empresa de informática comercializa um programa para gerenciar o cadastro de informações dos funcionários de empresas. Uma determinada empresa, com 8 departamentos, adquiriu o programa e, ao executar o programa pela primeira vez, informou o número de funcionários e as informações de cada funcionário. As informações armazenadas são nome (cadeia de caracteres), idade (inteiro), sexo (caractere), tempo de casa, em anos (inteiro), departamento (inteiro) e salário (em reais). Escreva um programa em C para realizar as seguintes operações:
b. Informar o número de funcionários de determinado departamento;

Passo 1

O enunciado pede para, dada a base de funcionários (com nome, idade, sexo, tempo de casa, departamento e salário), informar quantos funcionários pertencem a um departamento específico. Vamos focar na parte b, que consiste em ler o número do departamento desejado e retornar a quantidade de funcionários que têm aquele valor no campo departamento.

Passo 2

Para organizar os dados, vamos usar uma estrutura (struct) em C chamada Funcionario, que tenha campos para cada informação. Em seguida, alocamos um vetor dessa struct com tamanho igual ao número de funcionários informado pelo usuário.

Passo 3

Depois de ler todos os funcionários e armazená-los no vetor, pedimos ao usuário que informe o número do departamento para o qual deseja saber a quantidade de funcionários.

Passo 4

Percorremos o vetor de funcionários com um laço for, comparamos o campo dept de cada funcionário com o departamento informado e, sempre que for igual, incrementamos um contador. Ao final do laço, exibimos o valor do contador, que é exatamente o número de funcionários naquele departamento.

Resposta

#include <stdio.h>
#include <stdlib.h>
#define MAX_FUNC 1000 // tamanho máximo do vetor de funcionários
typedef struct {
char nome[50];
int idade;
char sexo;
int tempo; // tempo de casa em anos
int dept; // número do departamento
float salario;
} Funcionario;
int main() {
int n, deptAlvo, contador = 0;
Funcionario *v;
printf("Digite o número de funcionários: ");
scanf("%d", &n);
if (n < 1 || n > MAX_FUNC) {
    printf("Número de funcionários inválido!\n");
    return 1;
}

v = (Funcionario *)malloc(n * sizeof(Funcionario));
if (!v) {
    printf("Erro de alocação de memória.\n");
    return 1;
}

// Leitura dos dados dos n funcionários
for (int i = 0; i < n; i++) {
    printf("Dados do funcionário %d:\n", i+1);
    printf("Nome: ");
    scanf(" %49[^"]", v[i].nome);
    printf("Idade: ");
    scanf("%d", &v[i].idade);
    printf("Sexo (M/F): ");
    scanf(" %c", &v[i].sexo);
    printf("Tempo de casa (anos): ");
    scanf("%d", &v[i].tempo);
    printf("Departamento (1 a 8): ");
    scanf("%d", &v[i].dept);
    printf("Salário: ");
    scanf("%f", &v[i].salario);
}

// Parte b: contar funcionários de um departamento
printf("\nInforme o departamento desejado (1 a 8): ");
scanf("%d", &deptAlvo);

for (int i = 0; i < n; i++) {
    if (v[i].dept == deptAlvo) {
        contador++;
    }
}

printf("Número de funcionários no departamento %d: %d\n", deptAlvo, contador);

free(v);
return 0;
}

Exercícios relacionados