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;
}