Александр, а слабо переделать программу на разумно-модульный вид? Собственно, этого автор задачи и ожидал в качестве хорошего решения -- декомпозиция программы, удобная для развития в будущем.
Слабо, конечно. Я считаю, что процедурная декомпозиция вполне адекватна задаче. Все точки расширения вполне обозримы. Добавить строковые операции? Ищем errStringOp, добавляем нужную константу для operation. Огромные таблицы? Правим загрузку и дереференс ячейки. Избавиться от рекурсии в интерпретации выражений? Поле marked из BOOLEAN превращаем в INTEGER.
Чего тут в модулях прятать-то? Ввод и вывод и так нормально спрятаны в In и Out.
Нет, ну можно, конечно, разбить, чтобы подчеркнуть независимость ввода от расчёта и расчёта от вывода, но надо ли?
Ещё можно уменьшить требования к памяти, вычисляя простые формулы сразу при загрузке, как это сделано для целых чисел и строк. Поможет ли в этом разбиение на модули? Вряд ли.
В общем, на мой взгляд, дополнительные модули не нужны, по крайней мере пока не перевалили за 1000 строк. Посмотрим, что за учебный пример будет у Ильи. Надеюсь, он в моё решение не подглядывал : ))