Considere um tipo que representa um funcionario de uma empresa, definido pela estrutura a seguir:
typedef struct funcionario Funcionario; 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 mês };
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. Esta 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. A função deve obedecer ao seguiinte protótipo:
Funcionario* busca (int n, Funcionario** v, char* nome);
#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructfuncionarioFuncionario;structfuncionario{charnome[81];floatvalor_hora;inthoras_mes;};intcomparador(char*nome,Funcionario*f){returnstrcmp(nome,f->nome);}Funcionario*busca(intn,Funcionario**v,char*nome){intcomparacao;intinicio=0;intfim=n-1;intmeio=(inicio+fim+1)/2;while(inicio<=fim){comparacao=comparador(nome,v[meio]);if(comparacao==0)returnv[meio];elseif(comparacao<0)fim=meio-1;elseinicio=meio+1;meio=(inicio+fim+1)/2;}returnNULL;}voidlimpar(intn,Funcionario**a){inti;for(i=0;i<n;i++)free(*a);free(a);}intmain(){inti,n;charnomeInformado[81];Funcionario*funcionario=NULL;printf("\nInforme o número de funcionários: ");scanf("%d",&n);setbuf(stdin,NULL);Funcionario*a[n];for(i=0;i<n;i++){Funcionario*vetor=(Funcionario*)malloc(sizeof(Funcionario));a[i]=vetor;printf("\nNome: ");scanf("%[^\n]81s",vetor->nome);setbuf(stdin,NULL);printf("Valor da hora: ");scanf("%f",&vetor->valor_hora);setbuf(stdin,NULL);printf("Carga horária mensal: ");scanf("%d",&vetor->horas_mes);setbuf(stdin,NULL);}printf("\nInforme o nome a ser pesquisado: ");scanf("%s",nomeInformado);setbuf(stdin,NULL);funcionario=busca(n,a,nomeInformado);if(funcionario!=NULL)printf("\t\nNome: %s\t\nValor/h: %.2f\t\nHoras/mês: %d",funcionario->nome,funcionario->valor_hora,funcionario->horas_mes);elseprintf("\t\nFuncionário não cadastrado!");limpar(n,a);printf("\n\n");system("pause");return0;}