Estrutura de dados
• Considere um tipo que representa um funcionário de uma empresa, definido pela estrutura a seguir: struct funcionario { char nome[81];
/* nome do funcionario */
float valor_hora;
/* valor da hora de trabalho em Reais */
int horas_mes;
/* horas trabalhadas em um mes */
}; typedef struct funcionario Funcionario;
• Escreva uma função que faça uma busca binária em um vetor de ponteiros para o tipo Funcionario, cujos elementos estão em ordem alfabética dos nomes dos funcionários. Essa função deve receber como parâmetros o número de funcionários, o vetor e o nome do funcionário que se deseja buscar, e deve ter como valor de retorno um ponteiro para o registro do funcionário procurado. Se não houver um funcionário com o nome procurado, a função deve retornar NULL. Sua função deve ter o seguinte cabeçalho: Funcionario* busca (int n, Funcionario** v, char* nome);
Funcionario* busca (int n, Funcionario** v, char* nome) {
/* no início consideramos todo o vetor */ int ini = 0; int fim = n-1;
/* enquanto a parte restante for maior que zero */ while (ini nome)) { case -1: fim = meio – 1; /* ajusta posição final */ break; case 1: ini = meio + 1; /* ajusta posição inicial */ break; case 0: return v[meio];
/* elemento encontrado */
}
}
/* não encontrou: restou parte de tamanho zero */ return NULL;
}
Exercício 2
•
Considere um tipo que representa as licenças dos funcionário de uma empresa, definido pela estrutura a seguir:
struct licenca { char nome[51];
/*
nome do funcionario
*/
Data inicio;
/*
data de inicio da licenca
*/
Data final;
/*
data de final da licenca
*/
}; typedef struct licenca Licenca;
•
Os campos inicio e final são do tipo Data, descrito a seguir:
struct data { int dia, mes, ano;
};
typedef struct data Data;
•
Escreva uma função que faça uma busca binária em um vetor de ponteiros para o tipo
Licenca, cujos elementos estão em