fork download
  1. program ideone;
  2. VAR
  3. Pos : Real;
  4. Vel : Real;
  5. Acc : Real;
  6. Demand : Real;
  7. Max_Vel : Real;
  8. AccDist : Real;
  9. DecelPoint : Real;
  10. Error : Real;
  11.  
  12. begin
  13. Pos:=0;
  14. Vel:=0;
  15. Acc:=3;
  16. Demand:=150;
  17. Max_Vel:=14;
  18.  
  19.  
  20.  
  21. AccDist := (Max_vel/Acc * Max_vel) / 2;
  22. DecelPoint := Demand - AccDist;
  23. Writeln('AccelDist ',AccDist:5:2);
  24. Writeln('DecelPoint ',DecelPoint:5:2);
  25.  
  26. Writeln('ACCEL');
  27. While Vel <> Max_vel
  28. Do Begin
  29.  
  30. Pos := Pos + Vel + Acc/2;
  31.  
  32. Vel := Vel + Acc;
  33.  
  34. If Vel >= Max_Vel
  35. Then Begin
  36. Vel := Max_Vel;
  37. Pos := AccDist
  38. End;
  39.  
  40.  
  41. Writeln('Position:',Pos:5:3);
  42.  
  43.  
  44. End;
  45.  
  46. Writeln('FLAT');
  47. While Pos < DecelPoint
  48. Do Begin
  49.  
  50. Pos := Pos + Vel;
  51.  
  52. //If Pos < DecelPoint
  53. //Then
  54. Writeln('Position:',Pos:5:2);
  55.  
  56. End;
  57.  
  58. Error := Pos - DecelPoint;
  59.  
  60. Writeln('DECEL');
  61.  
  62. Pos:=DecelPoint;
  63. Writeln(Pos:5:2);
  64.  
  65. While Vel > 0
  66. Do Begin
  67.  
  68. //If Error > 0
  69. //Then Begin
  70. //Pos := DecelPoint;
  71. //Error := 0;
  72. //End;
  73.  
  74. Pos := Pos + Vel - Acc/2;
  75. Vel := Vel - Acc;
  76.  
  77. If Vel <= 0
  78. Then Pos := Demand;
  79.  
  80. Writeln('Position:',Pos:5:2);
  81.  
  82.  
  83. End;
  84.  
  85.  
  86. end.
Success #stdin #stdout 0s 232KB
stdin
Standard input is empty
stdout
AccelDist 32.67
DecelPoint 117.33
ACCEL
Position:1.500
Position:6.000
Position:13.500
Position:24.000
Position:32.667
FLAT
Position:46.67
Position:60.67
Position:74.67
Position:88.67
Position:102.67
Position:116.67
Position:130.67
DECEL
117.33
Position:129.83
Position:139.33
Position:145.83
Position:149.33
Position:150.00