Arreglos en c++ ejercicios resueltos

  c++ – ordenar por fecha de nacimiento

Hacer un programa que permita ingresar n cantidad de trabajadores, incluyendo codigo, nombre, apellido, día, mes y año de nacimiento; y debe imprimir una lista de los trabadores ordenados por fecha de nacimiento.

#include<iostream.h>
#include<conio.h>
#include<string.h>

#define MAX 50
struct fecha
 {
  char dia[3];
  char mes[3];
  char annio[5];

 };
struct trabajador
 {
  char codigo[9];
  char nombre[MAX];
  char apellido[MAX];
  struct fecha fecnac;

 };

 void leerpersonal(int,struct trabajador[]) ;
 void ordenaxfecha(int,struct trabajador[]) ;
 void listado(int,struct trabajador[]) ;
 int bBinariafecha(int,struct trabajador[],struct fecha) ;
 void main(void)
 {int n,pos ;
struct fecha f;                                                                               
struct trabajador x[MAX] ;
 clrscr();
 cout<<"nro de trabajadores:" ;cin>>n ;
 leerpersonal(n,x) ;
 ordenaxfecha(n,x) ;
 listado(n,x) ;
 cout<<"ingrese fecha a busca"<>f.dia ;
 cout<<"mes:" ;cin>>f.mes ;
 cout<<"annio:" ;cin>>f.annio ;
 pos=bBinariafecha(n,x,f) ;
 if(pos==-1)cout<<"no se encuentra";
 else cout<<"lo encontre en la posicion"<<pos;

 getch();
 }


 void leerpersonal(int n,struct trabajador x[])
 {for(int i=0;i<n;i++)
 {cout<<"codigo:";cin>>x[i].codigo;
 cout<<"apellido:";cin>>x[i].apellido;
 cout<<"nombre:";cin>>x[i].nombre;
 cout<<"dia nacimiento:";cin>>x[i].fecnac.dia;
 cout<<"mes nacimiento:";cin>>x[i].fecnac.mes;
 cout<<"annio nacimiento:";cin>>x[i].fecnac.annio;
 cout<<endl;
 }
}
 void ordenaxfecha(int n,struct trabajador x[])
 {struct trabajador temp;
 char f1[9],f2[9];
 for(int i=1;i<n;i++)
 for(int j=n-1;j>=1;j--)
 {strcpy(f1,"");strcpy(f2,"");
 strcat(f1,x[j-1].fecnac.annio);
 strcat(f1,x[j-1].fecnac.mes);
 strcat(f1,x[j-1].fecnac.dia);
 strcat(f2,x[j].fecnac.annio);
 strcat(f2,x[j].fecnac.mes);
 strcat(f2,x[j].fecnac.dia);
if(strcmp(f1,f2)>0)
{temp=x[j-1];
x[j-1]=x[j];
x[j]=temp;

}
}
}
void listado(int n,struct trabajador x[])
{cout<<endl<<"listado de empleados.-"<<endl;
for(int i=0;i<n;i++)
cout<<x[i].codigo<<"\t"<<x[i].apellido<<"\t"
<<x[i].nombre<<"\t"<<x[i].fecnac.dia
<<"/"<<x[i].fecnac.mes<<"/"<<x[i].fecnac.annio
<<endl;
cout<<endl;
}
int bBinariafecha(int n,struct trabajador x[],struct fecha f)
{char f1[9],f2[9];
int izq=0,der=n-1,mitad;
while(izq<=der)
{mitad=(izq+der)/2;
strcpy(f1,"");strcpy(f2,"");
strcat(f1,f.annio);
strcat(f1,f.mes);
strcat(f1,f.dia);
strcat(f2,x[mitad].fecnac.annio);
strcat(f2,x[mitad].fecnac.mes);
strcat(f2,x[mitad].fecnac.dia);
if(strcmp(f1,f2)>0)izq=mitad+1;
else if(strcmp(f1,f2)<0)der=mitad-1;
else return mitad;
}
return -1;
}
c++ - ordenar por fecha de nacimiento