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:
d. Exibir os dados dos funcionários com o menor e com o maior tempo de casa;
d. Exibir os dados dos funcionários com o menor e com o maior tempo de casa;
Passo 1
Resumo do enunciado e conteúdo: a gente precisa escrever em C uma função que, dado um cadastro de funcionários (nome, idade, sexo, tempo de casa, departamento e salário), encontre e exiba o funcionário com menor tempo de casa e o com maior tempo de casa. O conteúdo é varredura de vetor e uso de estruturas (struct) para armazenar dados compostos.
Passo 2
Definir a estrutura e ler os dados: crie uma struct Funcionario com os campos pedidos, depois leia o número de funcionários n e, em seguida, faça um loop para ler os dados de cada funcionário e armazená-los num vetor.
Passo 3
Inicializar variáveis de busca de mínimo e máximo: após a leitura, defina dois índices, minIndex e maxIndex, iniciando ambos em 0 (o primeiro funcionário).
Passo 4
Fazer a varredura para encontrar mínimo e máximo: percorra do i=1 até n–1 e compare tempoCasa de cada funcionário com os do índice atual de minIndex e maxIndex. Se achar um tempo menor, atualize minIndex; se achar maior, atualize maxIndex.
Passo 5
Exibir os resultados: após a busca, use printf para mostrar todos os campos de Funcionario no minIndex e no maxIndex, indicando quem tem o menor e quem tem o maior tempo de casa.
Resposta
#include <stdio.h>
#include <string.h>
#include <string.h>
#define MAX_FUNC 1000
typedef struct {
char nome[50];
int idade;
char sexo;
int tempoCasa;
int departamento;
float salario;
} Funcionario;
char nome[50];
int idade;
char sexo;
int tempoCasa;
int departamento;
float salario;
} Funcionario;
int main() {
int n;
Funcionario vet[MAX_FUNC];
int n;
Funcionario vet[MAX_FUNC];
printf("Digite o número de funcionários: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("\nFuncionário %d:\n", i + 1);
printf("Nome: ");
scanf(" %49[^"]", vet[i].nome);
printf("Idade: ");
scanf("%d", &vet[i].idade);
printf("Sexo (M/F): ");
scanf(" %c", &vet[i].sexo);
printf("Tempo de casa (anos): ");
scanf("%d", &vet[i].tempoCasa);
printf("Departamento (número): ");
scanf("%d", &vet[i].departamento);
printf("Salário (R$): ");
scanf("%f", &vet[i].salario);
}
int minIndex = 0, maxIndex = 0;
for (int i = 1; i < n; i++) {
if (vet[i].tempoCasa < vet[minIndex].tempoCasa) {
minIndex = i;
}
if (vet[i].tempoCasa > vet[maxIndex].tempoCasa) {
maxIndex = i;
}
}
printf("\n--- Funcionário com MENOR tempo de casa ---\n");
printf("Nome: %s\nIdade: %d\nSexo: %c\nTempo de casa: %d anos\nDepartamento: %d\nSalário: R$ %.2f\n",
vet[minIndex].nome,
vet[minIndex].idade,
vet[minIndex].sexo,
vet[minIndex].tempoCasa,
vet[minIndex].departamento,
vet[minIndex].salario);
printf("\n--- Funcionário com MAIOR tempo de casa ---\n");
printf("Nome: %s\nIdade: %d\nSexo: %c\nTempo de casa: %d anos\nDepartamento: %d\nSalário: R$ %.2f\n",
vet[maxIndex].nome,
vet[maxIndex].idade,
vet[maxIndex].sexo,
vet[maxIndex].tempoCasa,
vet[maxIndex].departamento,
vet[maxIndex].salario);
return 0;
}