Viendo rápidamente tu código, creo que has mal implementado el algoritmo. Te voy a proporcionar una pseudo implementación basada en lo que he entendido. Me parece que nos has enseñado algo muy interesante hoy
Código Delphi
[-]type
TSexo = (sexMujer, sexVaron, sexDesconocido);
...
function DeterminarSex(FNacimientoMadre: TDate; FNacimientoPadre: TDate; FechaConcepcion: TDate): TSexo;
var
I: Integer;
FechasGonadas: Array of Array[(sexMujer, sexVaron)] of TDate;
MenorDiferencia: Integer;
MDiff, VDIff: Integer;
begin
I := 0;
MenorDiferencia := High(Integer);
while not ((YearOf(FNacimientoMadre) + (4 * (I - 1)) >= YearOf(FechaConcepcion)) and
(YearOf(FNacimientoPadre) + (5 * (I - 1)) >= YearOf(FechaConcepcion))) do
begin
SetLength(FechasGonadas, Length(FechasGonadas) + 1);
FechasGonadas[i][SexMujer] := IncYear(FNacimientoMadre, 4 * (I +1));
FechasGonadas[i][SexVaron] := IncYear(FNacimientoPadre, 5 * (I +1));
MDiff := DaysBetween(FechaConcepcion, FechasGonadas[i][SexMujer]);
VDIff := DaysBetween(FechaConcepcion, FechasGonadas[i][SexVaron]);
if MDiff < 0 then MDiff := (MDiff * -1);
if VDIff < 0 then VDIff := (VDIff * -1);
if Min(MDiff, VDIff) < MenorDiferencia then
MenorDiferencia := Min(MDiff, VDIff);
if MDiff = Min(MDiff, VDIff) then
if MDiff <= MenorDiferencia then
Result := TSexo(sexMujer);
if VDIff = Min(MDiff, VDIff) then
if VDIff <= MenorDiferencia then
Result := TSexo(sexVaron);
Inc(I);
end;
end;
Saludos,
Chris