Ayuda con un problema en C++

He.
10 de Junio del 2009
Una comunidad dispone de un fichero secuencial PERSONAS.dat con la siguiente
estructura de campos:

nombre: de tipo cadena de 30 caracteres.
anio_nac: de tipo entero. Es el año de nacimiento.
direccion: de tipo cadena de 60 caracteres.

Se deberá crear un fichero secuencial MAYORES.dat de la misma estructura con los
datos de aquellas personas, que en el año actual, son o van a ser mayores de
edad ( 18 o mas años ).

Al finalizar el proceso, se indicará el numero de personas mayores de edad que
hay en esa comunidad y que porcentaje supone respecto al total.


-----------------------

Este es el enunciado, podriais darme la solucion y a ser posible una explicacion de lo hecho paso a paso? Muchas gracias

He.
10 de Junio del 2009
He intentado hacerlo y sin errores dandole mil repasos obtuve esto. Estoy seguro que sigo teniendo un monton de fallos...

typedef struct
{
char nombre[30];
int anio_nac;
char direccion[60];
}
registro1;

typedef struct
{
char nombre[30];
int anio_nac;
char direccion[60];
}
registro2;

void main()
{
FILE *pf1;
FILE *pf2;
registro1 registro11;
registro2 registro22;
int may_edad,porc_may_edad;

if((pf1=fopen("personas.dat","rb"))==NULL);
{
printf("Error de apertura");
}
if((pf2=fopen("mayores.dat","wb"))==NULL);
{
printf("nError de apertura");
}
do
{
may_edad=2009-registro11.anio_nac;
fread(&registro11, sizeof(registro1), 1, pf1);
if( may_edad>=18 )
{
fwrite(&registro22, sizeof(registro2),1,pf2);
may_edad++;
}
}
while(!feof(pf1));

printf("El numero de personas mayores de edad es %d", may_edad);

porc_may_edad=(may_edad/sizeof(registro11))*100;
printf("El porcentaje de mayores de edad con respecto al total es %d", &porc_may_edad);



fclose(pf1);
if(ferror(pf1))
printf("Error de cierre");
fclose(pf2);
if(ferror(pf2))
printf("Error de cierre");

getch();

}
-------------------

Aver que podeis decirme, un saludo