Как-то так. В процедуре Next надо реализовать расчётную часть. А диалог с пользователем осуществляется посредством коммандеров и вывода в журнал.

## Код:
```
MODULE TestMoonRider;

   IMPORT  In := i21sysIn,  Log := StdLog;

   (* расчёт следующего шага *)
   PROCEDURE Next* (a, f, t: REAL; OUT h, v: REAL);
   BEGIN
      (* тестовый расчёт *)
      h := (a + f)/t;
      v := (100* a);
   END Next;
   
   (* команда *)
   PROCEDURE Do*;
      VAR  angle, fuel, time, h, v: REAL;
   BEGIN
      In.Open; ASSERT(In.done);
      (* ввод *)
      In.Real(angle);   ASSERT(In.done);  
      In.Real(fuel);   ASSERT(In.done);  
      In.Real(time);   ASSERT(In.done);
      (* расчёт *)
      Next(angle, fuel, time, h, v);
      (* вывод результата *)
      Log.String('Текущая высота = '); Log.Real(h); Log.String(', текущая скорость = '); Log.Real(v); Log.Ln;
   END Do;

END TestMoonRider.

^Q TestMoonRider.Do 45 100 0.1
^Q TestMoonRider.Do 35 200 0.1
^Q TestMoonRider.Do 15 50 0.01
^Q TestMoonRider.Do 25 100 0.01
^Q TestMoonRider.Do 95 100 0.01
```


Чтобы избавиться от копирования коммандеров, надо делать более сложный компонент, который будет самостоятельно следить за пользовательским вводом и автоматически вычислять каждый шаг.