|
В результате преобразования программы и выбрасывания по* исняющих меток получаем следующее описание процедуры: По сравнению с программой-прототипом в процедуре в операторе обратного ^ хода изменен порядок выполнения циклов с параметрами k и /. Предоставляем читателю самому решить, в чем выгода этого изменения. Пусть требуется решить две линейные алгебраические системы четвертого порядка, различающиеся лишь свободными членами, и одну систему седьмого порядка. Расширенные матрицы этих систем имеют соответственно размеры 4 х 6 и 7 х 8. Предположим, что значения элементов этих матриц заготовлены на внешнем носителе. Тогда для решения задачи можно составить такую программу. В этой программе массивы а и Ъ невелики, и можно не опасаться, что для них не хватит места в памяти. Но если бы для таких опасений имелись основания, то следующий вариант программы был бы предпочтительнее: Здесь массив а описан в самом внутреннем блоке программы. Этот блок выполняется дважды — один раз с п = 4, га = 6, второй раз —- с п = 7, га = 8. После первого выполнения блока массив, представленный локальным в этом блоке идентификатором а, перестает существовать. При повторном входе в этот блок создается новый массив с тем же идентификатором. Эти два массива никогда не используются одновременно. Это значит, что при переводе Алгол-программы на машинный язык- можно размещать оба массива на одном и том же участке памяти — на участке, остающемся свободным после размещения машинной программы и локальных величин внешних блоков — переменных я, га, i и /. В первом варианте программы массивы а и Ь были одновременно описаны в одном и том же блоке, поэтому занятые ими участки памяти не имели права налегать один на другой. Для последнего примера возьмем очень простую процедуру без параметров. Оператор такой процедуры, состоящий из одного лишь идентификатора процедуры, выполняется совсем просто — вместо него выполняется тело процедуры точно в таком виде,.в каком оно содержится в описании процедуры.
|