Управляющие структуры
В Maple две управляющие структуры:
- выбор if;
- повторение for,
if cond1 then expr1 else expr2 end if; |
if cond1 then expr1 elif cond2 then expr2 else expr3 end if; |
for i from i1 by step to i2 do stats end do; |
for i from i1 by step to i2 while cond1 do stats end do; |
for i in expr1 do stats end do; |
for i in expr1 do stats od; |
for i in expr1 while expr2 do stats end do; |
где cond1 и cond2 – условия,
expr1, expr2 – выражения,
stats – операторы,
i, i1, i2 – соответственно: переменная цикла, начальное и конечное значения i.
Эти операторы могут быть вложенными. Внутри цикла применяются операторы:
break – для прерывания цикла,
next – для продолжения до следующей итерации,
while – для наложения дополнительных условий.
Операторы endif и fi, enddo и od эквивалентны.
Задача 10.3. Двойной факториал
Определите функцию двойного факториала для любого целого n:
- N1:=20; N2:=41;
- FD:=proc(N) local P, i1, i;
- P:=1;
- if modp(n,2)=0 then i1:=2 else i1:=1 end if:
- for i from i1 by 2 to N do P:=P*i; end do:
- end proc:
- printf('' %7.0f!! = %20.0f", N1, FD(N1));
- printf('' %7.0f!! = %20.0f", N2, FD(N2));
Задача 10.4
Вычислить значения хi, где хi = (xi–1 + 1/xi–1), x0 = 1, пока |xi – хi–1|< ε (i = 1, 2,..., n, n = 10, ε = 10–3).
- n:=10; x:=1;
- epsilon:=10?(-3);
- for i from 1 to n do
- xp:=x: x:=evalf((x+1/x));
- if abs(x-xp)<=epsilon then break else printf("x= %20.8f \n", x) end if:
- enddo
Задача 10.5
Найти целое N(x), x∈ [a, b], такое, что при a = 1, b = 2 и c = 2.
- for x from a to b by 0.01 do S:=0:
- for i from 1 to 100 while S
- S:=S+evalf(i^(-x));
- end do:
- printf("x= %7.4f N(x)= %7d \n", x, i); end do: