Основы программирования на C++, PASCAL
5.2. Метод последовательной детализации
Суть метода была описана выше. Сначала анализируется исходная задача. В ней выделяются подзадачи. Строится иерархия таких подзадач (рис. 48).
Затем составляются алгоритмы (или программы), начиная с основного алгоритма (основной программы), далее — вспомогательные алгоритмы (подпрограммы) с последовательным углублением уровня, пока не получим алгоритмы, состоящие из простых команд.
Вернемся к задаче «Интерпретатор», которая рассматривалась в разд. 3.16. Напомним условие: дана исходная символьная строка, имеющая следующий вид:
а
На месте а и b стоят десятичные цифры; значком
Сформулируем требования к программе Interpretator, которые сделают ее более универсальной, чем вариант, рассмотренный в разд. 3.16:
1. Операнды а и b могут быть многозначными целыми положительными числами в пределах MaxInt.
2. Между элементами строки, а также в начале и в конце могут стоять пробелы.
3. Программа осуществляет синтаксический контроль текста. Ограничимся простейшим вариантом контроля: строка должна состоять только из цифр, знаков операций, знака = и пробелов.
4. Проводится семантический контроль: строка должна
быть построена по схеме а
5. Осуществляется контроль диапазона значений операндов и результата (не должны выходить за пределы MaxInt).
Уже из перечня требований становится ясно, что программа будет непростой. Составлять ее мы будем, используя метод последовательной детализации. Начнем с того, что представим в самом общем виде алгоритм как линейную последовательность этапов решения задачи:
1. Ввод строки.
2. Синтаксический контроль (нет ли недопустимых символов?).
3. Семантический контроль (правильно ли построено выражение?).
4. Выделение операндов. Проверка операндов на допустимый диапазон значений. Перевод в целые числа.
5. Выполнение операции. Проверка результата на допустимый диапазон.
6. Вывод результата.
Этапы 2, 3, 4, 5 будем рассматривать как подзадачи первого уровня, назвав их (и будущие подпрограммы) соответственно Sintax, Semantika, Operand, Calc