Ver Mensaje Individual
  #6  
Antiguo 10-05-2018
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Reputación: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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; { <-- ¿Flotante? }
    kmsr.Text := FloatToStr (resu);
    ShowMessage ('sin combustible');
    ShowMessage (FloatToStr (f))
  END
  ELSE { IF velc > 110 THEN <-- Este IF no es necesario. }
  BEGIN
    FOR fuel := 50 DOWNTO 0 DO
      REPEAT
        f := f - 0.5;
        resu := kmar - 5
      UNTIL f <= 0; { <-- ¿Flotante? }
    kmsr.Text := FloatToStr (resu);
    ShowMessage ('sin combustible');
    ShowMessage (floattostr (f))
  END
END;
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 10-05-2018 a las 12:36:36.
Responder Con Cita