Usar el operador de igualdad con flotantes no es muy buena idea. Ten en cuenta que los ordenadores son pésimos haciendo cálculos con fracciones cuyo denominador no es potencia de dos; un ordenador es incapaz de representar con exactitud el valor 0'1, por ejemplo, y menos aún 49'77. Deberías cambiar el "UNTIL f=0" por "UNTIL f <= 0", que es la única manera de asegurarte.
Por otro lado, cuida la indentación; es muy difícil seguir el código tal como tú lo escribes. Te lo reformateo para que veas la diferencia:
Código Delphi
[-]
f := 50;
kmfinal := 0;
velc := StrToInt (vel_C.Caption);
kmar := StrToInt (km.Caption);
IF velc <= 110 THEN
BEGIN
FOR fuel := 50 DOWNTO 0 DO
REPEAT
f := f - 0.33;
resu := kmar - 5
UNTIL f <= 0;
kmsr.Text := FloatToStr (resu);
ShowMessage ('sin combustible');
ShowMessage (FloatToStr (f))
END
ELSE
BEGIN
FOR fuel := 50 DOWNTO 0 DO
REPEAT
f := f - 0.5;
resu := kmar - 5
UNTIL f <= 0;
kmsr.Text := FloatToStr (resu);
ShowMessage ('sin combustible');
ShowMessage (floattostr (f))
END
END;