Управляющие конструкции 

Любой алгоритм можно реализовать, используя лишь три управляющие конструкции: последовательное выполнение, ветвление и цикл. 

Оператор ветвление можно изобразить следующей синтаксической диаграммой: 

if <условие> then <последовательность операторов> 

              [ elif <условие> then < последовательность операторов > ] 

              [ else < последовательность операторов > ] 

end if; 

Выражение elif следует понимать как else-if, т.е «в противном случае проверить следующее условие». В квадратных скобках – необязательные параметры. 

Покажем, как можно вычислить корни квадратного уравнения с использованием оператора ветвления if: 

> a:=2;b:=6;c:=1;
d:=b^2-4*a*c;
if d>0 then (-b+sqrt(d))/2/a,(-b-sqrt(d))/2/a
elif d=0 then -b/2/a
else print(`Действительных корней нет !!!`)
end if;
 

 

 

 

 

2
6
1
28
`+`(`-`(`/`(3, 2)), `*`(`/`(1, 2), `*`(`^`(7, `/`(1, 2))))), `+`(`-`(`/`(3, 2)), `-`(`*`(`/`(1, 2), `*`(`^`(7, `/`(1, 2))))))
 

Оператор ветвления можно задавать в форме функции, при этом if должно быть заключено в обратные кавычки: `if `(условие, истинное выражение, ложное выражение) , например: 

> d:=4;
`if`(d>=0, `Есть действительные корни.`, `Действительных корней нет !!!`);
 

 

`assign`(d, 4)
`  •  S ‚  	   
 

> d:=-2;
`if`(d>=0, `Есть действительные корни.`, `Действительных корней нет !!!`);
 

 

`assign`(d, -2)
`  ”  µ  №  S ‚   †  !‘ ‚  µ  »  	   … 2№ …   !”  !•  ‚   …  µ  №    …  µ ‚ !...
 

Циклы в Maple можно задавать двух типов: for-to  и  while: 

[ for <имя> ] [ from <выражение> ] [ by <выражение> ] [ to <выражение> ]     [ while <выражение> ]  

         do <последовательность операторов> end do;  

или 

[ for <имя> ] [ in <выражение> ] [ while <выражение> ]  

         do < последовательность операторов> end do;  

По умолчанию значения выражений from и by равны единице. 

Приведем примеры использования циклов. В следующем примере организован цикл по переменной k от нуля до 3 с шагом 0,5. 

> for k from 0 to 3 by 0.5 do print(k) end do;
 

 

 

 

 

 

 

0
.5
1.0
1.5
2.0
2.5
3.0
 

Выше, при рассмотрении функции fsolve, были найдены два ближайших к нулю корня уравнения `+`(cos(x), `-`(`/`(`*`(`+`(x, 2)), `*`(`+`(x, `-`(2)))))) = 0.   

Принимая во внимание период функции cos(x) нетрудно заметить, что в каждый интервал [-i⋅π, -iπ + π], где i = 1, 2, 3, 4, …, n, попадает только один корень. Следующий пример демонстрирует нахождение n первых корней указанного выше уравнения. 

> n:=10;
for i from 1 to n do
fsolve(cos(x)-(x+2)/(x-2),x=-i*Pi..-i*Pi+Pi);
end do;
 

 

 

 

 

 

 

 

 

 

 

`assign`(n, 10)
-1.662944360
-5.170382990
-7.250409918
-11.78482522
-13.30607789
-18.20951859
-19.46987598
-24.57696992
-25.67706817
-30.91781263
 

Следующие примеры демонстрируют вычисление n! с использованием цикла for. 

> restart:
n:=7;
z:=1:
for x in seq(i,i=1..n)
do z:=z*x;
if x=n then print(z) end if
end do:
 

 

`assign`(n, 7)
5040
 

или 

> restart:
n:=7;
z:=1:
for x while (x<=n) do z:=z*x:
if x=n then print(z) end if
end do:
 

 

`assign`(n, 7)
5040
 

В циклах можно использовать операторы next и break. Оператор next используется для перехода к следующей итерации цикла, не завершив текущую. Оператор break используется для прерывания цикла. В следующем примере показано, как можно использовать операторы next и break для печати нечетных чисел в диапазоне от 1 до 10. 

> restart:
for i  do
if (i > 10) then break end if;
if (i mod 2)=0 then next end if;
print(i)
end do;
 

 

 

 

 

1
3
5
7
9