Ver Mensaje Individual
  #2  
Antiguo 01-04-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Reputación: 19
Chris Va por buen camino
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
    // calculamos fechas de renovación de las Gonadas
    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));

        // calculamos la fecha de concepción más cercana a una renovación
        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);

        // guardamos la diferencia más cercana conocida
        if Min(MDiff, VDIff) < MenorDiferencia then
            MenorDiferencia := Min(MDiff, VDIff);

        // comparamos cúal de ambos sexos tiene menor diferencia
        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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita