Cykly

[ZPĚT na OBSAH]

Obecně:
|for <jméno_proměnné>| |from <výraz>| |by <výraz>| |to <výraz>| |while <výraz>| do <posloupnost příkazů> od;

Konkrétně

Chceme vytvořit cyklus, který vytiskne sudá čísla od 0 do 6:
>for i from 0 by 2 to 6 do
>print(i)
>od;

0
2
4
6

promněnná i zde nabývá hodnoty od 0 (from 0 ) do 6 (to 6 ) násobkem dvou (by 2 )

Násobek nemusí být celé číslo:
>for i from 3 by 1.5 to 6 do
>print(i)
>od;

3
4.5
6


Stejný případ s použitím příkazu while

>i:=0;
>while i<6 do
>i:=i+2;
>od;

i:=0
i:=2
i:=4
i:=6



while lze přeložit "až do" => druhý řádek říká, že se bude opakovat cyklus až do té chvíle, dokud i bude menší než 6. Poté se cyklus ukončí.

Více cyklů lze libovolně vnořit do sebe, ale nesmí se křížit:
cykly_vnoreni
>for i from 1 to 3 do
>for j from 1 to 2 do
>print(i,j);
>od;
>od;

1, 1
1, 2
2, 1
2, 2
3, 1
3, 2


Další příklady:

Máme zadanou posloupnost sedmi hodnot objemového průtoku kapaliny v l/min
>Vprutok:=[0,200,400,600,800,1000,1200]: # objemovy prutok [l/min]
>Pocet_dat:=7:

Tyto hodnoty musíme pro další výpočty přepočíst na m3/s:

Máme dvě možnosti

a) příkazu map
>Vprutok:=evalf(map(x -> x/(60*1000), Vprutok)): # prepocet vsech clenu na [m^3/s]

Vprutok:=[0,0.0033333333,0.0066666667,0.0100000000, 0.0133333333,0.0166666667,0.0200000000]


b) cyklus

>for i from 1 to Pocet_dat do
>Vprutok_novy[i]:=evalf(Vprutok[i]/(60*1000));
>od;
>Vprutok_novy:=convert(Vprutok_novy,list); # prevedeni dat z tabulky do vektoru

Vprutok_novy1:=0
Vprutok_novy2:=0.0033333333
Vprutok_novy3:=0.0066666667
Vprutok_novy4:=0.0100000000
Vprutok_novy5:=0.0133333333
Vprutok_novy6:=0.0166666667
Vprutok_novy7:=0.0200000000
Vprutok_novy:=[0,0.0033333333,0.0066666667,0.0100000000, 0.0133333333,0.0166666667,0.0200000000]


Příkaz convert převádí nově vypočtená data do tvaru, se kterým lze dále počítat.