Автоматизированное проектирование. Норенков И.П. - 177 стр.

UptoLike

Составители: 

%*#$A&,& +($*,#&($"!)&P !"#$%!#&'&($"!))KH :&:#*%5@!"! 6
Локальные переменные, описанные в блоке
local
...
end_local;
действуют только в пределах данных функции или процедуры.
Ряд функций и процедур относится к стандартным и потому не требует опис ания во вновь разрабатываемых моде-
лях. Отметим следующие стандартные функции:
Abs абсолютная величина; Sqrt корень квадратный; Exp экспонента; Log, Log2, Log)0 логарифмы на-
туральный, двоичный, десятичный соответственно; Sin, Cos, Tan, Acos, Asin, ATan тригонометрические и обратные
тригонометрические функции sin, cos, tg, Arc cos, Arc sin, Arc tg.
В число стандартных входят также функции: BLength подсчет числа бит в двоичном коде; HiBound верхняя
граница индекса у array или верхняя граница числа элементов у set, bag, list; LoBound то же в отношении нижних гра-
ниц; Length подсчет числа символов в строке; Odd возвращает значение true, если аргументнечетное число;
SizeOf возвращает число элементов в объекте агрегативного типа; TypeOf — возвращает список типов, к которым при-
надлежит параметр этой функции; Exists возвращает значение true, если аргумент этой функции входит в число атри-
бутов соответствующей сущности, и др.
К стандартным процедурам относятся процедуры Insert и Remove вставка или изъятие элемента в заданной по-
зиции у объекта агрегативного типа соответственно.
При описании алгоритмов в телах процедур и функций могут использоваться операторы 07+&#; (Null), 0"'+()'()-
*'9 (Assignment), (.2#") (:ase), +#+&)(*#; (Compound Statement), 7+4#(*.; (if..then..else), ='%4) (Repeat), (.,#-) '6 E7*%-
='' '4' 0"#=$-7". (Return), 0$"$,#-) *) %#*$= ='%4) (Skip).
В выражениях используются операнды, знаки операций, вызовы функций. Так, для арифметических операций над
числами типа real применяются следующие знаки: * — умножение, / — деление, DIV — целочисленное деление, + — сло-
жение, — - вычитание, ** — возведение в степень, MOD – деление по модулю.
Знаки логических операций: not отрицание, and конъюнкция, or дизъюнкция, xor исключающее ИЛИ.
В применении к величинам типа logical эти операции выполняются по правилам действий в трехзначном алфавите. Логи-
ческое выражение a1 in a2 принимает значение true, если а1 содержится в а2. Оператор like используется для посимволь-
ного сравнения строк. Для сравнения экземпляров сущностей используют операцииравноинеравносо знаками :=: и
:<>: соответственно.
Операции над множествами (типами bag и set) – пересечение (Intersection), объединение (Union), разность
(Difference). Их знаки суть * (умножение), + (плюс), — (минус) соответственно. Оператор Query (А <* В | С) возвращает
подмноже ство тех элементов из агрегативного типа В, для которых выполняется условие С, здесь Апростая перемен-
ная, используемая в С. Знак + (плюс) по отношению к операндам типа binary или string есть знак конкатенации.
В качестве формальных параметров процедур и функций, кроме типов данных, применяемых в других конструкци-
ях языка и охарактеризованных выше, могут использоваться обобщенные типы: generic, aggregate и некоторые другие.
Тип generic формального параметра означает, что соответствующий фактический параметр может иметь любой тип дан-
ных из числа предусмотренных при описании процедуры. Аналогично тип aggregate обобщает агрегативные типы данных
array, bag, list, set. Например:
function add (a,b: generic: intype): generic: intype;
local
nr: number;
vr: vector;
end_local;
if (‘numberin typeof (a)) and (‘number in typeof (b))
then nr := a+b;
(* функция typeof (a) возвращает тип аргумента а и, если этот тип есть number, то первый операнд
логического выражения равен true *)
return (nr);
else
if (‘this schema.vectorin typeof (a)) and (‘this schema.vectorin typeof (b)) then
vr.i := a.i + b.i;
vr.j := a.j + b.j;
vr.k := a.k + b.k;
(* подразумевается, что декларация типа vector была произведена в схеме с именем this schema *)
return (vr);
end_if;
end_if;
end_function;
&.+.)$(*),$". !"#$%!#&'&($"!))$* +($*,#&($"!)&*
177
 5@!"! 6                                        %*#$A&,&      +($*,#&($"!)&P !"#$%!#&'&($"!))KH :&:#*%

      Локальные переменные, описанные в блоке

      local
      ...
      end_local;

действуют только в пределах данных функции или процедуры.
       Ряд функций и процедур относится к стандартным и потому не требует описания во вновь разрабатываемых моде-
лях. Отметим следующие стандартные функции:
       Abs — абсолютная величина; Sqrt — корень квадратный; Exp — экспонента; Log, Log2, Log)0 — логарифмы на-
туральный, двоичный, десятичный соответственно; Sin, Cos, Tan, Acos, Asin, ATan — тригонометрические и обратные
тригонометрические функции sin, cos, tg, Arc cos, Arc sin, Arc tg.
       В число стандартных входят также функции: BLength — подсчет числа бит в двоичном коде; HiBound — верхняя
граница индекса у array или верхняя граница числа элементов у set, bag, list; LoBound — то же в отношении нижних гра-
ниц; Length — подсчет числа символов в строке; Odd — возвращает значение true, если аргумент — нечетное число;
SizeOf — возвращает число элементов в объекте агрегативного типа; TypeOf — возвращает список типов, к которым при-
надлежит параметр этой функции; Exists — возвращает значение true, если аргумент этой функции входит в число атри-
бутов соответствующей сущности, и др.
       К стандартным процедурам относятся процедуры Insert и Remove — вставка или изъятие элемента в заданной по-
зиции у объекта агрегативного типа соответственно.
       При описании алгоритмов в телах процедур и функций могут использоваться операторы 07+&#; (Null), 0"'+()'()-
*'9 (Assignment), (.2#") (:ase), +#+&)(*#; (Compound Statement), 7+4#(*.; (if..then..else), ='%4) (Repeat), (.,#-) '6 E7*%-
='' '4' 0"#=$-7". (Return), 0$"$,#-) *) %#*$= ='%4) (Skip).
       В выражениях используются операнды, знаки операций, вызовы функций. Так, для арифметических операций над
числами типа real применяются следующие знаки: * — умножение, / — деление, DIV — целочисленное деление, + — сло-
жение, — - вычитание, ** — возведение в степень, MOD – деление по модулю.
       Знаки логических операций: not — отрицание, and — конъюнкция, or — дизъюнкция, xor — исключающее ИЛИ.
В применении к величинам типа logical эти операции выполняются по правилам действий в трехзначном алфавите. Логи-
ческое выражение a1 in a2 принимает значение true, если а1 содержится в а2. Оператор like используется для посимволь-
ного сравнения строк. Для сравнения экземпляров сущностей используют операции “равно” и “неравно” со знаками :=: и
:<>: соответственно.
       Операции над множествами (типами bag и set) – пересечение (Intersection), объединение (Union), разность
(Difference). Их знаки суть * (умножение), + (плюс), — (минус) соответственно. Оператор Query (А <* В | С) возвращает
подмножество тех элементов из агрегативного типа В, для которых выполняется условие С, здесь А – простая перемен-
ная, используемая в С. Знак + (плюс) по отношению к операндам типа binary или string есть знак конкатенации.
       В качестве формальных параметров процедур и функций, кроме типов данных, применяемых в других конструкци-
ях языка и охарактеризованных выше, могут использоваться обобщенные типы: generic, aggregate и некоторые другие.
Тип generic формального параметра означает, что соответствующий фактический параметр может иметь любой тип дан-
ных из числа предусмотренных при описании процедуры. Аналогично тип aggregate обобщает агрегативные типы данных
— array, bag, list, set. Например:

      function add (a,b: generic: intype): generic: intype;
      local
      nr: number;
      vr: vector;
      end_local;
      if (‘number’ in typeof (a)) and (‘number’ in typeof (b))
      then nr := a+b;
      (* функция typeof (a) возвращает тип аргумента а и, если этот тип есть number, то первый операнд
         логического выражения равен true *)
      return (nr);
      else
      if (‘this schema.vector’ in typeof (a)) and (‘this schema.vector’ in typeof (b)) then
      vr.i := a.i + b.i;
      vr.j := a.j + b.j;
      vr.k := a.k + b.k;
      (* подразумевается, что декларация типа vector была произведена в схеме с именем this schema *)
      return (vr);
      end_if;
      end_if;
      end_function;

 &.+.)$(*),$" . !"#$%!#&'&($"!))$*                   +($*,#&($"!)&*                                               177