Otra cosita:
Yo todo eso lo encapsularía dentro de un TObject (una clase). De tal forma que al añadir un periodo de fechas, a la misma vez que pongo a true el índice del array incrementaría la cuenta de una variable privada "diasTrabajados", de esta forma no tendremos que recorrer todo el array para saber lo dias totales, es decir:
Código Delphi
[-] procedure anadir periodo(F1, F2:TDatetime);
var indice, trabajados :integer;
begin trabajados := trunc (F2 -F1) ; indice := trunc(f1-Fini); // como el indice del array empieza en cero, restamos a todo Fini.
// Fini será la variable declarada anteriormente, será una global.
for cont := indice to trabajados do begin if dias[cont-1] = false then inc(FDiasTrabajados);
// si estaba a false, no estaba computado ese día
// por tanto lo computamos ahora.
// Si estaba a true, significa que es una fecha solapada con otro periodo
// añadido anteriormente
dias[cont-1] := true; // -1 porque empieza en cero el array, ¿recuerdas?
end;
end;
Saludos