Главная Промышленная автоматика.

СОСТОИТ в организации цикла. В while-операторе вычисляется значение условия, идущего после while. Если оно истинно (принимает значение true), то выполняется оператор, стоящий после do. Этот процесс повторяется до тех пор, пока условие не станет ложным. Если вначале это условие было истинным, то выполнение оператора должно в конце концов привести это условие к значению false, чтобы закончилось выполнение while-оператора. Для вычисления веса while-оператора суммируются веса всех проверок условия и всех выполненных операторов.

repeat-оператор трактуется аналогично, но только теперь оператор, стоящий за repeat, выполняется перед проверкой условия.

4. В for-операторе

for переменная«-исходное значение step размер шага

until заключительное значение do оператор

"исходное значение", "размер шага" и "заключительное значение" являются выражениями. В случае когда размер шага положителен, "переменная" (называемая индексом) полагается равной значению выражения для исходного значения. Если оно больше заключительного значения, то выполнение оператора заканчивается. В противном случае выполняется оператор, стоящий после do, значение переменной увеличивается на величину шага и сравнивается с заключительным значением. Процесс повторяется до тех пор, пока значение переменной не превзойдет заключительное значение. Случай, когда размер шага отрицателен, трактуется аналогично с той лишь разницей, что окончание происходит, когда значение переменной становится меньше заключительного значения. Вес for-оператора должен быть очевиден в свете предшествующего анализа while-оператора.

В приведенном описании совершенно игнорируется такая деталь, как момент вычисления выражений для исходного значения, размера шага и заключительного значения. Может случиться, что выполнение оператора, стоящего после do, изменяет значение выражения для размера шага. В таком случае вычисление значения выражения для размера шага каждый раз, когда переменная возрастает, может привести к результату, отличному от того, который получился бы, если бы размер шага вычислялся раз и навсегда. Точно так же вычисление размера шага может воздействовать на заключительное значение, а изменение размера шага может повлиять на тест на окончание. Мы обходим эти трудности, отказываясь от программ, в которых подобные явления сделали бы их смысл неясным.

Ъ. Любой оператор можно переделать в помеченный оператор, написав перед ним метку, за которой стоит двоеточие. Главное назначение метки - создание цели для goto-оператора. Меткам не приписывается никакого веса.



1.8. ЯЗЫК ВЫСОКОГО УРОВНЯ - УПРОЩЕННЫЙ АЛГОЛ

6. goto-оператор

goto метка

указывает, что дальше выполняется оператор с данной меткой. Этот оператор не может стоять внутри блока типа 7, если сам goto-оператор не находится в том же блоке. Вес goto-оператора равен 1. goto-операторы следует применять изредка, ибо, вообще говоря, они затрудняют понимание программы. Основное применение goto-оператора - это выход из while-операторов.

7. Последовательность операторов, отделенных друг от друга точками с запятыми и заключенных между выделенными словами begin и end, образует оператор, который называется блоком. Так как блок является оператором, его можно применять всюду, где предусмотрено применение оператора. Обычно программа будет блоком. Вес блока равен сумме весов операторов, составляющих блок.

8. Процедуры. В Упрощенном Алголе процедуры можно определять и впоследствии вызывать. Процедуры определяются оператором определения процедур

procedure имя (список параметров): оператор

Список параметров - это последовательность фиктивных переменных, называемых формальными параметрами. Например, следующий оператор определяет процедуру-функцию M1N:

procedure MIN (х, у):

if л; > г/ then return у else return х

Аргументы X к у являются формальными параметрами.

Процедуры используются одним из двух способов. Один .способ - в качестве функции. После того как процедура-функция описана, к ней можно обратиться в некотором выражении, вызывая ее имя с нужными аргументами. В этом случае последним оператором, выполняемым в данной процедуре, должен быть return-оператор (86). Этот оператор приводит к вычислению значения выражения, следующего за выделенным словом return, и окончанию выполнения процедуры. Значением функции будет значение этого выражения. Например,

Л -МШ(2 + 3, 7)

приводит к тому, что А получает значение 5. Выражения 2--3 и 7 называются фактическими параметрами этого обращения к данной процедуре.

Второй способ применения процедуры состоит в вызове ее с помощью оператора вызова процедуры (8в). Этот оператор есть, по существу, имя процедуры, за которым идет список фактических параметров. Оператор вызова процедуры может изменить и (обыч-



НО изменяет) данные (значения переменных, массивов и т. д.) вызываемой программы. В определении вызываемой таким способом процедуры return-оператор не нужен. Завершение выполнения последнего оператора процедуры завершает и выполнение оператора ее вызова. Например, следующий оператор определяет процедуру ВЗАИМОЗАМЕНА:

procedure ВЗАИМОЗАМЕНА (л;, у): begin

Для обращения к этой процедуре можно было Оы написать оператор вызова процедуры, такой, как

ВЗАИМОЗАМЕНА (Л ft], A[j])

Обмен информацией между процедурами можно осуществлять двумя способами. Во-первых, с помощью глобальных переменных. Мы предполагаем, что глобальные переменные неявно описаны в некоторой универсальной области. В этой области есть подобласть, в которой определены процедуры.

Во-вторых, связь между процедурами можно осуществлять с помощью параметров. В Алголе 60 используется вызов по значению и вызов по наименованию. При бьоове/го значены/о формальные параметры процедуры трактуются как локальные переменные, которым в качестве начальных значений придаются значения фактических параметров. При вызове по наименованию формальные параметры служат указателями места в программе, куда подставляются фактические параметры вместо каждого вхождения соответствующих формальных параметров. Для простоты мы отходим от Алгола 60 и используем вызов по ссылке. При вызове по ссылке параметры обрабатываются с помощью указателей на фактические параметры. Если фактический параметр является выражением (возможно, постоянной), то соответствующий формальный параметр трактуется как локальная переменная, которой в качестве начального значения присвоено значение этого выражения. Поэтому вес реализации вычисления функции или выполнения вызова процедуры на РАМ и РАСП равен сумме весов выполнения операторов в определении соответствующей процедуры. Вес выполнения процедуры, вызывающей другие процедуры (возможно, себя), обсуждается в гл. 2.

9. Смысл read-оператора и write-оператора очевиден. Вес read-оператора равен 1. Вес write-оператора на 1 больше веса вычисления значения выражения, стоящего за выделенным словом write.





0 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174

0.0038