Процессы преобразования и выполнение программ
4.1. Декомпозиция
Языки программирования высокого уровня в значительной степени ориентированы на человеческий способ мышления. Алгоритмы, написанные на таких языках не понятны машинам. Их необходимо трансформировать в последовательность команд, которые будут вызываться соответствующие, вполне определенные, действия машины. Эта последовательность команд называется машинно-ориентированный язык. Характерным для этого языка является полное отсутствие сложных конструкций, например, таких как: разыменование, обобщенные виды, вызов процедуры, арифметические выражения с тремя и более действиями и т. д.
Формы машинно-ориентированного языка всегда элементарны. Допускаются:
1) обозначения, например: 10, ложь, «Иванов» и т.д.;
2) одноместные формулы, типа: 18 или (V) 20, sign a, abs b и т.д.;
3) двуместные формулы, например: 14+3, а*а, «Паро»+ «ход» и т.д.
Более сложные формулы нужно разлагать на элементарные, вводя вспомогательные обозначения для промежуточных результатов. Запись формул становится длиннее, а среднее количество информации, приходящейся на знак, уменьшается.
Продемонстрируем разложение (декомпозицию) выражение в «трехадресную форму» на примере:
х=(а*b+(а+d)*c)/(a*a+b*b)
h 1=a; a
h2=b; b Один операнд (h2)
h1=a*b; x и одна переменная (h1)
h2=a; a
h3=d; d Один операнд (h3)
h2=h2+h3; + и одна переменная (h2)
h 3=c; c
h2=h2*h3; x Два операнда (h3, h2)
h1=h1+h2; + и одна переменная (h1)
h2=a; a
h3=a; a Один операнд (h3)
h2=h2*h3; x и одна переменная (h2)
h3=b; b
h4=b; b Один операнд (h4)
h3=h3*h4; x и одна переменная (h3)
h 2=h2+h3; +
h1=h1/h2; / Один операнд (h2) и одна
переменная (h1)
Замечание1.
Информация в правом столбце не имеет отношение к реализации схемы вычисления. Если этот правый столбец записать в строку с лево направо, то получим так называемую польскую инверсную запись (ПОЛИЗ) декомпонированной формулы.
Замечание 2.
В приведенном примере, первой становится свободной та переменная, куда значение было помещено последним (h4, h3, h2 и h1 – последовательность освобождения переменных). Память организованной по такому принципу называется магазином. После исполнения формулы, результат находится в первой переменной магазина h1 (и ни в какой другой – это контроль!).
Определение.
Трехадресная форма - это форма, в которой задаются, как максимум, два операнда иодна переменная для результата.
Поскольку промежуточный результат часто сразуже используется как операнд, целесообразно иметь специальную переменную, с которой осуществляются эти операции. Переменная предназначенная для накопления суммы, носит название сумматор (СМ) и имеет вид:
СМ=СМ+а.
Самостоятельно провести перевод в одноадрестную форму приведенную выше формулу, используя понятие сумматор.
Подсказка. Вначале необходимо каждую трехадрестную команду заменить тремя одноадрестными, а затем лишние команды вычеркнуть.
Замечанеи 3. Декомпозиция проводится нетолько арифметических выражений, но логических формул, операторов языка программирования массивов и подпрограмм с цель создания загрузочного модуля.