В этом примере анализируется значение х. Если оно отрицательно, то с помощью функции вывода print на экран выводится сообщение «Negative». А вот если х неотрицательно, то не выводится никакого сообщения. В другом примере если х неотрицательно, то выводится сообщение «Positive»:

> х:=-5:

> if х<0 then print(`Negative`) else print(`Positive`) fi;

Negative

> x:=1:

> if x<0 then print(`Negative`) else print(`Positive`) fi;

Positive

Приведем еще один пример, показывающий особую форму задания конструкции if-then-else-fi:

> х:=-5:

> `if` (х<0, print(`Negative`),print(`Positive`));

Negative

> x: =1:

> `if` (x<0, print(`Negative`),print(`Positive`));

Positive

В этой конструкции вида

`if `(Условие, Выражение1, Выражение2)

если Условие выполнятся, то будет исполнено Выражение1, в противном случае будет исполнено Выражение2. Ввиду компактности записи такая форма условного выражения нередко бывает предпочтительна, хотя она и менее наглядна. На рис. 10.3 представлено применение данной конструкции для моделирования трех типов сигналов.

Рис. 10.3. Применение конструкции с функцией if для моделирования сигналов

К сожалению, функции на базе конструкции if не всегда корректно обрабатываются функциями символьной математики. Поэтому надо тщательно контролировать полученные в этом случае результаты.

10.2.2. Циклы for и while

Зачастую необходимо циклическое повторение выполнения выражения заданное число раз или до тех пор, пока выполняется определенное условие. Maple имеет обобщенную конструкцию цикла, которая задается следующим образом:

|for <name>| | from <expr1>| | to <expr3>| | <expr2>| |while <expr4>|

do <statement sequence> od;

Здесь name — имя управляющей переменной цикла, expr1, expr2 и expr3 — выражения, задающие начальное значение, конечное значение и шаг изменения переменной name, expr4 — выражение, задающее условие, пока цикл (набор объектов между словами do и od) будет выполняться.

В ходе выполнения цикла управляющая переменная меняется от значения expr1 до значения expr2 с шагом, заданным expr3. Если блок by <expr2> отсутствует, то управляющая переменная будет меняться с шагом +1 при expr1<expr2. Это наглядно поясняет следующий пример:

> for i from 1 to 5 do print(i) od;

1 2 3 4 5

В нем выводятся значения переменной i в ходе выполнения цикла. Нетрудно заметить, что она и впрямь меняется от значения 1 до значения 5 с шагом +1 Следующий пример показывает, что границы изменения управляющей переменной можно задать арифметическими выражениями:

> for i from 7/(2+5) to 2+3 do print(i) od;

1 2 3 4 5

А еще один пример показывает задание цикла, у которого переменная цикла меняется от значения 1 до 10 с шагом 2:

> for i from 1 to 10 by 2 do print(i) od;

1 3 5 7 9

В этом случае выводятся нечетные числа от 1 до 9. Шаг может быть и отрицательным:

> for i from 9 to 1 by -2 do print(i) od;

9 7 5 3 1

Следует отметить, что expr1>expr2 задать заведомо невыполнимое условие, например, expr1>expr2 и положительное значение шага, то цикл выполнятся не будет. В цикл можно прервать с помощью дополнительного блока while <expr4>. Цикл с таким блоком выполняется до конца или до тех пор, пока условие expr4 истинно:

> for i from 1 to 10 by 2 while i<6 do print(i) od;

1 3 5

Таким образом, конструкция цикла в Maple-языке программирования вобрала в себя основные конструкции циклов for и while. Есть еще одна, более специфическая конструкция цикла:

|for <name>| |in <expr1>| | while <expr2>| do <statement sequence> od;

Здесь expr1 задает список значений, которые будет принимать управляющая переменная name. Цикл будет выполняться, пока не будет исчерпан список и пока выполняется условие, заданное выражением expr2. Следующий пример иллюстрирует сказанное:

> for i in [1,2,5,-1,7,12] do print(i) od;

1 2 5 -1 7 12
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату